選擇儲存空間選項一節中提供的本機 SSD 效能限制,是使用本機 SSD 執行個體的特定設定時達成的。如果虛擬機器 (VM) 執行個體無法達到這些效能上限,且執行個體已採用建議的本機 SSD 設定,您可以複製 Compute Engine 團隊使用的設定,藉此將您的效能上限與本文所列的上限進行比較。
這些操作說明假設您使用 Linux 作業系統,並已安裝 apt
套件管理工具。
建立具有一個本機 SSD 裝置的 VM
VM 可擁有的本機 SSD 數量取決於您用來建立 VM 的機器類型。詳情請參閱「選擇有效的本機 SSD 數量」。
為每個裝置建立含有四或八個 vCPU (視工作負載而定) 的本機 SSD 執行個體。
舉例來說,下列指令會建立具有 4 個 vCPU 和 1 個本機 SSD 的 C3 VM。
gcloud compute instances create c3-ssd-test-instance \ --machine-type "c3-standard-4-lssd"
如果是第二代和更早的機器類型,請使用
--local-ssd
旗標,指定要附加至 VM 的本機 SSD 數量。下列指令會建立含有 8 個 vCPU 和 1 個本機 SSD 的 N2 VM,並使用 NVMe 磁碟介面: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
如要將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 機器類型
較新的機器系列提供
-lssd
機器類型,這些類型會隨附預先決定的本機 SSD 磁碟數量。舉例來說,如要對具有 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
的單一陣列。以下範例會合併使用 NVMe 介面的二十四個本機 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=48 --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=48 --rw=randwrite --blocksize=4k --group_reporting --norandommap
儲存空間最佳化 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 的定價。