Subject: Efficiency of nfsiod
To: Neil A. Carson <neil@causality.com>
From: Jonathan Stone <jonathan@DSG.Stanford.EDU>
List: tech-kern
Date: 11/09/1998 22:22:31
>On VAC architectures it may be beneficial, during context switches, to
    ^^^^ easily misread as "vax", one  arcitecture where
         ldpctxt/svpctxt means you just cant do this :)

>check the vmspaces of the from/to processes in order to check if they
>both exist within the kernel. If this is the case, it is possible to
>switch faster because the mappings don't need to be changed. Under,
>like, a heavy pagedaemon, this could make a difference.


>Now picture an NFS system running a few nfsiod's. Would it be possible
>to implement them as kernel processes for the same reason? Just a
>thought.

Yes, it should.

It was known win for SunOS on the sun3 and sun4/sun4c with the Sun
"pmeg" mmu. Sun shipped this around, oh, SunOS 4.1; it made a
noticeable difference.  I thought NetBSD already did this on some
ports, at least for inkernel threads...  but looking at
sys/nfs/nfs_syscalls.c, it seems we dont.    Yow. 

Making nfsiod's kernel-only processes (throwing away the vmspace, and
grabbing a new one if/when they ever exit) would make a really nice
project.  It'd mean expanding the pmap module to do the throwing away
and reallocating, though (unless pmap_new has it).  But for a first
pass, they could always be no-ops for most arches.

Someone -- gwr(?) suggested something very similar for mips: having a
designated "empty" userspace pmap, and sharing that single pmap across
all kernel-mode-only processes. (we dont do it fully yet because it'
break our current kstack over/underflow red-zoning.)


The trick should also be a win on, say, arm32 cpus with a
virtually-indexed icache and no ASID hardware.  You usually have to
flush the entire Icache on every context-switch, but for kernel-only
proceses.  you could elide that.  You'd lose some of the HW checks
against wild kernel jumps into userspace code: if the target userspace
address had footprint in the i-cache, the hw wouldnt trap it
(afaik). normal testing should catch gross bugs like that.

I mentioned gwr's suggestion in an email discussion with Mark
Brinicombe somtime early this year. Now that we use a kernel-only
reaper pseudo-process to clean up kernel stacks, if the netbsd arm32
code doesnt already have machinery to do this, there's probably a good
reason not to...