Re: NFS-Server im Kernel.. warum?

From: Bernd Walter <ticso(at)cicely12.cicely.de>
Date: Wed, 16 Jul 2003 10:50:54 +0200

On Wed, Jul 16, 2003 at 03:20:10PM +1000, Peter Ross wrote:
> Hallo,
>
> da ich mich derzeit etwas mehr mit dem Kernel beschaeftige, gibt es immer
> mal wieder Fragen.
>
> Eine moechte ich gern mal hier stellen, da ich nicht so recht weiter
> weiss:
>
> Warum sind Teile des NFS-Servers im Kernel?

Er ist vollständig im Kernel.
Der nfsd ist nichts weiter als eine Realisierung eines Kernelthreads.
Das einzige, was er macht ist die Komandozeile auswerten und im Kernel
verschwinden.
Das der im Kernel liegt hängt damit zusammen, daß dadurch mit dem VM
System zusammenarbeiten kann und somit schnell ist.
Der nfsiod ist der inzwischen in der 5.x als echter Kernelthread
implementiert worden und übergibt dem Kernel nur noch Parameter per
sysctl.
Wieweit das bereits mit dem nfsd passiert ist kann ich nicht sagen.

> Zur Erklaerung, wie ich zu der Frage komme:
>
> Dass der Client im Kernel laeuft, leuchtet mir ein, immerhin ist er dazu
> da, um Systemrufe zum Lesen und Schreiben etc. auf ein Filesystem zu
> implementieren - in diesem Fall uebers Netz zu schicken.
>
> Der Server erhaelt die Requests und setzt das in lokale
> Filesystemoperationen um.. Das tut ein Haufen anderer Daemonen aber auch..

Im Kernel geht das halt alles wesentlich schneller.
Man kann natürlich auch im Userland implementieren, was aber ein paar
Konsequenzen hat.
Eine Anwendung hat eine andere Sicht auf Files und kann nur per
Filenamen zugreifen - ein NFS CLient liefert aber letzlich Inodes und
da NFS stateless ist mag zwischen öffnen und schreiben vom File ein
kompletter Reboot des Servers liegen.
In dem Fall kann der Server den Filenamen nicht kennen.

> Warum ist der Server also im Kernel angesiedelt und der nfsd nicht ein
> x-beliebiger Daemon im Userland? Und: Ist es ein Muss oder hat das eher
> mit Performance oder Convenience zu tun?

Letzlich hat es mit beidem zu tun.
Unter 5.x ist der nfsd

> In dem Falle waere es zum Beispiel sehr wuenschenswert, den smbd fuer
> Samba in den Kernel zu haengen.. was meines Wissens nicht der Fall ist.

smb ist eiun Statefull Protokoll und hat somit einige Probleme weniger
zu bewältigen.
Es mag aber aus Performance Sicht immer noch Sinnvoll erscheinen das im
Kernel zu realisieren - bei NFS wars allerdings nicht der aleinige Grund.
In letzter Zeit hat man aber auch einen riesigen Satz von Mõglichkeiten
dazubekommen auch im Userland entsprechende Vorteile des Kernels nutzen
zu können - man denke z.B. an sendfile(2) und kqueue(2), was zur Zeit
der NFS Implementierung noch nicht gab.

-- 
B.Walter                   BWCT                http://www.bwct.de
ticso(at)bwct.de                                  info(at)bwct.de
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Wed 16 Jul 2003 - 10:51:19 CEST

search this site