このページでは、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 を使用します。
すべてのクライアント VM で fio サーバーを起動します。Fio はポート
8765
を使用して通信するため、このポートはファイアウォール ポリシーで開いている必要があります。fio --server
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
fio クライアント VM の IP アドレスまたは DNS 名を含む
hosts.list
ファイルを作成します。cat << EOL > /tmp/hosts.list <Client 1 IP/DNS> <Client 2 IP/DNS> ... <Client N IP/DNS> EOL
ジョブファイルを作成したクライアント 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
ジョブファイルを作成したクライアント 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
テストが完了したら、すべてのクライアント VM で fio サーバーを停止し、一時ディレクトリを削除します。
rm -rf ${TMP_DIR}