Warum ist der Linux NFS-Server im Kernel implementiert und nicht der Userspace?

33

Ich habe mich nur gefragt, warum der Linux-NFS-Server im Kernel im Gegensatz zu einer Userspace-Anwendung implementiert ist.

Ich weiß, dass ein Userspace-NFS-Dämon vorhanden ist, aber dies ist nicht die Standardmethode für die Bereitstellung von NFS-Serverdiensten.

Ich würde denken, dass das Ausführen von NFS-Server als Userspace-Anwendung der bevorzugte Ansatz ist, da es zusätzliche Sicherheit bietet, wenn ein Dämon im Userspace anstelle des Kernels ausgeführt wird. Es würde auch mit dem allgemeinen Linux-Prinzip zusammenpassen, eine Sache zu tun und es gut zu machen (und dass Daemons keine Aufgabe für den Kernel sein sollten).
Der einzige Vorteil, den ich mir vorstellen kann, im Kernel zu laufen, wäre eine Leistungssteigerung durch Kontextwechsel (und das ist ein fraglicher Grund).

Gibt es einen dokumentierten Grund, warum es so implementiert wird, wie es ist? Ich habe versucht, herum zu googeln, konnte aber nichts finden.


Es scheint sehr verwirrend zu sein, bitte beachten Sie, dass ich nicht nach dem Mounten von Dateisystemen frage, sondern nach der Bereitstellung der Serverseite eines Netzwerk-Dateisystems . Es gibt einen sehr deutlichen Unterschied. Das lokale Mounten eines Dateisystems erfordert die Unterstützung des Dateisystems im Kernel, sofern dies nicht der Fall ist (z. B. Samba oder Unfs3).

Patrick
quelle
NFS ist ein Dateisystem. Userspace-Dateisystemtreiber müssen FUSE verwenden, was für die Leistung normalerweise schlecht ist.
Jordan
@jordanm nein, tun sie nicht. Tatsächlich können Sie Netzwerkdateisysteme (NFS, CIFS / Samba, Coda usw.) nicht über FUSE ausführen. FUSE ist zum Mounten von Dateisystemen auf dem lokalen Computer gedacht, die nicht bedient werden.
Patrick
Sie haben Recht, meine Aussage würde nur für den Kunden gelten.
Jordan
@jordanm auch das leider nicht. Sie können Dateisysteme ohne FUSE mounten. FUSE ist ohnehin eine relativ neue Technologie, die Client-Seite von Netzwerk-Dateisystemen existierte lange vor FUSE :-). FUSE bietet nur eine Möglichkeit, Dateisysteme zu unterstützen, die nicht vom Kernel bereitgestellt werden (nicht gemein zu sein, nur in der Hoffnung, Missverständnisse auszuräumen :-P)
Patrick
2
@ StarNamer Sie sprechen immer noch über den Client. Ich spreche über den Server. Sie können unfs3einen NFS-Server ausführen, ohne dass der Kernel dies unterstützt.
Patrick

Antworten:

25

unfs3ist tot, soweit ich weiß; Ganesha ist derzeit das aktivste User-Space-NFS-Serverprojekt, obwohl es noch nicht vollständig ausgereift ist.

Obwohl es verschiedene Protokolle bedient, ist Samba ein Beispiel für einen erfolgreichen Dateiserver, der im Userspace arbeitet.

Ich habe in letzter Zeit keinen Leistungsvergleich gesehen.

Einige andere Probleme:

  • Gewöhnliche Anwendungen suchen Dateien anhand des Pfadnamens, nfsdmüssen sie jedoch anhand des Dateihandles nachschlagen können. Dies ist schwierig und erfordert Unterstützung durch das Dateisystem (und nicht alle Dateisysteme können dies unterstützen). In der Vergangenheit war dies im Userspace nicht möglich, aber neuere Kernel wurden hinzugefügt name_to_handle_at(2)und open_by_handle_at(2)Systemaufrufe durchgeführt.
  • Ich scheine mich daran zu erinnern, dass das Blockieren von Dateisperraufrufen ein Problem war. Ich bin nicht sicher, wie Userspace-Server heutzutage damit umgehen. (Binden Sie einen Server-Thread zusammen, der auf das Schloss wartet, oder führen Sie eine Umfrage durch?)
  • Neuere Dateisystemsemantiken (Änderungsattribute, Delegierungen, Freigabesperren) lassen sich möglicherweise einfacher zuerst im Kernel implementieren (theoretisch - meistens noch nicht).
  • Sie möchten Berechtigungen, Kontingente usw. nicht manuell überprüfen müssen, sondern möchten stattdessen Ihre Benutzer-ID ändern und sich dabei auf den allgemeinen Kernel-vfs-Code verlassen. Und Linux hat einen Systemaufruf ( setfsuid(2)), der das tun sollte. Aus Gründen, die ich vergesse, denke ich, dass die Verwendung in Servern komplizierter ist, als es sein sollte.

Im Allgemeinen liegt die Stärke eines Kernelservers in der engeren Integration mit dem vfs und dem exportierten Dateisystem. Wir können das wieder wettmachen, indem wir mehr Kernel-Interfaces bereitstellen (z. B. Aufrufe des Dateihandlesystems), aber das ist nicht einfach. Andererseits leben einige der Dateisysteme, die die Leute heutzutage exportieren möchten (wie Glanz), hauptsächlich im Benutzerraum. Diese können vom Kernel nfsd mit FUSE exportiert werden. Für neuere Funktionen sind jedoch möglicherweise Erweiterungen der FUSE-Schnittstellen erforderlich, und es können Leistungsprobleme auftreten.

Kurzfassung: Gute Frage!

J. Bruce Fields
quelle
2
Leser sollten beachten, dass Bruce der Betreuer des Linux-NFS-Servers ist. Vermutlich weiß er also, wovon er spricht. :)
Dan Pritts
@derfian FYI - Vielleicht möchten Sie hier einen Kommentar abgeben, der besagt, dass " unfs3Github lebt und nach Github zieht" ?
ms-ati
Ich habe das oben erwähnte kommentiert, weil @derfian oder StackOverflow-Benutzer ( unix.stackexchange.com/users/23034/derfian ) der Betreuer von unfs3 ist und kürzlich angekündigt hat, dass es nicht tot ist, zum Beispiel in diesem Github-Kommentar
ms-ati
Für einen NFS-Betreuer ist diese Antwort ziemlich vage.
Torsten Bronger
18

Olaf Kirch hat ursprünglich sowohl den User Space als auch die Kernel-basierte Version des NFS-Servers entwickelt. In seinem 2000 erschienenen Buch "Linux Network Administration" schreibt er:

Der 2.2.0-Kernel unterstützt einen experimentellen Kernel-basierten NFS-Server, der von Olaf Kirch entwickelt und von HJ Lu, G. Allan Morris und Trond Myklebust weiterentwickelt wurde. Die kernelbasierte NFS-Unterstützung sorgt für eine erhebliche Steigerung der Serverleistung.

Ich denke, dass, sobald der NFS-Server in den Kernel verschoben wurde, um die Leistung zu verbessern, niemand einen Grund sah, ihn wieder zu entfernen.

StarNamer
quelle
8

Starnamer ist richtig (ich war einer der Beta-Tester).

Das Einfügen in den Kernel war ein Versuch, die Leistung zu verbessern (hauptsächlich für PCNFS-Clients), und nachdem dieses Problem behoben war, hat sich niemand mehr damit befasst.

Es gibt eine Reihe von Mängeln bei der Verwendung von NFS im Kernel, nicht zuletzt, dass es mit nichts anderem, das dasselbe Dateisystem berührt (es gibt ernsthaft böse Korruptionsrisiken), gut funktioniert, was wir damals (1993-4) nicht getan haben Ich weiß nicht, dass es sich als Problem herausstellen würde.

Wir waren jünger und dummer usw. usw.

stoatwblr
quelle