このページでは、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 --serverfio 実行をオーケストレートするクライアント 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 EOLfio クライアント 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}