「選擇儲存空間選項」一節提供的本機 SSD 效能限制,是透過在本機 SSD 執行個體上使用特定設定達成。如果虛擬機器 (VM) 執行個體難以達到這些效能限制,且您已使用建議的本機 SSD 設定設定執行個體,可以複製 Compute Engine 團隊使用的設定,將效能限制與公開的限制進行比較。
這些操作說明假設您使用的是 Linux 作業系統,且已安裝 apt 套件管理工具。
建立具備一個本機 SSD 磁碟的 VM
VM 可擁有的本機 SSD 磁碟數量,取決於您用來建立 VM 的機型。詳情請參閱「選擇有效的本機 SSD 磁碟數量」。
視工作負載而定,建立每個裝置有四或八個 vCPU 的本機 SSD 執行個體。
舉例來說,下列指令會建立具有四個 vCPU 和一個本機 SSD 磁碟的 C3 VM。
gcloud compute instances create c3-ssd-test-instance \ --machine-type "c3-standard-4-lssd"如果是第二代和更早的機型,請使用
--local-ssd旗標,指定要連接至 VM 的本機 SSD 磁碟數量。下列指令會建立 N2 VM,其中包含八個 vCPU 和一個使用 NVMe 磁碟介面的本機 SSD 磁碟: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 磁碟連接至執行個體,請使用 vCPU 數量為 32 個以上的機器類型。
下列指令會使用 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-recommendsCentOS 和 RHEL
sudo yum install mdadm -ySLES 和 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的單一陣列。以下範例會合併 24 個使用 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 定價。