インスタンスのパフォーマンスの最適化とテストを行う

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

このページでは、Filestore に関して予想される平均パフォーマンスと推奨パフォーマンスの設定について説明します。また、Filestore インスタンスのパフォーマンスをテストする方法も説明します。

予想パフォーマンス

Filestore の各サービス階層は、さまざまなレベルのパフォーマンスを実現します。キャッシュの使用、クライアント VM の数、クライアント VM のマシンタイプ、テストされたワークロードなど、さまざまな要因により、特定のインスタンスのパフォーマンスは予想される数とは異なる可能性があります。

次の表は、サービス階層と構成された容量に基づく Filestore インスタンスの予想されるパフォーマンスを示しています。

パフォーマンス 容量(TiB 読み取り / 書き込み IOPS 読み取り / 書き込みスループット(MiB/s)
BASIC_HDD 1–10 600/1,000 100/100
BASIC_HDD 10–63.9 1,000/5,000 180/120
BASIC_SSD 2.5–63.9 60,000/25,000 1,200/350
HIGH_SCALE_SSD 10 92,000/26,000 2,600/880
HIGH_SCALE_SSD 100 920,000/260,000 26,000/8,800
ENTERPRISE 1 12,000/4,000 120/100
ENTERPRISE 10 120,000/40,000 1,200/1,000

上記の表は、高スケールとエンタープライズの両方で、最大容量と最小容量で予想されるパフォーマンスを示しています。この上限と下限の間で、パフォーマンスは容量のスケーリングに応じて直線的にスケーリングします。たとえば、エンタープライズ インスタンスの容量が 1 TiB から 2 TiB に倍増すると、インスタンスの予想されるパフォーマンスは 12,000/4,000 読み取り / 書き込み IOPS から 24,000/8,000 読み取り / 書き込み IOPS に倍増します。

単一クライアントおよび少数のクライアントでは、最大の NFS パフォーマンスを達成するために、nconnect マウント オプションで TCP 接続の数を増やす必要があります。高スケール階層の場合は最大 7 個の接続を指定し、エンタープライズ階層の場合は最大 2 個の接続を指定することをおすすめします。一般に、ファイル共有の容量が大きく、接続しているクライアント VM が少ないほど、nconnect で追加の接続を指定することでパフォーマンスが向上します。

推奨されるクライアント マシンタイプ

16 Gbps の下り(外向き)帯域幅を提供する Compute Engine マシンタイプn2-standard-8 など)を使用することをおすすめします。この下り(外向き)帯域幅により、クライアントはキャッシュが頻繁に行われるワークロードに対しておよそ 16 Gbps の読み取り帯域幅を確保できます。詳細については、ネットワーク帯域幅をご覧ください。

Linux クライアントのマウント オプション

次の NFS マウント オプションを使用することをおすすめします。特に hard マウントと async を使用し、rsize オプションと wsize オプションを 1 MiB に設定して、Linux クライアントの VM インスタンスでの最適なパフォーマンスを実現できます。NFS マウント オプションの詳細については、nfs をご覧ください。

デフォルト オプション 説明
hard NFS クライアントは、NFS リクエストを無期限に再試行します。
timeo=600 NFS クライアントは、NFS リクエストを再試行するまで 600 デシ秒(60 秒)待ちます。
retrans=3 NFS クライアントは、NFS リクエストを 3 回試行してから、さらに復旧処理を行います。
rsize=1048576 NFS クライアントは、READ リクエストごとに最大 1,048,576 バイト(1 MiB)を NFS サーバーから受け取ることができます。
wsize=1048576 NFS クライアントは、WRITE リクエストごとに最大 1,048,576 バイト(1 MiB)を NFS サーバーに送信することができます。
resvport NFS クライアントは、このマウント ポイントの NFS サーバーと通信するときに特権ソースポートを使用します。
async NFS クライアントは、特定の条件が満たされるまで、NFS サーバーへのアプリケーション書き込みの送信を遅らせます。
注意: sync オプションを使用すると、パフォーマンスが大幅に低下します。

単一および複数のクライアント VM のパフォーマンス

Filestore のスケーラブルなサービス階層は、単一のクライアント VM ではなく、複数のクライアント VM に対して最適化されたパフォーマンスです。

エンタープライズ階層のインスタンスと高スケール階層のインスタンスでは、フルパフォーマンスを確保するために、少なくとも 4 つのクライアント VM が必要です。これにより、基盤となる Filestore クラスタ内のすべての VM が最大限活用されます。

コンテキストを考慮して、最小のスケーラブルな Filestore クラスタには 4 つの VM があります。nconnect マウント オプションを使用して指定されたクライアントごとの NFS 接続数に関係なく、各クライアント VM は 1 つの Filestore クラスタ VM と通信します。単一のクライアント VM を使用している場合、読み取り / 書き込みオペレーションは単一の Filestore クラスタ VM からのみ行われます。

Google Cloud リソース全体でパフォーマンスを向上させる

gsutil を使用して Cloud Storage から Filestore インスタンスにデータをコピーするなど、複数の Google Cloud リソース間での操作が遅くなることがあります。パフォーマンスの問題を軽減するには、以下を試してください。

  • Cloud Storage バケット、クライアント VM、Filestore インスタンスがすべて同じリージョンにあることを確認します。

    デュアルリージョンは、Cloud Storage に格納されるデータに対して最高のパフォーマンスを提供します。このオプションを使用する場合は、デュアルリージョンを構成する単一リージョンのいずれかに、他のリソースが存在することを確認してください。たとえば、Cloud Storage データが us-central1,us-west1 にある場合、クライアント VM と Filestore インスタンスが us-central1 に存在することを確認します。

  • 比較のため、PD に接続された VM のパフォーマンスと Filestore インスタンスのパフォーマンスの比較をご覧ください。

    • PD に接続された VM は、Filestore インスタンスと比較してパフォーマンスが同等または低い場合に、Filestore に起因するパフォーマンスのボトルネックを示している可能性があります。Filestore 以外のリソースのベースライン パフォーマンスを向上させるには、次の手順を試してください。

      • gsutil -m オプションを適用します。このオプションを使用すると、cpmvrsync などのサポートされている操作を並行して実行できます。

      • 次の gsutil 構成を適用します。それぞれは、boto 構成ファイルで設定された変更可能な boto 構成値です。ユーザーはファイルを直接変更することも(推奨)、-o オプションを使用することもできます。

    • Filestore インスタンスのパフォーマンスが PD に接続された VM よりも大幅に遅い場合は、オペレーションを複数の VM に分散してみてください。

パフォーマンスのテスト

Linux を使用している場合は、fio ツールを使用して、基本階層インスタンスの読み取り / 書き込みスループットと IOPS のベンチマークを実施できます。 このセクションの例では、実行する必要が生じる可能性のある一般的なベンチマークを示しています。最大のパフォーマンスを実現するには、複数のクライアント VM インスタンスから fio を実行することが必要な場合があります。この方法でパフォーマンスのベンチマークを実施すると、エンタープライズ インスタンスと高スケールティアインスタンスで正確な結果が得られません。

次の例は、最大書き込みスループットのベンチマークを実施します。

fio --ioengine=libaio --filesize=32G --ramp_time=2s \
--runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \
--group_reporting --directory=/mnt/nfs  \
--name=write --blocksize=1m --iodepth=64 --readwrite=write

次の例は、最大書き込み IOPS のベンチマークを実施します。

fio --ioengine=libaio --filesize=32G --ramp_time=2s \
--runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \
--group_reporting --directory=/mnt/nfs  \
--name=randwrite --blocksize=4k --iodepth=256 --readwrite=randwrite

次の例は、最大読み取りスループットのベンチマークを実施します。

fio --ioengine=libaio --filesize=32G --ramp_time=2s \
--runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \
--group_reporting --directory=/mnt/nfs  \
--name=read --blocksize=1m --iodepth=64 --readwrite=read

次の例は、最大読み取り IOPS のベンチマークを実施します。

fio --ioengine=libaio --filesize=32G --ramp_time=2s \
--runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \
--group_reporting --directory=/mnt/nfs  \
--name=randread --blocksize=4k --iodepth=256 --readwrite=randread

次のステップ