ストレージ オプションを選択するで説明したローカル SSD のパフォーマンス上限は、ローカル SSD インスタンスで特定の設定を使用した場合のものです。推奨のローカル SSD 設定でインスタンスを構成しているときに、仮想マシン(VM)インスタンスのパフォーマンスがこの上限に到達しない場合、Compute Engine チームが使用している設定を複製することで、パフォーマンスの実際の上限と公表されている上限を比較できます。
以下の手順では、apt
パッケージ マネージャーがインストールされた Linux オペレーティングシステムを使用していることを前提としています。
1 台のローカル SSD デバイスを接続した VM を作成する
VM が接続できるローカル SSD の数は、VM の作成に使用するマシンタイプによって異なります。詳細については、有効な数のローカル SSD を選択するをご覧ください。
ワークロードに応じて、デバイスごとに 4 基または 8 基の vCPU を備えるローカル SSD インスタンスを作成します。
たとえば、次のコマンドは、4 基の vCPU と 1 台のローカル SSD を備えた C3 VM を作成します。
gcloud compute instances create c3-ssd-test-instance \ --machine-type "c3-standard-4-lssd"
第 2 世代以前のマシンタイプでは、
--local-ssd
フラグを使用して VM に接続するローカル SSD の数を指定します。次のコマンドは、8 個の vCPU と 1 個のローカル SSD を備え、NVMe ディスク インターフェースを使用する N2 VM を作成します。gcloud compute instances create ssd-test-instance \ --machine-type "n2-standard-8" \ --local-ssd interface=nvme
VM で次のスクリプトを実行します。このスクリプトは、パフォーマンスのセクションで説明した SSD パフォーマンスの数値を達成するために必要な設定を複製します。ここで、
--bs
パラメータはブロックサイズを定義します。ブロックサイズは、異なるタイプの読み取り / 書き込みオペレーションの結果に影響を与えます。# install tools sudo apt-get -y update sudo apt-get install -y fio util-linux # discard Local SSD sectors sudo blkdiscard /dev/disk/by-id/google-local-nvme-ssd-0 # full write pass - measures write bandwidth with 1M blocksize sudo fio --name=writefile \ --filename=/dev/disk/by-id/google-local-nvme-ssd-0 --bs=1M --nrfiles=1 \ --direct=1 --sync=0 --randrepeat=0 --rw=write --end_fsync=1 \ --iodepth=128 --ioengine=libaio # rand read - measures max read IOPS with 4k blocks sudo fio --time_based --name=readbenchmark --runtime=30 --ioengine=libaio \ --filename=/dev/disk/by-id/google-local-nvme-ssd-0 --randrepeat=0 \ --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \ --numjobs=4 --rw=randread --blocksize=4k --group_reporting # rand write - measures max write IOPS with 4k blocks sudo fio --time_based --name=writebenchmark --runtime=30 --ioengine=libaio \ --filename=/dev/disk/by-id/google-local-nvme-ssd-0 --randrepeat=0 \ --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \ --numjobs=4 --rw=randwrite --blocksize=4k --group_reporting
最大数のローカル SSD を接続した VM を作成する
1 つのインスタンスに 24 台以上のローカル SSD デバイスを接続する場合は、32 基以上の vCPU を備えたマシンタイプを使用します。
次のコマンドは、NVMe インターフェースを使用して最大許容数の ローカル SSD ディスクを接続した VM を作成します。
ローカル SSD を VM に接続する
gcloud compute instances create ssd-test-instance \ --machine-type "n1-standard-32" \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme \ --local-ssd interface=nvme
-lssd マシンタイプを使用する
新しいマシンシリーズでは、事前定義された数のローカル SSD ディスクを備えた
-lssd
マシンタイプが提供されます。たとえば、32 台のローカル SSD(容量は 12 TiB)を備えた VM のベンチマークを行うには、次のコマンドを使用します。gcloud compute instances create ssd-test-instance \ --machine-type "c3-standard-176-lssd"
mdadm
ツールをインストールします。mdadm
のインストール プロセスには、スクリプトを停止するユーザー プロンプトが含まれているため、このプロセスは手動で実行してください。Debian と Ubuntu
sudo apt update && sudo apt install mdadm --no-install-recommends
CentOS と RHEL
sudo yum install mdadm -y
SLES と openSUSE
sudo zypper install -y mdadm
find
コマンドを使用して、一緒にマウントするすべてのローカル SSD を特定します。find /dev/ | grep google-local-nvme-ssd
出力は次のようになります。
/dev/disk/by-id/google-local-nvme-ssd-23 /dev/disk/by-id/google-local-nvme-ssd-22 /dev/disk/by-id/google-local-nvme-ssd-21 /dev/disk/by-id/google-local-nvme-ssd-20 /dev/disk/by-id/google-local-nvme-ssd-19 /dev/disk/by-id/google-local-nvme-ssd-18 /dev/disk/by-id/google-local-nvme-ssd-17 /dev/disk/by-id/google-local-nvme-ssd-16 /dev/disk/by-id/google-local-nvme-ssd-15 /dev/disk/by-id/google-local-nvme-ssd-14 /dev/disk/by-id/google-local-nvme-ssd-13 /dev/disk/by-id/google-local-nvme-ssd-12 /dev/disk/by-id/google-local-nvme-ssd-11 /dev/disk/by-id/google-local-nvme-ssd-10 /dev/disk/by-id/google-local-nvme-ssd-9 /dev/disk/by-id/google-local-nvme-ssd-8 /dev/disk/by-id/google-local-nvme-ssd-7 /dev/disk/by-id/google-local-nvme-ssd-6 /dev/disk/by-id/google-local-nvme-ssd-5 /dev/disk/by-id/google-local-nvme-ssd-4 /dev/disk/by-id/google-local-nvme-ssd-3 /dev/disk/by-id/google-local-nvme-ssd-2 /dev/disk/by-id/google-local-nvme-ssd-1 /dev/disk/by-id/google-local-nvme-ssd-0
find
は順序を保証するものではありません。出力行の数が予想される SSD パーティションの数と一致している限り、デバイスが異なる順序で表示されていても問題ありません。SCSI デバイスを使用している場合は、次の
find
コマンドを使用します。find /dev/ | grep google-local-ssd
NVMe デバイスはすべて
google-local-nvme-ssd-#
の形式、SCSI デバイスはすべてgoogle-local-ssd-#
の形式にする必要があります。mdadm
ツールを使用して、複数のローカル SSD デバイスを/dev/md0
という名前の 1 つの配列に結合します。次の例では、NVMe インターフェースを使用する 24 台のローカル SSD デバイスを結合します。SCSI を使用するローカル SSD デバイスについては、手順 3 でfind
コマンドから返されたデバイス名を使用します。sudo mdadm --create /dev/md0 --level=0 --raid-devices=24 \ /dev/disk/by-id/google-local-nvme-ssd-0 \ /dev/disk/by-id/google-local-nvme-ssd-1 \ /dev/disk/by-id/google-local-nvme-ssd-2 \ /dev/disk/by-id/google-local-nvme-ssd-3 \ /dev/disk/by-id/google-local-nvme-ssd-4 \ /dev/disk/by-id/google-local-nvme-ssd-5 \ /dev/disk/by-id/google-local-nvme-ssd-6 \ /dev/disk/by-id/google-local-nvme-ssd-7 \ /dev/disk/by-id/google-local-nvme-ssd-8 \ /dev/disk/by-id/google-local-nvme-ssd-9 \ /dev/disk/by-id/google-local-nvme-ssd-10 \ /dev/disk/by-id/google-local-nvme-ssd-11 \ /dev/disk/by-id/google-local-nvme-ssd-12 \ /dev/disk/by-id/google-local-nvme-ssd-13 \ /dev/disk/by-id/google-local-nvme-ssd-14 \ /dev/disk/by-id/google-local-nvme-ssd-15 \ /dev/disk/by-id/google-local-nvme-ssd-16 \ /dev/disk/by-id/google-local-nvme-ssd-17 \ /dev/disk/by-id/google-local-nvme-ssd-18 \ /dev/disk/by-id/google-local-nvme-ssd-19 \ /dev/disk/by-id/google-local-nvme-ssd-20 \ /dev/disk/by-id/google-local-nvme-ssd-21 \ /dev/disk/by-id/google-local-nvme-ssd-22 \ /dev/disk/by-id/google-local-nvme-ssd-23
レスポンスは次の例のようになります。
mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
配列の詳細は
mdadm --detail
で確認できます。--prefer=by-id
フラグを追加すると、/dev/disk/by-id
パスを使用するデバイスが一覧表示されます。sudo mdadm --detail --prefer=by-id /dev/md0
出力は、配列内のデバイスごとに次のように表示されます。
... Number Major Minor RaidDevice State 0 259 0 0 active sync /dev/disk/by-id/google-local-nvme-ssd-0 ...
VM で次のスクリプトを実行します。このスクリプトは、パフォーマンスのセクションで説明した SSD パフォーマンスの数値を達成するために必要な設定を複製します。ここで、
--bs
パラメータはブロックサイズを定義します。さまざまなタイプの読み取りオペレーションと書き込みオペレーションの結果に影響を与えます。# install tools sudo apt-get -y update sudo apt-get install -y fio util-linux # full write pass - measures write bandwidth with 1M blocksize sudo fio --name=writefile \ --filename=/dev/md0 --bs=1M --nrfiles=1 \ --direct=1 --sync=0 --randrepeat=0 --rw=write --end_fsync=1 \ --iodepth=128 --ioengine=libaio # rand read - measures max read IOPS with 4k blocks sudo fio --time_based --name=benchmark --runtime=30 \ --filename=/dev/md0 --ioengine=libaio --randrepeat=0 \ --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \ --numjobs=32 --rw=randread --blocksize=4k --group_reporting --norandommap # rand write - measures max write IOPS with 4k blocks sudo fio --time_based --name=benchmark --runtime=30 \ --filename=/dev/md0 --ioengine=libaio --randrepeat=0 \ --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \ --numjobs=32 --rw=randwrite --blocksize=4k --group_reporting --norandommap
Storage Optimized VM のベンチマーク
ストレージ最適化 VM(Z3 ファミリーなど)は、デバイス パーティションに対して直接ベンチマークする必要があります。パーティション名は
lsblk
で取得できます。lsblk -o name,size -lpn | grep 2.9T | awk '{print $1}'
出力は次のようになります。
/dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1 /dev/nvme4n1 /dev/nvme5n1 /dev/nvme6n1 /dev/nvme7n1 /dev/nvme8n1 /dev/nvme9n1 /dev/nvme10n1 /dev/nvme11n1 /dev/nvme12n1
コロンで区切ってローカル SSD パーティションに対してベンチマークを直接実行します。
# install benchmarking tools sudo apt-get -y update sudo apt-get install -y fio util-linux # Full Write Pass. # SOVM achieves max read performance on previously written/discarded ranges. sudo fio --readwrite=write --blocksize=1m --iodepth=4 --ioengine=libaio \ --direct=1 --group_reporting \ --name=job1 --filename=/dev/nvme1n1 --name=job2 --filename=/dev/nvme2n1 \ --name=job3 --filename=/dev/nvme3n1 --name=job4 --filename=/dev/nvme4n1 \ --name=job5 --filename=/dev/nvme5n1 --name=job6 --filename=/dev/nvme6n1 \ --name=job7 --filename=/dev/nvme7n1 --name=job8 --filename=/dev/nvme8n1 \ --name=job9 --filename=/dev/nvme9n1 --name=job10 --filename=/dev/nvme10n1 \ --name=job11 --filename=/dev/nvme11n1 --name=job12 --filename=/dev/nvme12n1 # rand read - measures max read IOPS with 4k blocks sudo fio --readwrite=randread --blocksize=4k --iodepth=128 \ --numjobs=4 --direct=1 --runtime=30 --group_reporting --ioengine=libaio \ --name=job1 --filename=/dev/nvme1n1 --name=job2 --filename=/dev/nvme2n1 \ --name=job3 --filename=/dev/nvme3n1 --name=job4 --filename=/dev/nvme4n1 \ --name=job5 --filename=/dev/nvme5n1 --name=job6 --filename=/dev/nvme6n1 \ --name=job7 --filename=/dev/nvme7n1 --name=job8 --filename=/dev/nvme8n1 \ --name=job9 --filename=/dev/nvme9n1 --name=job10 --filename=/dev/nvme10n1 \ --name=job11 --filename=/dev/nvme11n1 --name=job12 --filename=/dev/nvme12n1 # rand write - measures max write IOPS with 4k blocks sudo fio --readwrite=randwrite --blocksize=4k --iodepth=128 \ --numjobs=4 --direct=1 --runtime=30 --group_reporting --ioengine=libaio \ --name=job1 --filename=/dev/nvme1n1 --name=job2 --filename=/dev/nvme2n1 \ --name=job3 --filename=/dev/nvme3n1 --name=job4 --filename=/dev/nvme4n1 \ --name=job5 --filename=/dev/nvme5n1 --name=job6 --filename=/dev/nvme6n1 \ --name=job7 --filename=/dev/nvme7n1 --name=job8 --filename=/dev/nvme8n1 \ --name=job9 --filename=/dev/nvme9n1 --name=job10 --filename=/dev/nvme10n1 \ --name=job11 --filename=/dev/nvme11n1 --name=job12 --filename=/dev/nvme12n1
次のステップ
- ローカル SSD の料金について学習する。