On 2017-02-06, Martin Pieuchot <m...@openbsd.org> wrote: > guenther@ pointed out during a2k17 that nfsrv_rcv() already has a way to > not re-enter the socket layer. Instead of doing soreceive() directly in > the receiving path, we notify and wakeup nfsd(8) to do it. > > I'd like to do that unconditionally to fix one of the blocking > recursions.
This more than halves performance for a FreeBSD client _writing_ to an OpenBSD server. Read performance is not (significantly) affected. ===> /obsd dd bs=64k from NFS 8110515331 bytes transferred in 113.948541 secs (71177000 bytes/sec) 8110515331 bytes transferred in 114.227510 secs (71003170 bytes/sec) 8110515331 bytes transferred in 114.647424 secs (70743110 bytes/sec) to NFS 8110515331 bytes transferred in 258.461309 secs (31379998 bytes/sec) 8110515331 bytes transferred in 220.057884 secs (36856282 bytes/sec) 8110515331 bytes transferred in 219.894926 secs (36883595 bytes/sec) ===> /bsd "NFS: Kill so_upcall NET_LOCK() recursion" dd bs=64k from NFS 8110515331 bytes transferred in 115.323728 secs (70328244 bytes/sec) 8110515331 bytes transferred in 117.878431 secs (68804066 bytes/sec) 8110515331 bytes transferred in 117.852977 secs (68818926 bytes/sec) to NFS 8110515331 bytes transferred in 559.963407 secs (14484010 bytes/sec) 8110515331 bytes transferred in 558.174282 secs (14530435 bytes/sec) 8110515331 bytes transferred in 552.301516 secs (14684941 bytes/sec) -- Christian "naddy" Weisgerber na...@mips.inka.de