このトピックでは、File Storage NAS (NAS) ファイルシステムのパフォーマンスに関するよくある質問 (FAQ) に対する回答を提供します。 Server Message Block (SMB) およびNetwork File System (NFS) プロトコルがサポートされています。
ファイルシステムのパフォーマンスとファイルシステムの記憶容量の関係は何ですか?
汎用 NAS ファイルシステム
ファイルシステムの読み書き性能 (最大スループット) は、ファイルシステムの記憶容量に線形に比例する。 より高い容量は、より高いスループットを示す。 詳細については、「汎用 NAS ファイルシステム」をご参照ください。
Extreme NAS ファイルシステム
ファイルシステムの読み書き性能は、記憶容量が増加するにつれて段階的に増加する。 詳細については、「Extreme NASファイルシステム」をご参照ください。
IOPSとは何ですか? IOPSとスループット、読み取りおよび書き込みブロックサイズ、およびレイテンシの関係を教えてください
IOPSは、1秒あたりの入出力操作の数です。
次の式は、IOPSと読み書きブロックのサイズ、スループット、読み書き回数、レイテンシの関係を示しています。
スループット=IOPS × 読み書きブロックサイズ。 IOPS=読み取りと書き込みの数 /全体のレイテンシ
たとえば、Capacity NASファイルシステムの書き込みレイテンシが、1 MiBあたり約100 ms、8 KiBあたり15 ms、4 KiBあたり10 msの場合、最大128件の同時リクエストをファイルシステムに送信できます。 1秒あたり1 MiBのデータをファイルシステムに書き込む場合は、次の表に示すソリューションを使用できます。
いいえ | 読み書きブロックサイズ | 同時実行 | 書き込み数 | 全体的なレイテンシ | IOPS | スループット | 説明 |
ソリューション 1 | 4 KiB | 1 | 250 | 10 ms × 250 = 2.5s | 250/2.5s = 100 | 4 KiB × 100 = 400 KiB/s | 読み書きブロックサイズが小さく、同時実行性が低いため、スループットが低くなり、レイテンシが長くなります。 この場合、スループットは1 MiB/sに達しません。 |
ソリューション 2 | 1 MiB | 1 | 1 | 100 ms | 1/0.1s = 10 | 1 MiB × 10 = 10 MiB/s | ソリューション1と比較して、ソリューション2の読み取りおよび書き込みブロックサイズが増加し、スループットとレイテンシのパフォーマンスが向上します。 スループットは1 MiB/sに達する可能性があります。 しかしながら、全体的なレイテンシは高い。 |
ソリューション 3 | 4 KiB | 125 | 250 | 10 ms × (250/125) = 20 ms | 250/0.02s = 12,500 | 4 KiB/s × 12,500 ≒ 49 MiB/s | ソリューション1と比較して、ソリューション3の同時実行性が向上し、スループットとレイテンシーのパフォーマンスが向上します。 スループットは1 MiB/sに達する可能性があります。 全体的なレイテンシは低いですが、IOPSはファイルシステムの上限に達します。 |
ソリューション 4 | 8 KiB | 125 | 125 | 15 ms × (125/125) = 15 ms | 125/0.015 ≒ 8,333 | 8 KiB/s × 8,333 ≒ 65 MiB/s | ソリューション1と比較して、ソリューション4の読み取りおよび書き込みブロックのサイズと同時実行性が増加し、スループットとレイテンシのパフォーマンスが向上します。 スループットは1 MiB/sに達する可能性があります。 全体のレイテンシは4つのソリューションの中で最も低く、IOPSは低いです。 |
リクエストの読み取りおよび書き込みスループットがしきい値を超えるとどうなりますか?
ユーザーまたはアプリケーションから送信されたリクエストの読み取りおよび書き込みスループットがしきい値を超えると、NASはリクエストを抑制します。 この場合、レイテンシが増加する。
汎用NASファイルシステムの場合、truncateコマンドを実行してスループットのしきい値を上げることができます。 詳細については、「汎用NASファイルシステムの読み書きスループットのしきい値を上げるにはどうすればよいですか?」をご参照ください。
Extreme NASファイルシステムの場合、ファイルシステムをスケールアップしてスループットのしきい値を上げることができます。 詳細については、「Extreme NAS ファイルシステムのスケールアップ」をご参照ください。
汎用NASファイルシステムおよびExtreme NASファイルシステムのスループットしきい値の詳細については、「汎用NASファイルシステムのパフォーマンスメトリクス」および「Extreme NASファイルシステムのパフォーマンスメトリクス」をご参照ください。
汎用NASファイルシステムの読み書きスループットのしきい値を上げるにはどうすればよいですか?
汎用NASファイルシステムの読み書きスループットは、ファイルシステムのストレージ容量とともに線形に増加します。 読み取りおよび書き込みのスループットとファイルシステムの容量使用量の関係の詳細については、「汎用NASファイルシステム」をご参照ください。
ホールファイルをファイルシステムに書き込むか、truncateコマンドを実行してファイルシステム上にファイルを生成することで、ファイルシステムの容量を増やすことができます。 これにより、ファイルシステムの読み書きスループットが向上する。 NASファイルシステムでホールファイルまたは生成されたファイルが占有しているスペースに対して課金されます。 詳細については、「汎用 NAS ファイルシステムの課金」をご参照ください。
たとえば、1 TiBのホールファイルをCapacity NASファイルシステムに書き込むと、ファイルシステムの読み書きスループットを150メガバイト/秒増やすことができます。 1 TiBのホールファイルをPerformance NASファイルシステムに書き込むと、ファイルシステムの読み書きスループットを600メガバイト/秒増やすことができます。
Linux
Linuxを使用している場合は、truncateコマンドを実行してファイルシステム上にファイルを生成し、ファイルシステムの読み取りおよび書き込みスループットを向上させることができます。
sudo truncate --size=1TB /mnt/sparse_file.txt
上記のコマンドでは、/mntは計算ノード上のファイルシステムのマウントパスです。
Windows
Windowsを使用している場合、ホールファイルをファイルシステムに書き込み、ファイルシステムの読み取りおよび書き込みスループットを向上させることができます。
fsutil file createnew Z:\sparse_file.txt 1099511627776
上記のコマンドでは、Z:\ は計算ノード上のファイルシステムのマウントパスです。
Linux上のNASへのアクセスのスループットを上げるにはどうすればよいですか?
解決策1: nconnectパラメーターを設定して、NASにアクセスする単一のECSインスタンスのスループットを向上させる
nconnect
パラメーターは、Linux ECSインスタンスにNFSファイルシステムをマウントするためのオプションです。 このパラメーターを使用して、NFSクライアントとECSインスタンス間でより多くのTCP接続を確立し、スループットを向上させることができます。 このテストでは、nconnect
パラメーターを使用すると、NASにアクセスする単一のECSインスタンスのスループットが3〜6倍増加し、3ギガバイト/秒に達することが示されています。シナリオ
1つのECSインスタンスで複数の同時読み取りと書き込みが実行されます (16を超える同時読み取りと書き込み) 。
前提条件
Linuxカーネルのバージョンは5.3以降です。
手順
nconnect
パラメーターをmount
コマンドに追加します。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パラメーターは、NASにアクセスするための単一のECSインスタンスのスループットを増加させますが、NASファイルシステムのスループットしきい値は増加しません。 単一の同時実行、小さなデータブロック、およびレイテンシに敏感なサービスに対してnconnectパラメーターを有効にすると、レイテンシが増加します。 このようなサービスでは、nconnectパラメーターを有効にしないことを推奨します。
解決策2: sunrpc.tcp_slot_table_entriesを変更して、NASにアクセスするための単一のECSインスタンスのスループットを向上させる
Linuxカーネルの
sunrpc
は、単一のNFSリンク内の通信スロットの数を決定します。 異なるLinuxバージョンは異なるsunrpc構成を採用しています。 スロット構成が高い場合、レイテンシが増加し得る。 スロット構成が低い場合、スループットが不十分になる可能性があります。 高いスループットが必要な場合は、スロット数を128に設定することを推奨します。 低レイテンシが必要な場合は、スロット数を16以下に設定することを推奨します。説明sunrpc.tcp_slot_table_entries
パラメーターを設定した場合の効果は、nconnect
パラメーターよりもはるかに悪いです。 Linuxカーネル5.3以降のnconnect
パラメーターを再設定することを推奨します。シナリオ
1つのECSインスタンスで複数の同時読み書きが実行されます。 Linuxカーネルのバージョンは3.10より前です。
手順
詳細については、「NFSクライアントからの同時NFSリクエストの最大数を変更するにはどうすればよいですか?」をご参照ください。
NGINXがログをファイルシステムに書き込むのに長時間を要するのはなぜですか?
背景情報
次の2つのコマンドを使用してNGINXログを指定できます。log_formatコマンドはログ形式を指定します。 access_logコマンドは、ログのストレージパス、フォーマット名、およびキャッシュサイズを指定します。
発行
NGINXは、ファイルシステムへのログの書き込みに時間がかかり、ファイルシステムのパフォーマンスが低下します。
原因
access_logコマンドで指定したパスに変数が含まれています。 NGINXがログをファイルシステムに書き込もうとするたびに、宛先ファイルが開かれます。 ログが書き込まれた後、ファイルは閉じられます。 データの可視性を確保するために、ファイルが閉じられたときにNASはデータを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ファイルシステムにアクセスできません。
ProviderOrderキーの値に
Nfsnp
が含まれているため、ファイルシステム内のファイルを開くことができません。
解決策
SMBファイルシステムに初めてアクセスするときは、マウントターゲットのドメイン名をpingして、コンピュートノードとファイルシステム間のネットワーク接続を確認し、レイテンシが許容範囲内であるかどうかを確認することをお勧めします。
pingコマンドが失敗した場合は、ネットワーク設定を確認し、ネットワークが接続されていることを確認します。
レイテンシが高い場合は、pingコマンドを実行してマウントターゲットのIPアドレスをpingします。 IPアドレスへのアクセスの待ち時間がドメイン名へのアクセスの待ち時間よりも短い場合は、ドメインネームシステム (DNS) サーバーの設定を確認します。
NFSクライアントがインストールされているが使用されていない場合は、NFSクライアントを削除することを推奨します。
WebClientサービスを無効にします。
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\NetworkProvider\Order\ProviderOrderのパスでレジストリキーを確認します。 ProviderOrderキーの値に
Nfsnp
が含まれている場合は、Nfsnp
を削除し、ファイルシステムがマウントされているECSインスタンスを再起動します。
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
大きなデータブロックに基づいて読み取りおよび書き込み操作を実行することを推奨します。 小さなデータブロックは、より多くのネットワークリソースを消費する。 データブロックサイズを変更できない場合は、BufferedOutputStreamクラスを構築して、指定したバッファサイズで指定した出力ストリームにデータを書き込むことができます。
Windows SMBクライアントでのI/O操作が遅れるのはなぜですか?
原因
Windows SMBクライアントでは、デフォルトで
large mtu
オプションは無効になっています。 これにより、Windows SMBクライアントのI/Oパフォーマンスが制限されます。解決策
Windowsレジストリを変更することで、
large mtu
オプションを有効にできます。 レジストリキーは、HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanmanWorkstation\Parametersのパスに格納されます。DWORD
データ型のキーを作成し、DisableLargeMtuという名前を付けます。 キーの値を0
に設定します。 ファイルシステムがマウントされているECSインスタンスを再起動して、キーを検証します。
IISからNASへのアクセスのパフォーマンスを向上させるにはどうすればよいですか?
原因
インターネットインフォメーションサービス (IIS) がNASファイルシステムの共有ディレクトリ内のファイルにアクセスすると、IISのバックエンドが共有ディレクトリに複数回アクセスすることがあります。 NASファイルシステムにアクセスするときは、少なくとも1回はネットワークとやり取りする必要があります。 これは、ローカルディスクにアクセスするシナリオとは異なります。 各アクセス要求は長い時間を要しないが、複数のアクセス要求が送信される場合、クライアントは応答するのに長い時間を要することがある。
解決策
SMBリダイレクタコンポーネントを使用して、SMBファイルシステムのパフォーマンスを最適化します。 詳細については、「SMB2クライアントリダイレクタキャッシュの説明」をご参照ください。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parametersのパスのレジストリキーを変更します。 次の3つのキーの値を600以上に変更します。
FileInfoCacheLifetime
FileNotFoundCacheLifetime
DirectoryCacheLifetime
説明上記のキーが存在しない場合は、次の手順を実行します。
ファイルシステムがSMBプロトコルを使用していることを確認します。
Windowsバージョンがキーをサポートしているかどうかを確認します。 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単位) を定義します。
5.4.*
より前のLinuxカーネルバージョンの場合、read_ahead_kb
パラメーターの値は、NFS_MAX_READAHEAD
とrsize
(mountオプションで指定されたクライアントが読み取るデータのサイズ) の乗算によって決定されます。 Linuxカーネルバージョン5.4.*
では、NFSクライアントは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"