I want to slow my outgoing traffic when it encounters congestion, and measure "congestion" by packet response times. The intent is to avoid one NFS client starving all the other clients when performing large writes.
I've read a good deal of manpages, tutorials, and serverfault answers related to tc traffic throttling, but they all generally start with picking an arbitrary bandwidth cap, and i'd really like the system to automatically adjust itself when our networking components improve.
So your clients share a router which they're using to communicate to an internet NFS server?
If this is a Linux router and you have
tc
there, I think you will actually benefit from outgoing rate limiting just below your ISP's limit, fair queuing like SFQ, and giving priority to small packets (like TCP ACK's; see the Wondershaper for examples).Slowing connections due to overloading your ISPs buffers with large uploads is a classic problem, and is prevented by egress limiting to below your ISP limit, and then allowing your own router to shape your egress, like with the SFQ, and prioritizing TCP control packets to improve latency.