FreeBSDシステムでのNFSパフォーマンスの向上

FreeBSDシステムでのNFSパフォーマンスの向上

NFS を介して ZFS データセットをエクスポートする FreeBSD ストレージサーバーがありますが、小さいファイル転送パフォーマンスが許容範囲より低くなります。

いくつかの背景情報:

  1. エクスポートは、ZFSのsharenfs属性を介さずに/ etc / exportsを介して処理されます。
  2. サーバーには128GBのRAMと2x8コアCPUがあります。
  3. NFSサーバーは、192個のスレッド(vfs.nfsd.maxthreads:192)を使用するように構成されています。
  4. zpoolは、SSDをSLOGとして使用する4x4TB 10,000rpm SAS HDDをサポートします.
  5. 私はいつも次のパラメータを使ってfioを使ってシステムパフォーマンスをテストしました。

    fio --ioengine=posixaio --bs=4k --directory=/mountpoint --refill_buffers --iodepth=1 --file_service_type=sequential --create_on_open=1 --fallocate=0 --unlink=1 --name=benchmark1 --rw=randwrite --numjobs=1 --nrfiles=500000 --filesize=20KB

テスト地元のサーバーの書き込み速度は約です。55MB/秒

同じワークロードテストNFS経由わずかなパフォーマンスのみが表示されます。6000KB/秒。クライアントのマウントオプションは次のとおりです。

myserver:/export/path on /mnt/tmp type nfs4 (rw,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=clientip,local_lock=none,addr=serverip)

また、ネットワークの制限を確認するために、単一の大容量ファイルへの順次書き込みをテストしました。このワークロードでは、123MB/s が得られました。これは、NFS クライアントがギガビット イーサネットに制限されているためです。

また、NFS(vfs.nfsd.async = 1)とZFS(zfs setsync = disabled / myzpool / dataset)で同期書き込みを無効にした状態でパフォーマンスを測定しました。同期書き込みがないと、6000ではなく9000kB / sが得られます。これはまだ受け入れられない数値です。

建物の特定のルーター/スイッチにアクセスできないため、1500を超えるMTUを使用できません。

答え1

  1. NFS 読み書きバッファサイズを大きくする
    sudo mount -o remount,rsize=262144,wsize=262144 myserver:/export/path /mnt/tmp
    
  2. NFSスレッド数の調整
    sudo sysctl -w vfs.nfsd.maxthreads=256
    
  3. ZFS設定の最適化
    sudo zfs set recordsize=4K myzpool/dataset
    

答え2

3年6ヶ月前質問

asyncsyncnfsサーバー側のエクスポートオプションがあり、クライアントはを渡しますmount。サーバー側で、またはexportfs -s確認してから調整します。たとえば、ファイルは次のように簡単にできます。syncasync/etc/exports/etc/exports

/data *(rw,async)

sync間で編集してから変更をasync実行して確認すると、NFSで2倍の速度差がすぐに観察されます。これは私が見つけた最も重要なNFS速度の向上です。非同期データ損失のリスクに注意してください。exportfs -arvexportfs -s

クライアント側にrsize=1048576,wsize=1048576表示されるのはmount得られる最大値だと思います。今日、これはNFSバージョン4.1/4.2およびRHEL 7.9または8.8の場合です。誰もがもっと知っているなら、教えてください。デフォルトでは最大値(少なくともRHELでは)に設定されており、その理由は次のとおりです。

~からhttps://www.ibm.com/docs/en/aix/7.2?topic=client-read-write-size-adjustment

最終更新:2023-03-24;すべての製品/AIX/7.2 rsizeとwsizeの値を減らすと、各NFS読み取り応答および書き込み要求に対してより短いパケットを送信することで、混雑したネットワークでNFSパフォーマンスを向上させることができます。しかし、これによる副作用は、ネットワークを介してデータを送信するためにより多くのパケットが必要であるため、サーバーとクライアントの全体のネットワークトラフィックとCPU使用率が増加することです。 NFSファイルシステムが高速ネットワーク(ギガビットイーサネットなど)を介してマウントされている場合、読み取り/書き込みパケットサイズが大きいとNFSファイルシステムのパフォーマンスが向上する可能性があります。 NFSバージョン3およびNFSバージョン4の場合、ネットワーク転送がTCPの場合は、rsizeおよびwsizeの値を最大65536まで設定できます。デフォルト値は 32768 です。 NFSバージョン2の場合、rsizeおよびwsizeオプションの最大値は8192です。これはデフォルトでもあります。

rsize私は今日wsizeギガビットとより良いネットワークを持つことはそれほど価値がないと思います。scp test.tar単一の 1 GB 以上のファイルで 110 MB/秒以上の一貫した速度を得ることができる場合、参考としてネットワーク輻輳は問題になりません。 SSH経由の単一ファイルSCP(安全コピー)は約112MB /秒です。 1ギガビットネットワークで見られる最高速度です。遅い速度にはネットワーク輻輳だけでなく多くの原因がある可能性があるため、nfsサーバーに最小限のCPUおよびI / O負荷があることを確認してください。

私の経験によると、RHEL 7.9ではNFSは機能せず、vers=4.2RHEL 7.9でのみ機能しますが、vers=4.1RHEL 8.8では機能します。vers=4.2したがって、特定の Linux オペレーティング システムとその NFS バージョンでこのような状況が発生する可能性があります。この記事では、nfs 4.2が4.1に比べて、nfs4がnfs3に比べて大幅に改善された点を指摘しています。私は、これらの改善がNFSを介して1秒あたりのMB /秒の単一ファイルコピーを高速化するよりも、トラフィックの多い環境に適していると思います。また、選択できる3つのプロトコルは、、、udpおよびtcpですrdmavers=rdmaCPUサイクルを節約できるので、これは最善ですが、これをサポートするにはネットワークハードウェア(infinibandなど)が必要です。 RHEL 8.8vers=3とRHEL 8.8vers=4.2の間に単一のファイルNFS速度差があるかどうかを個人的にテストしていません。proto=tcpとは違いはありませんが、proto=udp原則としてudpはより速くなければなりませんudp。 RHEL 8で答えを見つけるのに問題がありますudp

クライアントで使用fsc ファイルシステムキャッシュ、インストールオプションを使用すると、パフォーマンスが向上する可能性があります。 「現在」を「fscすること」の選択肢とみなして確認しますmount。しかし、ゼロロードとシングルnfsレプリケーション速度テストの場合、これは役に立たないと思います。

rsync -P私はMB /秒の速度値を得るために単一のファイルをコピーしました。

関連情報