すべてのプロダクト
Search
ドキュメントセンター

File Storage NAS:NASファイルシステムのパフォーマンスに関するFAQ

最終更新日:Dec 10, 2024

このトピックでは、File Storage NAS (NAS) ファイルシステムのパフォーマンスに関するよくある質問 (FAQ) に対する回答を提供します。 Server Message Block (SMB) およびNetwork File System (NFS) プロトコルがサポートされています。

ファイルシステムのパフォーマンスとファイルシステムの記憶容量の関係は何ですか?

  • 汎用 NAS ファイルシステム

    ファイルシステムの読み書き性能 (最大スループット) は、ファイルシステムの記憶容量に線形に比例する。 より高い容量は、より高いスループットを示す。 詳細については、「汎用 NAS ファイルシステム」をご参照ください。

  • Extreme NAS ファイルシステム

    ファイルシステムの読み書き性能は、記憶容量が増加するにつれて段階的に増加する。 詳細については、「Extreme NASファイルシステム」をご参照ください。

ファイルシステムのパフォーマンスとディレクトリサイズの関係は何ですか?

ファイルシステムのディレクトリをトラバースすると、次の条件で応答が遅くなることがあります。

  • ディレクトリは変更中です。 たとえば、ディレクトリ内のファイルが作成、削除、または名前変更されているとします。 これにより、キャッシュの無効化が頻繁に発生するため、応答が遅くなります。

  • ディレクトリのデータサイズが大きすぎます。 これにより、キャッシュの削除により応答が遅くなります。

解決策

  • ディレクトリに格納されるファイルの数を制限します。 1つのディレクトリに10,000未満のファイルを格納します。

  • ディレクトリをトラバースするときに、ディレクトリを頻繁に変更しないでください。

  • ディレクトリに10,000を超えるファイルが含まれており、ディレクトリを頻繁に変更する必要がない場合は、NFSv3プロトコルを使用してファイルシステムをマウントし、nordirplusオプションを指定してトラバーサル処理を高速化できます。

NASファイルシステムのパフォーマンスに対するマウントオプションの影響は何ですか?

マウントオプションは、NASファイルシステムのパフォーマンスに大きな影響を与えます。

  • rsizeおよびwsize:

    • 影響: 2つのマウントオプションは、クライアントとサーバー間のデータ交換のブロックサイズを定義します。 ブロックサイズを大きくすると、ネットワーク要求の数を減らすことができ、特に大きなファイルを扱う場合にスループットが向上します。

    • 推奨値: 1048576 (1 MB) 。 可能な限り最大値を使用することを推奨します。 より小さいブロックサイズは、より多くのネットワークオーバーヘッドをもたらし得、これは性能を低下させます。

  • hard:

    • 影響: このマウントオプションを有効にした後、ファイルストレージNASが使用できない場合、クライアントはファイルシステムが回復するまでリクエストを再試行し続けます。 これにより、データの整合性と一貫性が保証されます。

    • このマウントオプションを有効にすることを推奨します。 このマウントオプションはデータの損失を防ぐのに役立ちますが、アプリケーションが一時的にハングする可能性があります。 したがって、マウントオプションは、高可用性が必要なシナリオに適しています。

  • timeo:

    • 影響: このマウントオプションは、クライアントが再試行する前に応答を待つ時間を定義します。 タイムアウト期間を短すぎると、リクエストの再試行が頻繁に発生し、特にネットワークが不安定な場合にパフォーマンスが低下する可能性があります。

    • 推奨値: 600 (60秒) 。 この値は、ネットワークが回復するのに十分な時間を有することを保証し、それによって再試行の数を減らす。

  • retrans:

    • 影響: このマウントオプションは、NFSクライアントが失敗したリクエストを再試行する回数を定義します。 再試行の回数が多いと、リクエストの成功率が上がる可能性がありますが、待ち時間が発生します。

    • 推奨値: 2。 値は、パフォーマンスとデータの信頼性のバランスをとります。

  • noresvport:

    • 影響: このマウントオプションを有効にすると、新しいTCPポートが使用され、ネットワークが障害から回復したときにネットワークの継続性が確保されます。

    • このマウントオプションを有効にすることを推奨します。 マウントオプションは、ネットワーク接続の安定性を保証します。

重要
  • データの不整合を防ぐため、ソフトマウントオプションを指定しないことを推奨します。 ソフトマウントオプションを指定する場合は、潜在的なリスクを理解していることを確認してください。

  • デフォルトとは異なる他のマウントオプションは設定しないことを推奨します。 読み取りバッファサイズまたは書き込みバッファサイズを変更するか、属性キャッシュを無効にすると、パフォーマンスが低下する場合があります。

ECSインスタンスの帯域幅がNASファイルシステムのパフォーマンスをどのように制限しますか?

NASファイルシステムの最大スループットは、ECSインスタンスの内部帯域幅を超えることはできません。 内部帯域幅が低い場合、スループットは制限される。

リクエストの読み取りおよび書き込みスループットがしきい値を超えるとどうなりますか?

ユーザーまたはアプリケーションから送信されたリクエストの読み取りおよび書き込みスループットがしきい値を超えると、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が含まれているため、ファイルシステム内のファイルを開くことができません。

  • 解決策

    1. SMBファイルシステムに初めてアクセスするときは、マウントターゲットのドメイン名をpingして、コンピュートノードとファイルシステム間のネットワーク接続を確認し、レイテンシが許容範囲内であるかどうかを確認することをお勧めします。

      • pingコマンドが失敗した場合は、ネットワーク設定を確認し、ネットワークが接続されていることを確認します。

      • レイテンシが高い場合は、pingコマンドを実行してマウントターゲットのIPアドレスをpingします。 IPアドレスへのアクセスの待ち時間がドメイン名へのアクセスの待ち時間よりも短い場合は、ドメインネームシステム (DNS) サーバーの設定を確認します。

    2. NFSクライアントがインストールされているが使用されていない場合は、NFSクライアントを削除することを推奨します。

    3. WebClientサービスを無効にします。

    4. 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回はネットワークとやり取りする必要があります。 これは、ローカルディスクにアクセスするシナリオとは異なります。 各アクセス要求は長い時間を要しないが、複数のアクセス要求が送信される場合、クライアントは応答するのに長い時間を要することがある。

  • 解決策

    1. SMBリダイレクタコンポーネントを使用して、SMBファイルシステムのパフォーマンスを最適化します。 詳細については、「SMB2クライアントリダイレクタキャッシュの説明」をご参照ください。

      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanWorkstation\Parametersのパスのレジストリキーを変更します。 次の3つのキーの値を600以上に変更します。

      • FileInfoCacheLifetime

      • FileNotFoundCacheLifetime

      • DirectoryCacheLifetime

      説明

      上記のキーが存在しない場合は、次の手順を実行します。

      1. ファイルシステムがSMBプロトコルを使用していることを確認します。

      2. Windowsバージョンがキーをサポートしているかどうかを確認します。 Windowsバージョンがキーをサポートしているが、キーが存在しない場合は、キーを作成します。 詳細については、「ファイルサーバーのパフォーマンス調整」をご参照ください。

    2. 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_READAHEADrsize (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"