NFSv3およびNFSv4のパフォーマンスの低下

NFSv3およびNFSv4のパフォーマンスの低下

ディスクレスシステム設定が2つあります。これらはすべて/home同じサーバーのマウントディレクトリから来ます。エクスポートは/homeKerberosを使用して問題なく動作しますが、パフォーマンスに問題があるようです。すべてが同じケーブル、同じポート構成などを使用して同じスイッチに接続されます。fstabNFSv3 と NFSv4 のサブセットが異なるため、インストールオプションが若干異なります。

約25000個の小さなファイル(10kb未満)を/dev/shm/dir各クライアントにコピーし(サーバーとクライアント間で物理的にコピー)、rsyncそれを自分のファイルに編集しました~。時間差は約15秒でした。なぜこれが起こるのか知っている人がいますか? NFSv4はNFSv3より遅いですか?それともこの状況を改善するための特定のオプションはありますか?助けてくれて本当にありがとうございます。

仕える人

Debian "Bullseye", 5.10.0-23-amd64 #1 SMP Debian 5.10.179-1 (2023-05-12)
NFS Export: /home 1.2.3.4/24(rw,async,no_subtree_check,sec=krb5:krb5i:krb5p)

# cat /proc/fs/nfsd/versions
-2 +3 +4 +4.1 +4.2

NFSv3 を使用するクライアント 1

Debian "Bullseye", 5.10.0-23-amd64 #1 SMP Debian 5.10.179-1 (2023-05-12)

# cat /etc/fstab
5.6.7.8:/home  /home   nfs rw,nodev,nosuid,hard,nolock,proto=tcp,nfsvers=3,sec=krb5    0   0

# findmnt
└─/home   5.6.7.8:/home nfs   rw,nosuid,nodev,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,proto=tcp,timeo=600,retrans=2,sec=krb5,mountvers=3,mountport=40531,mountproto=tcp,local_lock=all

[client1] /dev/shm ➽ $ time rsync --links -r dir ~/dir1/
real    0m33,835s
user    0m0,582s
sys 0m6,062s

NFSv4.2 を使用するクライアント 2

Debian "Bookworm", 6.1.0-11-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.38-4 (2023-08-08)

# cat /etc/fstab
5.6.7.8:/home  /home   nfs rw,nodev,nosuid,ac,hard,proto=tcp,nfsvers=4.2,sec=krb5    0   0

# findmnt
└─/home   5.6.7.8:/home nfs4   rw,nosuid,nodev,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=krb5,local_lock=none

[client2] /dev/shm ➽ $ time rsync --links -r dir ~/dir2/
real    0m48,155s
user    0m0,671s
sys 0m8,472s

編集: 9月10日, 11:53

私は統計を読んだmountstats。また、暗号化がスループットに顕著な影響を与えないことがわかりました/homekrb5p方法論:

  • cat /proc/self/mountstats > /dev/shm/mountstats.start
  • 走るrsync
  • mountstats mountstats --since /dev/shm/mountstats.start > nfs.mountstats.rsync.txt
  • mountstats iostat --since /dev/shm/mountstats.start > nfs.iostat.rsync.txt
NFSv3 client 

           ops/s       rpc bklog
        1874.078           0.000

read:              ops/s            kB/s           kB/op         retrans    avg RTT (ms)    avg exe (ms)
                   0.000           0.000           0.000        0 (0.0%)           0.000           0.000
write:             ops/s            kB/s           kB/op         retrans    avg RTT (ms)    avg exe (ms)
                 159.312         228.017           1.431        0 (0.0%)           0.720           0.843
NFSv4.2 client

           ops/s       rpc bklog
        1436.392           0.000

read:              ops/s            kB/s           kB/op         retrans    avg RTT (ms)    avg exe (ms)  avg queue (ms)          errors
                   0.025           0.062           2.449        0 (0.0%)           0.500           0.500           0.000        0 (0.0%)
write:             ops/s            kB/s           kB/op         retrans    avg RTT (ms)    avg exe (ms)  avg queue (ms)          errors
                 129.076         201.433           1.561        0 (0.0%)           0.322           0.407           0.061        0 (0.0%)

マウント統計

編集: 9月11日, 9:33

Debian "Bookworm" 12を使用して追加のNFSサーバーを作成し、nvmeドライブに単純なKerberized以外のNFS 4.2共有を作成しました。違いはなく、rsync約50秒かかります。だからこれいいえ明らかにOS/カーネル/ハードウェアの問題ですが、NFSに関連しています。

その後、NFSv3を使用して同じ共有をマウントしましたが、これはrsync約26秒かかりました。それでは、NFSv4はNFSv3に比べて本当に遅いですか?

編集:9月11日18:29(@ronの回答への回答)

あなたはシステム(nfsサーバーとnfsクライアント)の唯一の他の人ですか?

現在、2つの設定がありますが、1つは他のコンピュータと共有されていますが、テスト時には共有を使用する人がほとんどなく、I / Oはアイドルレベルでした。 2番目の設定はプライベートです。

他のネットワーク負荷がありますか?

「アイドル」トラフィックのみをテストしてください。 10Gbpsコアファイバーアップリンクがあり、ワークステーションには1Gbpsアップリンクがあります。 HPエンタープライズスイッチ。ネットワークの問題を最小限に抑えるため(ルータを介してこのトラフィックをプッシュしたくない場合)、NFSサーバーとすべてのワークステーションは同じサブネット上にあり、同じスイッチに接続されます。これは新しい設定ではなく、NFSv3からNFSv4に切り替えようとしています。

ネットワークを設定し、スイッチ/ルーターを完全に制御できます。 >または一度も会ったことがない人がすべて設定して管理します。

ハードウェアを制御して設定します。

Kerberosセキュリティ設定を使用すると、パフォーマンスを向上させるためにセキュリティを追加することもできます。誰もそのようなことを言ったことがありません。

Kerberosが適用されたマウントとKerberosが適用されていないマウントの両方を試しましたが、どちらもNFSv3がNFSv4より高速であることを示しています。

私は倒れましたこれは偶然です。私たちはほぼ200のディスクレスブートワークステーションを持っています。全体的にすべてがうまく動作します。今年、NFSv4を使用して新しいシステム(最新のDebian 12)を設定すると、解凍されたアーカイブ(多くの小さなファイル、アイコン、いくつかのシンボリックリンクを含む)をコピーするのに少し時間がかかりました。だからコピーが必要かどうかを確認することにしました。~について(そうです。いいえ小さな変更に注意してください)以前のNFSv3システムでは、NFSv4では時間がかかることがわかりました。私は常にTCP()を使用してKerberosを使用したり使用したりせずに試しましたproto=tcp

方程式には変数が多いと思いますので、Kerberosなどはしばらく忘れてしまいます。私は次のような個人システムを設定しました。

  • Kerberos なし
  • サーバーはNVMEドライブにある単一のディレクトリをエクスポートします。
  • クライアントはkerberosなしでエクスポートされたディレクトリをマウントします。nfsvers=4.2,ac,rw
  • クライアントとサーバーの両方が1Gbpsイーサネットを備えたDellワークステーションです。
  • クライアントとサーバーの両方が同じスイッチに接続され、同じサブネット(VLAN)にあるため、ネットワークトラフィックにルーターがありません。
  • クライアントとサーバーの両方が同じオペレーティングシステムとカーネルを実行します。Debian 12 "Bookworm"6.1.0-12-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.52-1 (2023-09-07)

その後、私は次の簡単なテストを何度も実行しました。

約50秒ほどかかりました。

  • その後、NFSv3を使用して共有を再マウントしました。
  • そして同じテストを繰り返します

約30秒ほどかかりました。

したがって、同じマシン、同じネットワーク、Kerberosなし、同じシステム、同じカーネル、NFSバージョンのみが異なります。そして大きな違いがあります。面白くて何が起こっているのか知りたかったし、何かを学びたかった。現時点では、これらのすべての要素を考えようとすると、NFSv4が遅いこと以外は答えがありません。 NFSv4のパフォーマンスに関する非常に古い記事を見つけて、それ以来多くの変更があると予想しましたが、この場合はそうではありませんか?

NFSv4ファイル生成速度は実際にはNFSv3ファイル生成速度の半分程度であり、 https://www.linux.com/news/benchmarking-nfsv3-vs-nfsv4-file-Operation-performance/

私の場合、マウントされたNFS共有に小さなファイルをたくさん作成しました。

多くの小さなファイルを試してみるのはなぜ重要ですか?学生はGitを使用しているので、大規模なIDEは小さなファイルをたくさん、時には何百ものものを生成し、学生は多くのソフトウェアをコンパイルするなどのタスクを実行します。そして多くの学生がいます。何千もの小さなファイルがあります。

9月12日10時55分(テスト結果)

大容量ファイルの転送に問題が発生したことはなく、毎日実行し、速度は最大アップストリーム速度に近いです。しかし、とにかく大容量ファイルでコピーテストをしてみました。/nvmeNFS共有です。

/dev/shm ➽ $ dd status=progress if=/dev/zero of=test.file bs=1M count=6000
3488612352 bytes (3,5 GB, 3,2 GiB) copied, 1 s, 3,5 GB/s
6000+0 records in
6000+0 records out
6291456000 bytes (6,3 GB, 5,9 GiB) copied, 1,80348 s, 3,5 GB/s
[orange14] /dev/shm ➽ $ rsync --verbose --progress test.file /nvme/test.file

sent 6.292.992.082 bytes  received 35 bytes  105.764.573,39 bytes/sec
total size is 6.291.456.000  speedup is 1,00

私も何枚コピーしてscp時間を記録してみました。

[orange14] /dev/shm ➽ $ time scp test.file /nvme/test.file6

real    0m59,463s
real    0m59,700s
real    0m59,780s

約105MB/s。

より大きなメモリを持つシステムでテストしている場合は、現在この目的に使用できるスペアサーバーがなく、現在NFSの詳細なテストを実行する時間がかかりません。小さなファイルに対していくつかのテストを繰り返してプロットしました。サーバーとクライアントはどちらも、Dellワークステーション、同じオペレーティングシステム、同じカーネル、Kerberosなし、単純なNFSv3またはNFSv4.2共有です。同じファイルをコピーし続けました。

nfsテスト

フレンドリーな安否

答え1

... 25,000個の小さなファイル

私の最初の傾向は、一般的なシステムオーバーヘッドとファイルシステムI / Oです。ディスクtmpfs で実行されているため、I/O はおそらく Kerberos セキュリティ設定と組み合わせて可変性の原因です。セキュリティを追加するとパフォーマンスが向上すると言った人はいません。

しかし、、実行しない限りリアルタイムカーネルボラティリティを除外するには、わずかなボラティリティが表示されます。次に、NFS v3とv4または他のNFSパラメータがほとんど不正確になる可能性があるため、自分の尾を追うことになると結論付けます。

あなたが言及していない他の重要なことがたくさんあります -

  • あなたはシステム(nfsサーバーとnfsクライアント)の唯一の他の人ですか?
  • 他のネットワーク負荷がありますか?
  • どのネットワークレイアウトとハードウェアが関連しており、可能な影響がありますか?ネットワークを設定し、スイッチ/ルーターを完全に制御できます。または、一度も会ったことがない人がすべて設定して管理します。

私はDebianに慣れていませんが、RHELでは同調デフォルトの設定ファイルは次のとおりです。スループット性能その中には、さまざまな一般的なサーバーワークロードにわたって優れたパフォーマンスを提供する広範囲に適用可能な調整があります。 * 役立つ可能性のあるその他の構成ファイルは次のとおりです。レイテンシパフォーマンスネットワーク遅延またはネットワークスループット。これが私が言うことができる最善の内容です。詳しく調べてみてください。https://www.redhat.com/sysadmin/linux-tuned-tuning-profiles

https://www.redhat.com/sysadmin/linux-tuned-tuning-profiles

あなたは言うファイル25,000個(それぞれ10kb未満)。合計約250MBです。私の考えでは、両方のシステムがハードウェアとOSの設定と構成が同じでない限り、参照として使用するには少なすぎます。唯一の変数は NFS v3 対 v4.0/4.1/4.2 です。それ以外の場合は、数字であなたの尾を追いかけます。

とにかく、マウントプロトコルについてNFS v3とv4.0/4.1/4.2とudpとtcpの間にパフォーマンスの違いがあるかどうかを理解しようとしています。 Xeon 24コアCPUと768GBのRAMを搭載した同じサーバーで、RHEL 8.8を使用してtest.tar約25GBのファイルをコピーして速度を示し、ディスクI / Oを除外するrsync -Pのにtmpfs役立ちましたが、パフォーマンスは見られませんでした。 InfiniBandでは、差は100gbps以上です。 、Mellanoxスイッチを使用して、ラボ環境のマイサーバーとネットワークでのみ使用します。数分間コピーした後、他のすべてのNFSパラメータが観測された最大値約490 MB / sおよび平均約470 MB / sに達することがあります。興味深いことに、再起動後の最初のコピーの速度は340MBほど遅くなる可能性があります。 /sですが、後続のコピーでは490MB/sで最高値を記録します。ここでは、クラスタ設定でUDPとv4.2とTCPでNFS v3を使用する必要があるかどうかを理解するために時間を費やしたいと思います。proto=rdma私のファイルのコピーの1つがTCPより5%〜15%速いことを発見しました。 ;だからproto=rdma最高ですね。 1gbpsネットワークで私が見つけたのはnfsサーバー側にあり、速度が大幅に増加するのではなく、asyncインフィニsyncバンドでは効果がありませんでした。 NFSパラメータのいくつかの組み合わせによってNFS v4.2がv3より遅くなるかどうかはおそらくわかりません。しかし、尋ねてください。NFS v4.2はv3より遅いですか? 私が理解しようとしているところによると、私はいいえと言いたいと思います。そして、v3を含むnfs v.2の文書化された改善によれば、より良いでしょう。pnfsnfs v4もサポートされています。

さらに、InfinibandとNFSの観点から、RHEL 7.9と8.8の間にはかなりの速度差があることがわかりました。scpRHEL 8.8では1.0GB /秒、RHEL 7.9では600MB /秒未満に達し、NFSにも同様の違いがあります。 、その中でもnfs-utils-1.3rhel8.8と比較してRHEL 8.8が優れています。nfs-utils-2.whatever最新のNFSバージョンとは異なるOSを実行している場合は、Debian、Nord、Bulls Aiについてはわかりません。私の考えにはすべて重要です。 管理者は、構成が正しいか問題があるかを理解するために確認する必要があるデータとして、より多くのNFS v4.2パフォーマンスデータが公開されていることを確認したいと思います。

NFS速度テストの最初のステップの推奨事項:

  • 1gbpsネットワークの場合はファイルを作成してくださいtest.tar。 2GBから10GBの間に設定します。
    • dd if=dev/zero of=test.tar bs=10G count=1
    • du -sh test.tar
  • rsync -P <source> <destination>nfs_serverとnfs_clientから `test.tarをコピーするために使用されます。
    • 報告された最高速度に従います。
    • 完了後の平均報告速度の観察
    • 2回目以降の呼び出しを観察します。最初の呼び出しは、NFSとは無関係の最初のオーバーヘッドです。その後3回以上試してください。時代の発展を保証します。
  • mount -t tmpfs -o size=100G tmpfs /scratchnfs_server と nfs_client でタスクを実行し、test.tar各システムで複製するときにその場所に配置して、ディスク I/O の問題を解決するのに役立ちます。したがって、サイズは128GB以上のRAMを搭載したサーバーであると仮定します。あなたは明らかに、このtmpfsがあなたよりも大きくなることを望みますtest.tar
  • exportfs -sサーバー側の同期や非同期などのエクスポートオプションに注意してください。
  • mountversnfsやprotoofなどのクライアントサイドマウントオプションmountprotoに注意してください。udp|tcp|rdma
  • 一つに注目してくださいscp 安全コピー健全性チェックで2つのシステム間でSSH経由で転送する場合、転送速度は1 gbpsネットワークで約112 MB /秒でなければなりません。それ以外の場合は約105 MB /秒よりはるかに低くなりますが、他の理由では速度が遅くなりません。問題が発生するため、NFSが100%の速度で実行されることを期待しないでください。 10GB test.tarは112MB /秒で実行するのに89秒かかります。私はまた、Windows 10コンピュータのSambaコピーを介してこれを見ました。
  • これらはすべてリンゴとリンゴを簡単に比較できるようにするためのものであり、ここから手順2では、より大きなファイルと小さなファイルがたくさんあるシナリオを配置します。

関連情報