GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum ist der Linux-NFS-Server im Gegensatz zum Userspace im Kernel implementiert?

unfs3 ist tot, soweit ich weiß; Ganesha ist derzeit das aktivste Userspace-NFS-Serverprojekt, obwohl es noch nicht ganz ausgereift ist.

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

Ich habe keinen aktuellen Leistungsvergleich gesehen.

Einige andere Probleme:

  • Gewöhnliche Anwendungen suchen Dateien nach Pfadnamen, aber nfsd muss in der Lage sein, sie per Dateihandle nachzuschlagen. Dies ist schwierig und erfordert Unterstützung durch das Dateisystem (und nicht alle Dateisysteme können dies unterstützen). In der Vergangenheit war dies vom Userspace aus nicht möglich, aber neuere Kernel haben name_to_handle_at(2) hinzugefügt und open_by_handle_at(2) Systemaufrufe.
  • Ich meine mich zu erinnern, dass das Blockieren von Aufrufen zum Sperren von Dateien ein Problem war; Ich bin mir nicht sicher, wie Userspace-Server heutzutage damit umgehen. (Bindest du einen Server-Threadwaiting auf die Sperre auf, oder pollst du?)
  • Neuere Dateisystem-Semantiken (Änderungsattribute, Delegierungen, gemeinsame Sperren) können leichter zuerst im Kernel implementiert werden (in der Theorie – sie sind es meistens noch nicht).
  • Sie möchten Berechtigungen, Kontingente usw. nicht von Hand überprüfen müssen – stattdessen möchten Sie Ihre UID ändern und sich dafür auf den allgemeinen VFS-Code des Kernels verlassen. Und Linux hat einen Systemaufruf (setfsuid(2) ) das sollte das tun. Aus Gründen, die ich vergessen habe, denke ich, dass sich die Verwendung in Servern als komplizierter erwiesen hat, als es sein sollte.

Im Allgemeinen liegen die Stärken eines Kernel-Servers in einer engeren Integration mit dem vfs und dem exportierten Dateisystem. Wir können das ausgleichen, indem wir mehr Kernel-Schnittstellen bereitstellen (wie die Dateihandle-Systemaufrufe), aber das ist nicht einfach. Andererseits leben einige der Dateisysteme, die die Leute heutzutage exportieren möchten (wie Gluster), tatsächlich hauptsächlich im Userspace. Diese können vom Kernel-nfsd unter Verwendung von FUSE exportiert werden – aber auch hier können Erweiterungen der FUSE-Schnittstellen für neuere Funktionen erforderlich sein, und es kann zu Leistungsproblemen kommen.

Kurzfassung:Gute Frage!


Olaf Kirch hat ursprünglich sowohl die Userspace- als auch die Kernel-basierte Version des NFS-Servers entwickelt. In seinem Buch "Linux Network Administration" aus dem Jahr 2000 sagt er:

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

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


Starnamer hat Recht (ich war einer der Beta-Tester).

Es in den Kernel zu packen, war ein Versuch, die miserable Leistung (hauptsächlich für PCNFS-Clients) zu verbessern, und sobald dieses Problem gelöst war, hat sich niemand mehr darum gekümmert.

Es gibt eine Reihe von Mängeln bei der Verwendung von NFS im Kernel, nicht zuletzt, dass es nicht gut mit irgendetwas anderem zusammenspielt, das dasselbe Dateisystem berührt (es gibt ernsthaft böse Korruptionsrisiken), aber damals (1993-4) haben wir es getan Ich weiß nicht, dass das ein Problem sein könnte.

Wir waren jünger und dümmer, etc etc.


Linux
  1. Warum hat der Server meine IP blockiert?

  2. Linux – Warum ist kein Rootfs-Dateisystem auf dem System vorhanden?

  3. Linux – Teilnahme an der Kernel-Mailingliste?

  4. Linux – Warum kann der Kernel Init nicht ausführen?

  5. Ändern Sie die Kernel-Version auf einem Linux-Cloud-Server mithilfe des Rettungsmodus

Wie der Linux-Kernel mit Interrupts umgeht

Kontinuierliche Integrationstests für den Linux-Kernel

So überprüfen Sie die Kernel-Version in Linux

Einrichten eines NFS-Servers und -Clients unter Scientific Linux 6.3

Warum würde der Kernel Pakete fallen lassen?

Warum heißt die Close-Funktion im Linux-Kernel in `struct file_operations` release?