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のパフォーマンスを妨げるものは何でしょうか。
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
ああ、いや: 、libaio
ioengineと--iodepth=64
でdirect=0
を使用しているので、このコマンドは期待どおりに動作しない可能性があります!---(を参照してください。 fio
ioengine の使用時にdirect=1
の使用に失敗したことに関するlibaio
ヘルプ/マニュアルの警告:
libaio
Linuxネイティブ非同期I/O。 Linuxは、バッファなしI/O(direct = 1またはbuffered = 0に設定)のキュー動作のみをサポートする場合があることに注意してください。このエンジンは、エンジン固有のオプションを定義します。 [強調を追加]
したがって、libaio
はiodepth=1
...のように動作する可能性があります( https://github.com/axboe/fio/issues/512#issuecomment-3566045 を参照してください。より詳細な説明)
では、NFSのパフォーマンスを妨げるものは何でしょうか。
あなたが作成したfioコマンドジョブがあなたを妨げているのではないかと思います-おそらくあなたは別のオプションや別のI/Oエンジンを使用する必要がありますか?
PS:--gtod_reduce=1
があなたに何らかの違いをもたらすほど十分なI/Oをプッシュする可能性はほとんどありません...