NFSサーバーのメモリ使用量を増やす

NFSサーバーのメモリ使用量を増やす

私は、最終的に 10Gb ネットワーク上の NFS v4.2 を介してサーバーにコピーされるデータ (100GB のファイル) を作成しています。これらのファイルは、XFS フォーマット (ターゲット ドライブごとに 1 つのコピー) で多数の HDD に保存されます。

コピー タスクの実行中:

  • クライアントのメモリ使用量が非常に多い(64GB を超える場合もあり、可能な限り多くのメモリを使用します)。
  • しかし、サーバー上で RAM はほとんど使用されていません。

クライアントは継続的にデータを生成し、速度を低下させているため、クライアントのメモリ使用量を減らしたいと思います。一方、サーバーはほとんど使用されていません。

サーバーの HDD が遅いため、クライアントはコピーのブロックを少なくするためにできるだけ多くのデータをバッファリングすると思います。ハードウェアの設定を変更することはできません。

サーバーに強制的にさらにデータをキャッシュさせる方法はありますか? クライアント メモリよりもサーバー メモリの使用を優先したいと思います。

NFS 構成:

10.0.3.1:/          /mnt/field  nfs  nfsvers=4.2,noatime,nodiratime,_netdev,noauto,x-systemd.automount,x-systemd.mount-timeout=10 0 0

/etc/exports:

/mnt        10.0.0.0/16(rw,async,fsid=0,no_subtree_check,crossmnt)

サーバー上の Nic 構成:

MTU 9000
rinbuffer tx 512, rx 1024

クライアント上の Nic 構成:

MTU 9000
rinbuffer tx 1024, rx 512

編集: 要求どおり、/proc/meminfo:

クライアントサーバー - - - - - - - - - - - - - - - -

ここに画像の説明を入力してください

このクライアントのメモリ使用量のモニター:

ここに画像の説明を入力してください

ネットワーク使用量:

ここに画像の説明を入力してください

注: クライアントは計算に大きな tmpfs (100 GB) を使用します。この tmpfs は使用可能なメモリ数から減算されないと思います。

編集2:

ネットワークとメモリ使用量の相関関係は、他のクライアントではより明白です (まずそこから始めるべきでした)。このクライアントは tmpfs を使用しません。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

答え1

クライアントは継続的にデータを生成し、速度を低下させているため、クライアントのメモリ使用量を削減したいと思います。

どうしてこれがわかるのでしょうか? クライアント メモリのほとんどはページ キャッシュにありますが、これはまったく正常なことであり、サーバー上のバッファリングを改善しても、クライアント側でのこのデータの積極的なキャッシュを防ぐことはできません。

ページ キャッシュをフラッシュして (テストとして)、ページ キャッシュを使用しない場合のアプリケーションのパフォーマンスを確認してみましたか?

NFS には「クローズからオープンまで」の一貫性と呼ばれるものがあります。つまり、データとメタデータの内容は、ファイルがアクティブに開かれていない場合にのみ安定していることが保証されます (つまり、別のクライアントが別のシステム上のファイルを変更しても、そのことに気付かない可能性があります)。

この一貫性の制限のため、NFS クライアント システム アプリケーションはページ キャッシュに依存して、必要に応じてデータの読み取りが可能であることを確認します。

そうは言っても、何が起こっているか知らなくても、サーバーにさらに多くのデータをオフロードする 1 つの方法は、マウント オプションを使用してクライアントに NFS をマウントし、サーバー上でマウント オプションを使用してパスをエクスポートする/etc/exportsことである可能性があります。syncasync

これにより、クライアント側で書き込みがサーバーにコミットされることが保証され、サーバーはデータをディスクにコミットする前に常に「完了」を応答するようになります。

ただし、クライアント側ですべてのリクエストを検証するため遅延が発生し、クライアントのスループットに影響しますが、サーバーはデータが最初にディスクに書き込まれるのを待たないため、より多くのデータをバッファリングします。また、dirty_write_centisecsサーバー上の やその他のビットを調整して、より多くのデータをライトバックにバッファリングできるようにすることも必要になるでしょう。

しかし、ここに問題があります。これは、クライアントの速度低下や、クラッシュ時のサーバーの整合性の低下を引き起こす可能性があります。サーバーがクラッシュすると、データが失われる可能性があります。

また、これは、NFS が実際には制御できないクライアント上のページ キャッシュのメモリ使用量には影響しません。

全体として、クライアントのメモリ使用量 (ここで測定しているページ キャッシュの場合) を削減しても、クライアントのパフォーマンスが向上するかどうかは疑問です。

答え2

いいえ、メモリの使用を強制的に減らすと、速度が速くなるのではなく遅くなる可能性があります。すでに 188 GB の高速 DRAM に電力を費やしているのであれば、それを使用する方がよいでしょう。

クライアント ホストには 188 GB の MemTotal があり、そのうち 162 GB がキャッシュに使用されています。実際にはメモリ要求はかなり低く、123 GB の MemAvailable は非常に早く解放できることに注意してください。40 GB の Shmem のほとんどはおそらく tmpfs です。

Cached + Shmem を合計すると MemTotal より大きくなるため、tmpfs は共有メモリとキャッシュとして 2 回カウントされていると思われます。また、Cached から Shmem を引いた値が MemAvailable とほぼ等しいことも説明できます。永続ストレージのない tmpfs は解放できません。

サーバー側では 15 GB、MemTotal は変更され、キャッシュでは 13 GB です。このホストには十分なメモリがあります。おそらく、ほとんどの処理はファイルの提供であり、メモリ要求はそれほど多くありません。

以下のような間接費の証拠がなければ大量の vmscan アクティビティまたは MemAvailable が不足している場合は、アクションを実行することはお勧めしません。

関連情報