web-dev-qa-db-ja.com

NFSのスループットが遅い

NFSでのスループットが予想よりも低いという問題がいくつか発生しました。 RAIDセットアップ、ネットワークインターフェイスなど、いくつかのオプション(エンドレスグーグル)を調べた後、基本的なセットアップをテストし、/ media/ramdiskにマウントされたRAMディスクをエクスポートし、ローカルホストを介してアクセスしたいと思いました。

Ramdiskを使用したテストでは、SSD RAID0 NFSエクスポートの場合と同じパフォーマンスの問題パターンが示され、NFS経由でアクセスしているときにパフォーマンスが大幅に低下し、SSDRAIDとRAMディスクの両方が最大で約2倍になります。 13K IOPS読み取り、および4KIOPS書き込み。

サーバ:

Ubuntu 18.04、完全に更新されました。 VM 5 GB RAM、8プロセッサ。(ホストCPU:Intel(R)Core(TM)i7-4800)

/ etc/exportsの内容:

_/media/ramdisk       *(rw,async,no_subtree_check,fsid=1)
_

経由でマウント:

_Sudo mount 127.0.0.1:/media/ramdisk /mnt/ramdisk -o async
_

マウントコマンドの出力:

127.0.0.1:/media/ramdisk on /mnt/ramdisk type nfs4 (rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=127.0.0.1,local_lock=none,addr=127.0.0.1)

次のコマンドを使用して、fioを使用してNFSなしでRAMディスクの速度をテストします。

_Sudo fio --randrepeat=1 --ioengine=libaio --direct=0 --gtod_reduce=1 --name=test1 --filename=/media/ramdisk/test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75_

私は得る:

_read: IOPS=283k, BW=1107MiB/s (1160MB/s)(3070MiB/2774msec)
write: IOPS=94.7k, BW=370MiB/s (388MB/s)(1026MiB/2774msec)
cpu          : usr=21.89%, sys=78.07%, ctx=5, majf=0, minf=7
_

予想通り非常に速い

次のコマンドを使用したNFS経由のテスト:

_Sudo fio --randrepeat=1 --ioengine=libaio --direct=0 --gtod_reduce=1 --name=test2 --filename=/mnt/ramdisk/test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75_

私は得る:

_read: IOPS=12.7k, BW=49.6MiB/s (51.0MB/s)(3070MiB/61951msec)
write: IOPS=4239, BW=16.6MiB/s (17.4MB/s)(1026MiB/61951msec)
cpu          : usr=5.24%, sys=21.16%, ctx=786004, majf=0, minf=5
_

テスト中はシステムを上から監視していますが、テスト中はCPUもネットワークも特にストレスを受けていません。

以下を使用して、RAMディスクでddを直接使用します。

_Sudo dd if=/media/ramdisk/test of=/dev/null bs=1M iflag=nocache status=progress_

私は得る:

4294967296 bytes (4.3 GB, 4.0 GiB) copied, 0.691044 s, 6.2 GB/s

NFS(/ mnt/ramdisk/test)を介して同じことを行うと、次のようになります。

4294967296 bytes (4.3 GB, 4.0 GiB) copied, 2.58302 s, 1.7 GB/s

RPCNFSDCOUNTを64に増やしました

ローカルホストでiperfを実行すると、

_[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  64.6 GBytes  55.5 Gbits/sec
_

したがって、明らかにネットワークスループットは良好です。

では、NFSのパフォーマンスを妨げるものは何でしょうか。

1
Mikkel Nielsen
Sudo fio --randrepeat=1 --ioengine=libaio --direct=0 --gtod_reduce=1 --name=test1 --filename=/media/ramdisk/test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75

ああ、いや: libaioioengineと--iodepth=64direct=0を使用しているので、このコマンドは期待どおりに動作しない可能性があります!---(を参照してください。 fio ioengine の使用時にdirect=1の使用に失敗したことに関するlibaioヘルプ/マニュアルの警告:

libaio

Linuxネイティブ非同期I/O。 Linuxは、バッファなしI/O(direct = 1またはbuffered = 0に設定)のキュー動作のみをサポートする場合があることに注意してください。このエンジンは、エンジン固有のオプションを定義します。 [強調を追加]

したがって、libaioiodepth=1...のように動作する可能性があります( https://github.com/axboe/fio/issues/512#issuecomment-3566045 を参照してください。より詳細な説明)

では、NFSのパフォーマンスを妨げるものは何でしょうか。

あなたが作成したfioコマンドジョブがあなたを妨げているのではないかと思います-おそらくあなたは別のオプションや別のI/Oエンジンを使用する必要がありますか?

PS:--gtod_reduce=1があなたに何らかの違いをもたらすほど十分なI/Oをプッシュする可能性はほとんどありません...

3
Anon