このトピックでは、SMB または NFS プロトコルを使用する File Storage NAS (NAS) ファイルシステムのパフォーマンスに関するよくある質問 (FAQ) を紹介します。
ファイルシステムのパフォーマンスとストレージ容量の関係
汎用型 NAS ファイルシステム
ファイルシステムの読み取り/書き込みパフォーマンス (最大スループット) は、そのストレージ容量に線形比例します。容量が大きいほど、スループットは高くなります。詳細については、「汎用型 NAS ファイルシステム」をご参照ください。
超高速型 NAS ファイルシステム
ファイルシステムの読み取り/書き込みパフォーマンスは、ストレージ容量の増加に伴い段階的に向上します。詳細については、「超高速型 NAS ファイルシステム」をご参照ください。
ファイルシステムのパフォーマンスとディレクトリサイズの関係
ファイルシステム内のディレクトリの走査は、以下の条件下で遅くなることがあります。
ディレクトリが変更されている場合。たとえば、ディレクトリ内のファイルが作成、削除、または名前変更されている場合です。これにより、頻繁なキャッシュ無効化が発生し、応答が遅くなります。
ディレクトリのメタデータが大きすぎてクライアントのキャッシュに収まらず、頻繁なキャッシュエビクションが発生し、応答が遅くなる場合。
解決策:
ディレクトリ内のファイル数を制限します。1 つのディレクトリに格納するファイルは 10,000 未満にしてください。
ディレクトリを走査している間は、頻繁な変更を避けてください。
ディレクトリに 10,000 を超えるファイルが含まれており、頻繁に変更されない場合は、NFSv3 プロトコルを使用し、
nordirplusパラメーターを指定してファイルシステムをマウントすることで、走査を高速化できます。この方法を実装する前に、その有効性を検証してください。
マウントパラメーターが NAS のパフォーマンスに与える影響
マウントパラメーターは、NAS ファイルシステムのパフォーマンスに大きく影響します。以下に、特定のマウントパラメーターが与える影響を説明します。
rsize と wsize:
影響:これら 2 つのパラメーターは、クライアントとサーバー間でデータ交換を行う際のブロックサイズを定義します。ブロックサイズを大きくすると、ネットワークリクエストの数を減らすことができ、特に大きなファイルを扱う場合にスループットが向上します。
推奨値:1048576 (1 MB)。可能な限り最大値を使用してください。ブロックサイズが小さいと、ネットワークのオーバーヘッドが増加し、パフォーマンスが低下する可能性があります。
hard:
影響:hard マウントオプションを使用すると、NAS サーバーが利用できなくなった場合に、クライアントはサーバーが応答するまでリクエストを継続的にリトライします。これにより、データの整合性と一貫性が確保されます。
推奨事項:このパラメーターを有効にすることを推奨します。このパラメーターはデータ損失を防ぐのに役立ちますが、アプリケーションが一時的に停止する可能性があります。そのため、高可用性が求められるユースケースに適しています。
timeo:
影響:このパラメーターは、クライアントがリクエストをリトライする前に応答を待つ時間を定義します。タイムアウト期間が短いと、特に不安定なネットワークでは、頻繁なリトライが発生し、パフォーマンスが低下する可能性があります。
推奨値:600 (60 秒)。この値により、ネットワークが回復するのに十分な時間が確保され、リトライの回数が減少します。
retrans:
影響:このパラメーターは、NFS クライアントが失敗したリクエストをリトライする回数を定義します。リトライ回数を増やすと、リクエストの成功率は高まりますが、レイテンシが増加する可能性もあります。
推奨値:2。この値は、パフォーマンスとデータ信頼性のバランスを取ります。
noresvport:
影響:このオプションを有効にすると、ネットワークが障害から回復した際に新しい TCP ポートが使用され、ネットワーク接続が確保されます。これにより、ネットワークの信頼性が向上します。
推奨事項:安定したネットワーク接続を確保するために、このパラメーターを有効にすることを推奨します。
softマウントオプションは推奨されません。サーバーが時間内に応答しない場合、サイレントなデータ破損につながる可能性があります。アプリケーションが I/O エラーを適切に処理でき、リスクを完全に理解している場合にのみ使用してください。マウントオプションをデフォルト値以外に設定することは避けてください。読み取りまたは書き込みバッファーサイズを変更したり、属性キャッシュを無効にしたりすると、パフォーマンスが低下する可能性があります。
ECS インスタンスの帯域幅が NAS ファイルシステムのパフォーマンスに与える制限
NAS ファイルシステムで達成できるスループットは、最終的には接続されている ECS インスタンスのネットワーク帯域幅によって制限されます。たとえば、NAS ファイルシステムの理論上のスループットが 500 MB/s であっても、ご利用の ECS インスタンスのネットワークカードが 1 Gbit/s (約 125 MB/s) の場合、実際のスループットは約 125 MB/s に制限されます。
リクエストの読み取り/書き込みスループットがしきい値を超えた場合
ユーザーまたはアプリケーションからのリクエストの読み取り/書き込みスループットがしきい値を超えると、NAS は自動的にリクエストをスロットリングします。これにより、レイテンシが増加します。
汎用型 NAS ファイルシステムの場合、Truncate コマンドを実行してスループットのしきい値を引き上げます。詳細については、「汎用型 NAS ファイルシステムの読み取り/書き込みスループットのしきい値を引き上げる方法」をご参照ください。
超高速型 NAS ファイルシステムの場合、スケールアウトしてスループットのしきい値を引き上げます。詳細については、「超高速型 NAS ファイルシステムのスケールアウト」をご参照ください。
汎用型および超高速型 NAS ファイルシステムのスループットしきい値の詳細については、「汎用型 NAS ファイルシステムのパフォーマンスメトリック」および「超高速型 NAS ファイルシステムのパフォーマンスメトリック」をご参照ください。
汎用型 NAS ファイルシステムの読み取り/書き込みスループットのしきい値を引き上げる方法
汎用型 NAS ファイルシステムの読み取り/書き込みスループットは、そのストレージ容量に比例して線形に増加します。読み取り/書き込みスループットとファイルシステムの容量使用率の関係についての詳細は、「汎用型 NAS ファイルシステムの仕様」をご参照ください。
大きなスパースファイルを作成することで、ファイルシステムにプロビジョニングされた容量、ひいてはパフォーマンスを向上させることができます。これは、サイズの大きいファイルを最小限の実際のデータで書き込むか、truncate や fsutil のようなコマンドを使用することで実現できます。これにより、ファイルシステムの読み取り/書き込みスループットが向上します。Alibaba Cloud NAS ファイルシステム内でスパースファイルまたは生成されたファイルが実際に占有する領域に対して課金されます。詳細については、「汎用型 NAS ファイルシステムの課金」をご参照ください。
たとえば、容量型 NAS ファイルシステムに 1 TiB のファイルを書き込むと、その読み取り/書き込みスループットは 150 MB/s 増加します。パフォーマンス最適化 NAS ファイルシステムに 1 TiB のファイルを書き込むと、その読み取り/書き込みスループットは 600 MB/s 増加します。
Linux
Truncateコマンドを実行してファイルシステム上にファイルを生成し、その読み取り/書き込みスループットを向上させます。sudo truncate --size=1TB /mnt/sparse_file.txt上記のコマンドで、/mnt はコンピューティングノード上のファイルシステムのマウントパスです。
Windows
スパースファイルをファイルシステムに書き込むことで、その読み取り/書き込みスループットを向上させます。
fsutil file createnew Z:\sparse_file.txt 1099511627776上記のコマンドで、Z:\ はコンピューティングノード上のファイルシステムのマウントパスです。
Linux オペレーティングシステムから NAS にアクセスする際のパフォーマンス低下の解決策
解決策 1:
nconnectパラメーターを設定して、単一の ECS インスタンスから NAS にアクセスする際のスループットを向上させるnconnectパラメーターは、Linux クライアントで NFS ファイルシステムをマウントするためのオプションです。このオプションにより、単一の NFS マウントでクライアントとサーバー間に複数の TCP 接続を使用できるようになり、高い I/O 同時実行性を持つワークロードのスループットが大幅に向上します。テストによると、nconnectパラメーターは、単一の ECS インスタンスから NAS にアクセスする際のスループットを 3〜6 倍、最大 3 GB/s まで向上させることができます。ユースケース
単一の ECS インスタンスで複数の同時 I/O 読み取り/書き込み操作が実行される場合 (16 以上の同時操作)。
前提条件
Linux カーネルのバージョンが 5.3 以降であること。
手順
mountコマンドにnconnectパラメーターを追加します。nconnect=4と設定します。以下はコマンドの例です。sudo mount -t nfs -o vers=3,nolock,proto=tcp,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,nconnect=4重要nconnect パラメーターは、単一の ECS インスタンスから NAS にアクセスする際のスループットを向上させますが、NAS ファイルシステムのスループットしきい値は向上させません。単一同時実行、小規模データブロック、または遅延の影響を受けやすいサービスで nconnect パラメーターを有効にすると、レイテンシが増加します。このようなサービスでは nconnect パラメーターを有効にしないでください。
解決策 2:sunrpc.tcp_slot_table_entries を変更して、単一の ECS インスタンスから NAS にアクセスする際のスループットを向上させる
Linux カーネルの
sunrpcモジュールは、単一の NFS リンク内の通信スロット数を決定します。Linux のバージョンによって sunrpc の設定は異なります。スロット設定が高いとレイテンシが増加する可能性があり、低いとスループットが不足する可能性があります。高スループットが必要な場合はスロット数を 128 に設定し、低レイテンシが必要な場合は 16 以下に設定します。説明sunrpc.tcp_slot_table_entriesパラメーターを設定する効果は、nconnectパラメーターほど大きくありません。Linux カーネル 5.3 以降ではnconnectパラメーターを設定してください。ユースケース
単一の ECS インスタンスで複数の同時 I/O 読み取り/書き込み操作が実行される場合。カーネルのバージョンが 3.10 より前の場合。
手順
詳細については、「同時 NFS リクエスト数を変更する方法」をご参照ください。
NGINX がファイルシステムにログを書き込むのに時間がかかる原因
背景情報:
NGINX のログを指定するには 2 つの命令を使用します。log_format 命令はログのフォーマットを指定し、access_log 命令はログファイルのストレージパス、フォーマット名、およびキャッシュサイズを指定します。
問題:
NGINX がファイルシステムにログを書き込むのに時間がかかり、書き込みパフォーマンスが低下します。
原因:
access_log 命令で指定されたログファイルパスに変数が含まれています。NGINX がログエントリを書き込むたびに、ログファイルを開閉します。NAS では、ファイルを閉じると、一貫性を確保するためにサーバーへのデータフラッシュがトリガーされます。この頻繁な開閉・フラッシュのサイクルが、大きなパフォーマンスオーバーヘッドを生み出します。
解決策:
解決策 1:access_log 命令の変数を削除し、ログを固定パスに保存します。
解決策 2:open_log_file_cache 命令を使用して、頻繁に使用されるログのファイル記述子をキャッシュします。これにより、変数を含むパスへのログ保存のパフォーマンスが向上します。設定の詳細については、「open_log_file_cache」をご参照ください。
推奨設定:
open_log_file_cache max=1000 inactive=1m valid=3m min_uses=2;
SMB ファイルシステムでの I/O 操作が遅延する原因
問題:
マウントターゲットを使用して SMB ファイルシステムにアクセスすると、ファイルシステムで I/O 操作を実行する前に数分待つ必要があります。
原因:
NFS クライアントがインストールされているが使用されていないために遅延が発生します。
WebClient サービスが有効になっているため、インターネットファイルサーバーが SMB ファイルシステムにログインできません。
レジストリ設定項目の値に
Nfsnpが含まれているため、ファイルシステム内のファイルを開けません。
解決策:
SMB ファイルシステムに初めてアクセスする際は、マウントターゲットのドメイン名に ping を実行して、コンピューティングノードとファイルシステム間のネットワーク接続を確認し、レイテンシが正常範囲内であることを検証します。
ping コマンドが失敗した場合は、ネットワーク設定を確認し、ネットワークが接続されていることを確認してください。
レイテンシが高い場合は、マウントターゲットの IP アドレスに ping を実行します。IP アドレスへの ping のレイテンシがドメイン名への ping よりも大幅に低い場合は、DNS サーバーの設定を確認してください。
NFS クライアントがインストールされているが使用されていない場合は、NFS クライアントをアンインストールします。
WebClient サービスを無効にします。
次のパスにあるレジストリ設定項目を確認します:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\NetworkProvider\Order\ProviderOrder。レジストリ値に
Nfsnpが含まれている場合は、Nfsnpを削除してインスタンスを再起動します。
Fio ツールを使用して、パフォーマンスメトリックが異常でないか確認します。
fio.exe --name=./iotest1 --direct=1 --rwmixread=0 --rw=write --bs=4K --numjobs=1 --thread --iodepth=128 --runtime=300 --group_reporting --size=5G --verify=md5 --randrepeat=0 --norandommap --refill_buffers --filename=\\<mount point dns>\myshare\testfio1大きなデータブロックを使用して I/O 読み取り/書き込み操作を実行します。小さなデータブロックはより多くのネットワークリソースを消費します。データブロックサイズを変更できない場合は、BufferedOutputStream クラスを構築して、指定されたバッファーサイズでデータを書き込みます。
Windows Server の SMB クライアントでの I/O 操作が遅延する原因
原因:
デフォルトでは、Windows SMB クライアントで
large mtuオプションが無効になっています。これにより、これらのクライアントの I/O パフォーマンスが制限されます。解決策:
レジストリを変更して
large mtuオプションを有効にします。レジストリキーは次のパスにあります:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parametersこのパスで、
DWORDデータ型のキーを作成し、DisableLargeMtu という名前を付けます。キーの値を0に設定します。変更を有効にするには、インスタンスを再起動します。
IIS から NAS へのアクセスパフォーマンスを向上させる方法
原因:
Internet Information Services (IIS) が NAS ファイルシステムの共有ディレクトリ内のファイルにアクセスすると、IIS バックエンドが共有ディレクトリに複数回アクセスする可能性があります。NAS ファイルシステムへのアクセスには、ローカルファイルシステムへのアクセスとは異なり、少なくとも 1 回のネットワーク対話が必要です。各アクセスリクエストにはそれほど時間はかかりませんが、複数のアクセスリクエストが送信されると、クライアントの応答に時間がかかることがあります。
解決策:
SMB リダイレクタコンポーネントを使用してパフォーマンスを最適化します。詳細については、「SMB2 Client Redirector Caches Explained」をご参照ください。
レジストリキーは次のパスにあります:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parameters。次の 3 つの設定項目の値を 600 以上に変更します:
FileInfoCacheLifetime
FileNotFoundCacheLifetime
DirectoryCacheLifetime
説明上記のレジストリ設定項目が存在しない場合は、次の手順を実行します:
ファイルシステムが SMB プロトコルを使用していることを確認します。
ご利用の Windows のバージョンが 3 つのレジストリ設定項目をサポートしているか確認します。Windows のバージョンがレジストリ設定項目をサポートしているにもかかわらず存在しない場合は、手動で作成する必要があります。詳細については、「ファイルサーバーのパフォーマンスチューニング」をご参照ください。
IIS がこれらのファイルに頻繁にアクセスする場合は、JS や CSS ファイルなどの Web 関連ファイルをローカルディスクに保存します。
IIS の読み取り/書き込みパフォーマンスがそれでもビジネス要件を満たせない場合は、チケットを起票してください。
ls コマンドを実行すると、ファイルシステムの応答が遅くなったり、応答がなくなったりするのはなぜですか?
症状
ファイルシステムのディレクトリを走査すると、ファイルシステムがスタッタリングしたり、応答しなくなったりします。これは、ls コマンド、
*または?ワイルドカード文字を含む操作、rm -rfコマンド、またはgetdentsシステムコールを実行したときに発生する可能性があります。原因
ディレクトリが変更されている場合。たとえば、ディレクトリ内のファイルが作成、削除、または名前変更されている場合です。これにより、頻繁なキャッシュ無効化が発生し、応答が遅くなります。
ディレクトリのメタデータが大きすぎてクライアントのキャッシュに収まらず、頻繁なキャッシュエビクションが発生し、応答が遅くなる場合。
解決策
ディレクトリ内のファイル数を制限します。1 つのディレクトリに格納するファイルは 10,000 未満にしてください。
ディレクトリを走査している間は、頻繁な変更を避けてください。
ディレクトリに 10,000 を超えるファイルが含まれており、頻繁に変更されない場合は、NFSv3 プロトコルを使用し、nordirplus パラメーターを指定してファイルシステムをマウントすることで、走査を高速化できます。この方法を実装する前に、その有効性を検証してください。詳細については、「マウントパラメーター」をご参照ください。
Linux カーネル 5.4 以降で NFS のシーケンシャル読み取りパフォーマンスを向上させる方法
NFS の read_ahead_kb パラメーターは、シーケンシャル読み取り操作中に Linux カーネルが事前に読み込む、つまりプリフェッチするデータのサイズをキロバイト (KB) 単位で定義します。
Linux カーネルバージョン 5.4.* より前では、read_ahead_kb パラメーターの値は NFS_MAX_READAHEAD と rsize (マウントオプションで指定されたクライアントの読み取りサイズ) の積でした。Linux カーネルバージョン 5.4.* 以降、read_ahead_kb パラメーターのデフォルトは 128 KB です。したがって、推奨されるマウントオプションを使用する場合は、read_ahead_kb パラメーターを 15 MB に増やす必要があります。
ファイルシステムをマウントした後、次のコマンドを実行して read_ahead_kb パラメーターの値をリセットします。コマンド内で、nas-mount-point をマウントされたファイルシステムのローカルパスに、read-ahead-kb を事前に読み込む、またはプリフェッチするデータのサイズ (KB) に置き換えてください。
device_number=$(stat -c '%d' nas-mount-point)
((major = ($device_number & 0xFFF00) >> 8))
((minor = ($device_number & 0xFF) | (($device_number >> 12) & 0xFFF00)))
sudo bash -c "echo read-ahead-kb > /sys/class/bdi/$major:$minor/read_ahead_kb"次のコマンドは、マウントされたファイルシステムのローカルパスとして /mnt を使用して、read_ahead_kb パラメーターの値を 15 MB に設定する例です。
device_number=$(stat -c '%d' /mnt)
((major = ($device_number & 0xFFF00) >> 8))
((minor = ($device_number & 0xFF) | (($device_number >> 12) & 0xFFF00)))
sudo bash -c "echo 15000 > /sys/class/bdi/$major:$minor/read_ahead_kb"SMB 共有への初回接続が遅い原因
原因:
SMB 共有への初回接続が遅いのは、多くの場合、Windows クライアントが設定されたプロバイダーの順序で不要または低速なネットワークプロバイダーを介して接続を試みたり、DNS 名前解決の遅延が原因です。
解決策:
警告レジストリの変更はリスクの高い操作です。この操作を実行する前に、システムスナップショットを作成するか、レジストリをバックアップしてください。
ステップ 1:ネットワークプロバイダーの順序の最適化
Win+R を押し、
regeditと入力してレジストリエディターを開きます。次のパスに移動します: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\NetworkProvider\Order
右側のペインで、ProviderOrder の値を見つけてダブルクリックします。
[値のデータ] テキストボックスで、
NfsnpとWebClientのエントリを見つけて削除します。他のプロバイダー間のカンマは必ず保持してください。[OK] をクリックして変更を保存します。
変更を有効にするには、クライアントの ECS インスタンスを再起動します。
ステップ 2:DNS 名前解決の遅延のトラブルシューティング
ステップ 1 を完了しても問題が解決しない場合は、DNS 名前解決の遅延が原因かどうかを確認します。
コマンドプロンプト (CMD) を開きます。
ping <マウントターゲットアドレス>を実行し、レイテンシを記録します。ping <マウントターゲットの IP アドレス>を実行し、レイテンシを記録します。結果の比較:IP アドレスへの ping のレイテンシがマウントターゲットアドレスへの ping よりも大幅に低い場合、DNS 名前解決が遅くなっています。ご利用の ECS インスタンスの DNS 設定を確認してください。