Linux NFS クライアントを最適化する

このページでは、NetApp Volumes エクスポートをマウントする Linux NFS クライアントをチューニングする方法について説明します。多くのワークロードでは、チューニングは必要ありません。スループットの向上、IOPS の増加、ボリュームのメタデータ負荷の軽減、特定のキャッシュ保存動作が必要な場合を除き、Google Cloud コンソールのマウント コマンドを使用します。

接続手順、エクスポート ポリシーの設定、マウント コマンドの詳細については、NFS クライアントを接続するをご覧ください。

クライアントを構成する

次の順序で Linux NFS 設定を構成します。

  1. カーネルの同時実行: ファイル システムをマウントする前に、NFS リクエスト スロットの数(NFSv3 のスロット テーブル エントリまたは NFSv4.1 のセッション スロット)を設定します。設定を変更する場合は、ファイル システムを再マウントする必要があります。詳細については、Linux NFS の同時実行をご覧ください。

  2. マウント オプション: マウント時にプロトコル バージョン、I/O サイズ、TCP 接続数、ロック、キャッシュ関連のオプションを選択します。詳細については、Linux NFS マウント オプションをご覧ください。

  3. 先読み: ボリュームのマウント後に、マウント ポイントごとにシーケンシャル読み取りプリフェッチを調整します。詳細については、Linux NFS の先読みをご覧ください。

次の表に、これらの構成手順の概要を示します。

ステップ 日時 制御対象 構成場所 ガイド
1 初回マウント前、または再マウント前 TCP 接続あたりの未処理の RPC オペレーション、セッションあたりの NFSv4.1 コマンド /etc/sysctl.conf、
/etc/modprobe.d/
Linux NFS の同時実行
2 マウント時 プロトコル、I/O 転送サイズ、接続数、ロック、属性キャッシュ mount -o、/etc/fstab Linux NFS マウント オプション
3 マウント後 順次読み取りプリフェッチ /sys/class/bdi/.../read_ahead_kb、udev ルール Linux NFS 先読み

設定の連携方法

Linux カーネルは接続ごとの同時実行性を定義します(上の表のステップ 1)。nconnect マウント オプション(上の表のステップ 2)を使用すると、1 つのクライアントから同じボリューム IP アドレスに複数の TCP 接続を開くことができます。

1 つのクライアントの概算の同時実行数は次のように計算されます。

(slots per connection)×(nconnect value)

NetApp Volumes NFS エンドポイントへの各 TCP 接続は、NFSv3 の接続ごとに最大 128 個の未処理オペレーションをサポートします。NFSv4.1 はセッション レベルの制限もネゴシエートします。単一の TCP 接続で、有効な同時実行数をセッションの最大値未満に制限できます。詳細については、Linux NFS の同時実行をご覧ください。

複数のクライアントが同じボリューム IP アドレスをマウントする場合は、クライアント フリート全体の未処理オペレーションの合計が推奨される上限内に収まるように、クライアントあたりのスロット上限を小さくします。

先読みはマウント ポイントごとに構成します(前述の表のステップ 3)。これは、rsize マウント オプションと Linux ディストリビューションのデフォルトによって異なります。一部のディストリビューションでは、rsize に関係なく 128 KiB の固定リード アヘッドが使用されます。このため、調整するまでシーケンシャル読み取りのパフォーマンスが低下する可能性があります。

マウント オプションとカーネル設定は、エクスポート ポリシー、Kerberos 構成、ファイアウォール要件、ボリューム サービスレベルのスループットと IOPS の上限を変更しません。

ワークロードの開始点

次の表に、開始点を示します。アプリケーション、Linux ディストリビューション、ネットワーク パスを使用して設定を検証します。

ワークロード カーネルの同時実行 マウント オプション 先読み
汎用 オペレーティング システムのデフォルト Google Cloud コンソールのマウント手順を使用する オペレーティング システムのデフォルト
単一 VM、高スループット/高 IOPS
  • 接続ごとのスロットテーブルを 128 以下に制限
  • NFSv4.1 の場合、max_session_slots をサーバーの最大値まで設定します。
  • 未処理のオペレーションが 128 個を超える場合は、nconnect=2 以降を使用する
  • nconnect=8~nconnect=16
  • rsize と wsize を調整する
ワークロードがシーケンシャル読み取りバウンドの場合はチューニングする
多くのクライアント(EDA/HPC/レンダーファーム)
  • クライアントあたりのスロット数が少ない(例: 8)
  • ボリューム IP あたりの合計スロット数を推奨上限以下に保つ
  • 多くの場合、NFSv3
  • nconnect なし
  • 大容量ボリュームの場合、複数のボリューム IP にクライアントを分散する
大規模な静的データセットでは高くなることが多い
Kerberos NFSv4.1
  • チューニング max_session_slots
  • パフォーマンスのために nconnect に依存しない
  • sec=krb5、krb5i、または krb5p
  • nconnect と組み合わせない
シーケンシャル読み取りに必要な場合
アドバイザリ ロックのない NFSv3 オペレーティング システムのデフォルト 必要に応じて

チューニングの測定と検証

クライアント設定を更新したら、次の手順を行います。

クライアントを調整すると、仮想マシン(VM)のボリュームへのネットワーク パスの使用効率が向上します。ただし、ボリューム容量、サービスレベル、ストレージ プールの上限、Compute Engine VM のサイズによって結果が制限される可能性があります。

次のステップ