On Sat, Jan 21, 2017 at 7:13 PM, Nick Hudson <sk...@netbsd.org> wrote: > 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.
I don't know because I'm not familiar with Layer 4 and the socket layer. Someone wizard on the areas may be able to address the issue easier than I expect, but I'm not sure... ozaki-r