unfs3
私の知る限り、死んでいます。 Ganesha は、完全には成熟していませんが、現在最も活発なユーザー空間 NFS サーバー プロジェクトです。
さまざまなプロトコルを提供しますが、Samba はユーザー空間で動作する成功したファイル サーバーの例です。
最近のパフォーマンス比較は見ていません。
その他の問題:
- 通常のアプリケーションはパス名でファイルを検索しますが、
nfsd
ファイルハンドルでそれらを検索できる必要があります。これは注意が必要で、ファイルシステムからのサポートが必要です (すべてのファイルシステムがサポートできるわけではありません)。以前はユーザー空間からこれを行うことはできませんでしたが、最近のカーネルではname_to_handle_at(2)
が追加されました とopen_by_handle_at(2)
システム コール。 - ファイル ロック呼び出しのブロックが問題だったのを覚えているようです。最近のユーザー空間サーバーがそれらをどのように処理するかはわかりません。 (ロックで待機しているサーバー スレッドを拘束しますか、それともポーリングしますか?)
- 新しいファイル システム セマンティクス (属性の変更、委譲、ロックの共有) は、最初にカーネルでより簡単に実装できる可能性があります (理論的には、まだ実装されていません)。
- パーミッションやクォータなどを手動でチェックする必要はありません。その代わりに、uid を変更し、共通のカーネル vfs コードを使用してそれを行いたいと考えています。 Linux にはシステム コール (
setfsuid(2)
) があります。 )それを行う必要があります。理由は忘れましたが、サーバーでの使用は必要以上に複雑であることが判明したと思います。
一般に、カーネルサーバーの強みは、vfs およびエクスポートされたファイルシステムとの緊密な統合です。より多くのカーネル インターフェイス (ファイルハンドル システム コールなど) を提供することでこれを補うことができますが、それは簡単ではありません。一方、最近人々がエクスポートしたいファイルシステムの一部 (gluster など) は、実際には主にユーザー空間に存在します。これらは、FUSE を使用してカーネル nfsd によってエクスポートできますが、新しい機能には FUSE インターフェースの拡張が必要になる場合があり、パフォーマンスの問題が発生する場合があります。
短いバージョン:良い質問です!
Olaf Kirch は当初、NFS サーバーのユーザー空間とカーネル ベースのバージョンの両方を開発しました。 2000 年の著書「Linux Network Administration」で、彼は次のように述べています。
2.2.0 カーネルは、Olaf Kirch によって開発され、H.J. Lu、G. Allan Morris、および Trond Myklebust によってさらに開発された実験的なカーネルベースの NFS サーバーをサポートします。カーネルベースの NFS サポートにより、サーバーのパフォーマンスが大幅に向上します。
パフォーマンスを改善するために NFS サーバーがカーネルに組み込まれると、それを再び取り出す理由は誰も見当たりませんでした。
Starnamer は正しいです (私はベータ テスターの 1 人でした)。
それをカーネルに入れることは、ひどいパフォーマンス (主に PCNFS クライアントに対して) を改善するための試みであり、その問題が解決されると、誰もそれを再検討することはありませんでした.
カーネルに NFS を使用することには多くの欠陥があります。特に、同じファイルシステムに触れる他のものとうまく動作しないことです (深刻な破損のリスクがあります)。それが問題になることに気づいていません。
私たちは若く、もっと愚かだった、などなど