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).
unfs3
einen NFS-Server ausführen, ohne dass der Kernel dies unterstützt.Antworten:
unfs3
ist 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:
nfsd
mü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ügtname_to_handle_at(2)
undopen_by_handle_at(2)
Systemaufrufe durchgeführt.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!
quelle
unfs3
Github lebt und nach Github zieht" ?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.
quelle
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.
quelle