2つのマシンを10Gbitイーサネットで接続しています。それらの1つをNFSサーバーとし、もう1つをNFsクライアントとします。
TCPを使用したネットワーク速度のテストiperf
では、双方向で〜9.8 Gbit / sのスループットが示されるため、ネットワークは問題ありません。
NFSサーバーのディスクパフォーマンスのテスト:
dd if=/dev/zero of=/mnt/test/rnd2 count=1000000
結果は約150 MBytes / sであるため、ディスクは書き込みに問題なく動作します。
サーバー/etc/exports
は:
/mnt/test 192.168.1.0/24(rw,no_root_squash,insecure,sync,no_subtree_check)
クライアントは/mnt/test
、次のオプションを使用してこの共有をローカルにマウントします。
node02:~ # mount | grep nfs
192.168.1.101:/mnt/test on /mnt/test type nfs4 (rw,relatime,sync,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.102,local_lock=none,addr=192.168.1.101)
NFS共有からクライアントマシンに大きなファイル(〜5Gb)をダウンロードしようとすると、〜130-140 MBytes / sのパフォーマンスが得られます。これはサーバーのローカルディスクのパフォーマンスに近いため、満足です。
しかし、NFS共有に大きなファイルをアップロードしようとすると、アップロードは〜1.5 Mbytes / sで始まり、ゆっくりと最大18-20 Mbytes / sに増加し、増加しなくなります。アップロードが実際に開始される前に、共有が数分間「ハング」する場合があります。つまり、ホスト間のトラフィックがゼロに近くなりls /mnt/test
、実行すると1〜2分以内に戻りません。その後、ls
コマンドが返され、最初の1.5Mbit / sの速度でアップロードが開始されます。
アップロード速度が最大(18-20 Mbytes / s)に達すると、実行するiptraf-ng
とネットワークインターフェースで〜190 Mbit / sのトラフィックが表示されるため、ここではネットワークもサーバーのHDDでもボトルネックになりません。
私が試したもの:
1.
100MbitイーサネットNICのみで接続された3番目のホストでNFSサーバーをセットアップします。結果は類似しています:DLは良好なパフォーマンスとほぼ100Mbitのネットワーク使用率を示し、アップロードは毎秒数百キロバイトより速く実行されないため、ネットワーク使用率は非常に低くなります(によると2.5Mbit / s iptraf-ng
)。
2. いくつかのNFSパラメーターを調整しようとしました。
sync
またはasync
noatime
いや
hard
rsize
そしてwsize
私は8192までのいくつかの段階でそれらを減少しようとしたので、私の例では最大であります
3. クライアントマシンとサーバーマシンを切り替えようとしました(以前のクライアントでNFSサーバーをセットアップし、逆も同様です)。さらに、同じ構成のサーバーがさらに6つあるので、異なるバリエーションでそれらを相互にマウントしようとしました。同じ結果。
4. MTU = 9000、MTU = 9000および802.3adリンク集約、MTU = 1500のリンク集約。
5. sysctlの調整:
node01:~ # cat /etc/sysctl.conf
net.core.wmem_max=16777216
net.core.rmem_max=16777216
net.ipv4.tcp_rmem= 10240 873800 16777216
net.ipv4.tcp_wmem= 10240 873800 16777216
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.core.netdev_max_backlog = 5000
同じ結果。
6. ローカルホストからマウントします。
node01:~ # cat /etc/exports
/mnt/test *(rw,no_root_squash,insecure,sync,no_subtree_check)
node01:~ # mount -t nfs -o sync localhost:/mnt/test /mnt/testmount/
そして、ここで同じ結果が得られます。ダウンロード/mnt/testmount/
は高速で、アップロード/mnt/testmount/
は非常に遅く、22 MBytes / sより速くなく、実際に転送が開始されるまでにわずかな遅延があります。ネットワークスタックが問題なく動作し、問題がNFSにあるということですか?
これらはすべて役に立ちませんでした。結果はデフォルトの構成と大きく異なりませんでした。echo 3 > /proc/sys/vm/drop_caches
すべてのテストの前に実行されました。
3つのホストすべてのすべてのNICのMTUは1500であり、非標準のネットワークチューニングは実行されません。イーサネットスイッチはDell MXL 10 / 40Gbeです。
OSはCentOS 7です。
node01:/mnt/test # uname -a
Linux node01 3.10.0-123.20.1.el7.x86_64 #1 SMP Thu Jan 29 18:05:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
どの設定が欠落していますか?NFSをハングせずにすばやく書き込む方法
Operation not permitted
straceをNFSプロセスにアタッチしようとしました。