インスタンスのパフォーマンスをテストする

このページでは、Filestore インスタンスのパフォーマンス テストについて説明します。

概要

Linux を使用している場合は、Flexible IO Tester(fio)ツールを使用して、基本階層、リージョン階層、ゾーン階層、エンタープライズ階層のティア インスタンスの読み取りスループット、書き込みスループット、読み取り IOPS、書き込み IOPS のベンチマークを実施できます。

基本インスタンスのパフォーマンスをテストするには、単一のクライアント VM を使用します。スケールアウト サービスティアは複数のクライアント VM 向けにパフォーマンスが最適化されているため、通常、単一のクライアントでクラスタの最大 IOPS またはスループットを達成できないため、リージョン、ゾーン、エンタープライズ インスタンスをテストするために単一のクライアント VM を使用することはおすすめしません。

詳細については、単一および複数のクライアント VM のパフォーマンスをご覧ください。

始める前に

テストする Filestore ファイル共有をすべてのクライアント VM にマウントします。サービス ティアによっては、1 つまたは複数のクライアント VM になります。詳細な手順とマウント オプションについては、Compute Engine クライアントでのファイル共有のマウントをご覧ください。

NFS のパフォーマンスを向上させるには、nconnect マウント オプションを指定してください。特定のサービスティアの場合は、クライアントとサーバー間の接続数を次のように指定することをおすすめします。

階層 容量 接続の数
リージョン、ゾーン 1~9.75 TiB nconnect=2
リージョン、ゾーン 10~100 TiB nconnect=7
Enterprise - nconnect=2
高スケール SSD - nconnect=7

read_ahead_kb パラメータ値を調整することで、NFS 読み取りスループットを最適化できます。詳細については、read_ahead_kb パラメータを使用して NFS 読み取りスループットを最適化するをご覧ください。

単一のクライアント VM でパフォーマンスをテストする

次のシナリオを使用して、基本インスタンスでテストを実行します。コマンドはコマンドラインから直接実行できます。

  • 1 TiB 未満の基本インスタンスの最大書き込みスループット:

    fio --ioengine=libaio --filesize=4G --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
    
  • 最大読み取りスループット:

    fio --ioengine=libaio --filesize=32G --ramp_time=2s \
    --runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \
    --group_reporting --directory=/mnt/nfs --buffer_compress_percentage=50 \
    --name=read --blocksize=1m --iodepth=64 --readwrite=read
    
  • 最大書き込みスループット:

    fio --ioengine=libaio --filesize=32G --ramp_time=2s \
    --runtime=5m --numjobs=16 --direct=1 --verify=0 --randrepeat=0 \
    --group_reporting --directory=/mnt/nfs --buffer_compress_percentage=50 \
    --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 --buffer_compress_percentage=50 \
    --name=randread --blocksize=4k --iodepth=256 --readwrite=randread
    
  • 最大書き込み IOPS:

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

複数のクライアント VM でパフォーマンスをテストする

ゾーン、リージョン、エンタープライズ インスタンスで最大のパフォーマンスを実現するには、複数のクライアント VM を使用します。

1 ~ 9.75 TiB のインスタンスの場合は、1 TiB あたり 8 個のクライアント VM を使用することをおすすめします。10 ~ 100 TiB のインスタンスの場合は、10 TiB あたり 8 個のクライアント VM を使用します。

  1. すべてのクライアント VM で fio サーバーを起動します。Fio はポート 8765 を使用して通信するため、このポートはファイアウォール ポリシーで開いている必要があります。

    fio --server
    
  2. fio 実行をオーケストレートするクライアント VM を 1 つ選択します。そのクライアント VM に fio ジョブファイルを作成します。

    cat << EOL > /tmp/fio_job.conf
    [global]
    ioengine=libaio
    ramp_time=2s
    runtime=3m
    time_based
    direct=1
    verify=0
    randrepeat=0
    group_reporting
    buffer_compress_percentage=50
    directory=\${TMP_DIR}
    create_only=\${CREATE_ONLY}
    
    [read-throughput]
    blocksize=1048576
    numjobs=8
    readwrite=read
    filesize=100M
    
    [write-throughput]
    blocksize=1048576
    numjobs=8
    readwrite=write
    filesize=100M
    
    [read-iops]
    blocksize=4k
    iodepth=64
    readwrite=randread
    filesize=1GB
    
    [write-iops]
    blocksize=4k
    iodepth=64
    readwrite=randwrite
    filesize=1GB
    
    EOL
    
  3. fio クライアント VM の IP アドレスまたは DNS 名を含む hosts.list ファイルを作成します。

    cat << EOL > /tmp/hosts.list
    <Client 1 IP/DNS>
    <Client 2 IP/DNS>
    ...
    <Client N IP/DNS>
    EOL
    
  4. ジョブファイルを作成したクライアント VM の一時ディレクトリに、次のデータセットを作成します。

    export TMP_DIR=$(mktemp -d MOUNT_POINT_DIRECTORY/XXXXX)
    chmod 777 ${TMP_DIR}
    export CREATE_ONLY=1
    fio --client=/tmp/hosts.list \
    --section=read-throughput --section=read-iops /tmp/fio_job.conf
    
  5. ジョブファイルを作成したクライアント VM を使用してベンチマークを実行します。

    • 最大読み取りスループット
    export CREATE_ONLY=0
    fio --client=/tmp/hosts.list --section=read-throughput /tmp/fio_job.conf
    
    • 最大書き込みスループット
    export CREATE_ONLY=0
    fio --client=/tmp/hosts.list --section=write-throughput /tmp/fio_job.conf
    
    • 最大読み取り IOPS
    export CREATE_ONLY=0
    fio --client=/tmp/hosts.list --section=read-iops /tmp/fio_job.conf
    
    • 最大書き込み IOPS
    export CREATE_ONLY=0
    fio --client=/tmp/hosts.list --section=write-iops /tmp/fio_job.conf
    
  6. テストが完了したら、すべてのクライアント VM で fio サーバーを停止し、一時ディレクトリを削除します。

    rm -rf ${TMP_DIR}