Rather than treating a transient txq overrun as a network loss event schedule another call to tcp_output when the software ring has partially drained.
Details
Diff Detail
- Repository
- rS FreeBSD src repository - subversion
- Lint
Lint Skipped - Unit
Tests Skipped
Event Timeline
@kmacy I don't think iflib is part of -head yet. I see this patch includes references to sys/net/iflib* which also don't exist in -head yet. Can this patch be applied cleanly to -head? if not, I'd be great to have that done.
It's not part of HEAD yet. The objective here is to elucidate the mechanism. I haven't been able to test it under real load yet. Do you really want to run with scissors? :D
I'm adding a "looks good to me" here for the Intel Reviewers as this adds functionality in the stack and the modification to the driver is required.
Heh, as we talked on the transport call, we can reproduce this problem and would love to see how the patch is handling it. :-)
I'd let others chime-in wrt design and what not.
Why is this re-surfacing?
I think the ratelimit code has a better solution, since TCP can query how full the nic queue is and avoid ENOBUFs entirely by avoiding sending on a full queue. The problem with doing this in general is that, outside of ratelimit, the TCP stack has no way to determine what NIC queue a packet will be sent on.