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

Reply via email to