On 01/20/17 03:34, Ryota Ozaki wrote:
On Mon, Dec 12, 2016 at 5:24 PM, Nick Hudson <sk...@netbsd.org> wrote:
On 11/28/16 09:43, Ryota Ozaki wrote:
On Mon, Nov 28, 2016 at 4:29 PM, Nick Hudson <sk...@netbsd.org> wrote:
This is hurting me again.
FYI
https://nxr.netbsd.org/xref/src/sys/dev/usb/if_axe.c#527
I think we need NET_MPSAFE finished for netbsd-8
Further investigations show that even if we enable NET_MPSAFE by default,
there are cases that calling driver Tx with holding softnet_lock. For
example, packet transmission via a unconnected socket and TCP syn ack
(tcp_input still needs softnet_lock).
So I have brought another idea to address the issue: Tx softint; it
defers if_start to softint, which is implemented with deferred if_start.
By doing so, driver's if_start is called without holding softnet_lock.
Note that of course the feature is only enabled for drivers that request it.
This is a patch: http://www.netbsd.org/~ozaki-r/tx_softint.diff
The patch includes changes to if_axe for an example.
The drawback of the approach is of course performance degradation.
I tried it with vioif and saw 3% down on iperf. I haven't tested
it using USB devices, so I don't know the performance impact on USB Tx.
Nick, how do you think the approach? And can you try the patch and
benchmark if the approach satisfies you?
I'll look into this, but...
Note that this is a tentative solution for netbsd-8. The ideal solution
is still to get rid of softnet_lock completely.
How hard is it to remove the need to hold softnet_lock for the case you
mention above? It
would be a shame to rototill all the drivers if it isn't required.
Thanks,
Nick