Details
Diff Detail
- Repository
- rG FreeBSD src repository
- Lint
Lint Skipped - Unit
Tests Skipped - Build Status
Buildable 49788 Build 46678: arc lint + arc unit
Event Timeline
if_get_counter() isn't available yet, so remove the change for if_upgt which uses it.
sys/dev/usb/net/if_ure.c | ||
---|---|---|
1005–1006 | I think we need another API for dealing with the ifq_drv_maxlen. |
Look good to me.
And be aware of
I think we need another API for dealing with the ifq_drv_maxlen.
sys/dev/usb/net/if_ure.c | ||
---|---|---|
1005–1006 |
Before that is done we might leave a TODO so this won't be forgotten. |
sys/dev/usb/net/if_ure.c | ||
---|---|---|
1005–1006 |
sys/dev/usb/net/if_ure.c | ||
---|---|---|
1005–1006 | USB host controllers usually cannot interrupt more than 8000 times per second (High Speed and above), and queues should be large enough to buffer up to 5 Gbps worth of traffic for 125us (1/8000 second). Does that make any sense to you? |
sys/dev/usb/net/if_ure.c | ||
---|---|---|
1005–1006 | Kind of, but I don't understand the disparity between the stack-side queue and the driver queue in this case. Would it make sense for them both to be 512, or is 50 stack and 512 driver really the right way? I checked what re(4) uses, under the assumption that it's likely comparable to ure(4) (I could be very wrong on this assumption, though), and it uses 512 for both queues. |
sys/dev/usb/net/if_ure.c | ||
---|---|---|
1005–1006 | ure(4) has special capabilities to queue multiple ethernet packets per USB host controller IRQ, and should use 512, while the others are more simple and only do one ethernet packet per IRQ. Basically the current interface queue lengths should be preserved. |
Adding @jmg, since he made the change to ure(4) to change the drv queue length to 512.
sys/dev/usb/net/if_ure.c | ||
---|---|---|
1005–1006 | Yes, the previous setting of ifqmaxlen should just be removed. It's an artifact of mechanical replacement, as my diff that set to 512 was: IFQ_SET_MAXLEN(&ifp->if_snd, ifqmaxlen);
+ /* as FreeBSD doesn't have documentation on how to set queue length, I just modified the previous code that was there when the driver was originally imported. As hselasky says, we need to keep a queue length of 512 in order to keep small packets streaming to the device. The max transfer size is 16k, so 16k/80 = 204.8, so * 2 and rounded up slightly is 512. This should max out 1Gbps devices. I haven't trieds 2.5Gbps or 5Gbps devices to see if this or transfer size needs to be increased. |