永久磁碟可提供磁碟類型表所述的效能,但虛擬機器必須產生足夠用量才能達到效能上限。根據效能需求將永久磁碟的磁碟區調整大小後,工作負載和作業系統可能需要經過微調。
以下各節說明會影響磁碟效能的 VM 和工作負載特性,並討論幾個可微調以提高效能的重要元素。部分建議,以及如何將其中幾種建議應用於特定類型的工作負載。
影響磁碟效能的因素
以下各節說明影響 VM 磁碟效能的因素。
寫入總處理量的網路輸出上限
VM 的網路輸出上限取決於 VM 的機器類型。
Compute Engine 會將資料儲存在永久磁碟中,並進行多個平行寫入作業,確保內建備援功能。此外,每項寫入要求都會造成一定程度的負擔,進而使用額外的寫入頻寬。
VM 執行個體可發出的寫入流量上限,是網路輸出上限除以頻寬乘數,後者會將複製和額外負荷納入考量。
如要查看網路傳出上限,請參閱機器類型表格中的「預設傳出頻寬 (Gbps)」欄,這些表格適用於一般用途、運算最佳化、儲存空間最佳化、記憶體最佳化和加速器最佳化機器系列。
網路用量達到上限時,頻寬乘數約為 1.16 倍,也就是說,寫入的位元組有 16% 是額外負荷。如果是地區永久磁碟,頻寬乘數約為 2.32 倍,以因應額外的複製作業負荷。
在永久磁碟讀取和寫入作業與網路輸出頻寬競爭的情況下,機器類型定義的網路輸出頻寬上限有 60% 會分配給永久磁碟寫入作業。其餘 40% 則可用於所有其他網路輸出流量。如要瞭解其他網路輸出流量的詳細資料,請參閱輸出頻寬。
以下範例說明如何計算 N1 VM 執行個體上永久磁碟的寫入頻寬上限。頻寬分配是指分配給永久磁碟的網路輸出頻寬部分。寫入頻寬上限是永久磁碟的寫入頻寬上限,並已針對額外負荷進行調整。
VM vCPU 數量 | 網路輸出上限 (MB/秒) | 頻寬分配量 (MB/秒) | 最大寫入頻寬 (MB/秒) | 網路使用率達到上限時的寫入頻寬上限 (MB/秒) |
---|---|---|---|---|
1 | 250 | 150 | 216 | 129 |
2-7 | 1,250 | 750 | 1,078 | 647 |
8-15 | 2,000 | 1,200 | 1,724 | 1,034 |
16+ | 4,000 | 2,400 | 3,448 | 2,069 |
您可以使用下列公式計算永久磁碟頻寬上限:
1 個 vCPU 的 N1 VM
網路輸出上限為:
2 Gbps / 8 位元 = 每秒 0.25 GB = 每秒 250 MB
網路用量達到上限時,永久磁碟頻寬分配量如下:
每秒 250 MB * 0.6 = 每秒 150 MB。
沒有網路爭用時,永久磁碟的寫入頻寬上限為:
- 區域磁碟:250 MB/秒 / 1.16 ~= 216 MB/秒
- 區域磁碟:每秒 250 MB / 2.32 ~= 每秒 108 MB
網路用量達到上限時,永久磁碟的寫入頻寬上限為:
- 區域磁碟:每秒 150 MB / 1.16 ~= 每秒 129 MB
- 區域性磁碟:每秒 150 MB / 2.32 ~= 每秒 65 MB
網路輸出限制會設下效能上限。其他因素可能會導致效能低於這個等級。如要瞭解其他效能限制,請參閱下列各節。
同步讀取和寫入
針對標準永久磁碟,同步讀取和同步寫入的資源為共用。隨著 VM 使用的讀取總處理量或 IOPS 提高,其所能執行的寫入作業也會減少。相反地,隨著執行個體使用的寫入總處理量或 IOPS 提高,其所能執行的讀取作業也會減少。
永久磁碟區無法同時達到讀取和寫入的總處理量和 IOPS 上限。
處理量的計算方式為 IOPS * I/O size
。如要充分發揮 SSD 永久磁碟同步讀取和寫入的最大總處理量,請使用適當的 I/O 大小,確保讀取和寫入 IOPS 的總和不超過 IOPS 上限。
下表列出每個 VM 同步讀取和寫入的 IOPS 上限。
標準永久磁碟 | SSD 永久磁碟 (8 個 vCPU) | SSD 永久磁碟 (32 個以上的 vCPU) | SSD 永久磁碟 (64 個以上的 vCPU) | ||||
---|---|---|---|---|---|---|---|
讀取 | 寫入 | 讀取 | 寫入 | 讀取 | 寫入 | 讀取 | 寫入 |
7,500 | 0 | 15,000 | 0 | 60,000 | 0 | 100,000 | 0 |
5,625 | 3,750 | 11,250 | 3,750 | 45,000 | 15,000 | 75,000 | 25,000 |
3,750 | 7,500 | 7,500 | 7,500 | 30,000 | 30,000 | 50,000 | 50,000 |
1875 | 11,250 | 3,750 | 11,250 | 15,000 | 45,000 | 25,000 | 75,000 |
0 | 15,000 | 0 | 15,000 | 0 | 60,000 | 0 | 100,000 |
下表所提供的是 8 KB I/O 的 IOPS 數字。其他 I/O 大小 (例如 16 KB) 可能會有不同的 IOPS 數字,但會維持相同的讀取/寫入分布。
下表列出每個 VM 的並行讀取和寫入作業處理量上限 (每秒 MB)。
標準永久磁碟 | SSD 永久磁碟 (6 到 14 個 vCPU) | SSD 永久磁碟 (16 個以上的 vCPU) | |||
---|---|---|---|---|---|
讀取 | 寫入 | 讀取 | 寫入 | 讀取 | 寫入 |
1200 | 0 | 800* | 800* | 1,200* | 1,200* |
900 | 100 | ||||
600 | 200 | ||||
300 | 300 | ||||
0 | 400 |
邏輯磁碟區大小
永久磁碟的大小上限為 64 TiB,而且您可以使用 VM 內部的邏輯磁碟區管理功能,建立單一邏輯磁碟區,容量最高可達 257 TiB。較大的磁碟區大小會對效能有以下影響:
- 並非所有本機檔案系統都能在這樣的規模下運作。掛接和檔案系統檢查等一般作業的處理時間可能會超出預估。
- 以較小的磁碟大小達成最高的永久磁碟效能。當一個 VM 上有這麼多的儲存空間,需要較長的時間才能在完整讀取或寫入磁碟。如果您的應用程式支援使用多個 VM,請考慮使用多個 VM 以取得更大的總系統處理量。
- 大量永久磁碟的快照可能花費比預期更長的時間才能完成,而且如果沒有謹慎地與應用程式進行協調,可能會導致邏輯磁碟區的資料檢視內容不一致。
連接至單一 VM 執行個體的多個磁碟
如果 VM 連接多個磁碟,磁碟的效能上限取決於磁碟類型是否相同。
相同類型的多個磁碟
如果 VM 執行個體有多個相同類型的磁碟,且這些磁碟都以相同模式 (例如讀取/寫入) 連接,則效能限制與單一磁碟的限制相同,但磁碟大小為這些磁碟的總和。如果所有磁碟的使用率都達到 100%,系統會將匯總效能限制平均分配給所有磁碟,不論磁碟相對大小為何。
舉例來說,假設您有 200 GB 的 pd-standard
磁碟和 1,000 GB 的 pd-standard
磁碟。如果您不使用 1,000 GB 磁碟,200 GB 磁碟就能達到 1,200 GB 標準磁碟的效能上限。如果兩個磁碟的使用率都達到 100%,則每個磁碟的效能上限為 600 GB pd-standard
磁碟 (1,200 GB / 2 個磁碟 = 600 GB 磁碟)。
多個不同類型的磁碟
如果將不同類型的磁碟連結至 VM,效能上限會是 VM 支援的最快磁碟效能限制。所連磁碟的累計效能不會超過 VM 支援最快磁碟的效能上限。
針對 IOPS 或輸送量導向的工作負載最佳化磁碟
效能建議取決於您要盡量提高 IOPS 還是輸送量。
IOPS 導向的工作負載
SQL 或 NoSQL 資料庫都有隨機存取資料的使用模式。 Google建議對於 IOPS 導向的工作負載使用下列值:
每 400 到 800 IOPS 的 I/O 佇列深度值設為 1,如果是大型磁碟區則最多可提高到 64
針對每 2,000 隨機讀取 IOPS 使用 1 個空閒的 CPU,並針對每 2,500 隨機寫入 IOPS 使用 1 個空閒的 CPU
如果 VM 機器類型支援,請使用 Google Cloud Hyperdisk Extreme 磁碟,即可變更佈建的 IOPS。
MongoDB、Apache Cassandra 和其他資料庫應用程式的最佳做法文件一般會建議使用較低的提前讀取值。
總處理量導向的工作負載
串流作業 (例如 Hadoop 工作) 受惠於快速的循序讀取能力,而較大的 I/O 可提高串流效能。
使用 256 KB 以上的 I/O 大小。
如果 VM 機器類型支援,請使用 Hyperdisk Throughput 磁碟,即可變更佈建的總處理量。
如果是標準永久磁碟,請盡量使用 8 個以上的平行循序 I/O 串流。標準永久磁碟的設計宗旨是最佳化循序磁碟存取的 I/O 效能,就像實體 HDD 硬碟一樣。
確保應用程式已經過最佳化,在大型磁碟上有合理的資料本地性。
如果應用程式在短時間內存取分布在磁碟不同部分的資料 (每 vCPU 數百 GB),就無法達到最佳 IOPS。為獲得最佳效能,請針對資料區域性進行最佳化,並權衡磁碟的片段化程度,以及磁碟存取部分的隨機性等因素。
如果是 SSD 永久磁碟,請確保作業系統中的 I/O 排程器已根據您的特定需求設定。
在 Linux 系統上,請檢查 I/O 排程器是否設為
none
。這個 I/O 排程器不會重新排序要求,非常適合快速的隨機 I/O 裝置。在指令列上,驗證 Linux 裝置使用的 I/O 排程:
cat /sys/block/sda/queue/scheduler
輸出結果會與下列內容相似:
[mq-deadline] none
目前啟用的 I/O 排程器會顯示在方括號 (
[]
) 中。如果 I/O 排程器未設為
none
,請執行下列其中一個步驟:- 如要將預設 I/O 排程器變更為
none
,請在 GRUB 設定檔的GRUB_CMDLINE_LINUX
項目中設定elevator=none
。這個檔案通常位於/etc/default/grub
,但在部分版本較舊的發行版上,該檔案可能位於其他目錄中。
GRUB_CMDLINE_LINUX="elevator=none vconsole.keymap=us console=ttyS0,38400n8 vconsole.font=latarcyrheb-sun16
更新 GRUB 設定檔後,請設定系統上的系統啟動載入程式,以便在 Compute Engine 上啟動。
- 或者,您可以在執行階段變更 I/O 排程器:
echo 'none' > sudo /sys/block/sda/queue/scheduler
如果使用這個方法,系統會在重新啟動時切換回預設的 I/O 排程器。再次執行
cat
指令,驗證 I/O 排程器。- 如要將預設 I/O 排程器變更為
可提升磁碟效能的工作負載變更
某些工作負載行為可以提升附加磁碟的 I/O 作業效能。
使用高 I/O 佇列深度
永久磁碟是網路連接裝置,因此延遲時間比本機連接磁碟 (例如本機 SSD 磁碟) 長。這類磁碟可提供極高的 IOPS 和輸送量,但您必須確保系統同時執行足夠的 I/O 要求。並行執行的 I/O 要求數量稱為「I/O 佇列深度」。
下表列出建議的 I/O 佇列深度,確保您能達到特定效能等級。請注意,下表略為高估一般延遲時間,以便顯示保守的建議。這個範例假設您使用的 I/O 大小為 16 KB。
使用較大的 I/O 大小產生足夠的 I/O
使用較大的 I/O 大小
為確保不讓 IOPS 限制與延遲時間變成應用程式效能的瓶頸,請使用 256 KB 以上的最小 I/O 大小。
如為分散式檔案系統應用,請使用較大的分段大小。使用較大分段大小 (4 MB 以上) 的隨機 I/O 工作負載將可在標準永久磁碟上達到絕佳效能,因為工作負載仿效多個循序串流磁碟存取的方式極為接近。
確保應用程式產生足夠的 I/O
請確認應用程式產生的 I/O 數量足夠,可充分運用磁碟的 IOPS 和輸送量限制。如要進一步瞭解工作負載的 I/O 模式,請在 Cloud Monitoring 中查看永久磁碟用量和效能指標。
確保產生 I/O 的執行個體上有足夠的可用 CPU
如果 VM 執行個體的 CPU 不足,應用程式將無法達到先前所述的 IOPS。我們建議每 2,000 到 2,500 IOPS 的預期流量應要有 1 個可用 CPU。
將高 I/O 負載範圍限制為上限
此處所稱的「範圍」,指的是單一實體磁碟上邏輯區塊位址的連續範圍。高 I/O 負載在範圍限制為特定上限時可達到最高效能,上限取決於磁碟所連 VM 的機器類型,如下表所示。
機型 | 建議的最大跨度 |
---|---|
|
25 TB |
所有其他機器類型 | 50 TB |
為了提高效能,如果不同永久磁碟的範圍限制總和在 50 TB 以下,系統會視為單一的 50 TB 範圍限制。
作業系統變更,可提升磁碟效能
在某些情況下,您可以在作業系統層級啟用或停用功能,或以特定方式設定附加磁碟,藉此提升磁碟效能。
避免在 Linux 中使用 ext3 檔案系統
在 Linux VM 中使用 ext3 檔案系統,可能會導致寫入負載過重時效能不佳。盡可能使用 ext4。ext4 檔案系統驅動程式可回溯相容於 ext3/ext2,並支援掛接 ext3 檔案系統。在大多數 Linux 作業系統中,ext4 檔案系統是預設選項。
如果無法遷移至 ext4,可以透過 data=journal
掛接選項掛接 ext3 檔案系統,做為暫時解決方法。這會提高寫入 IOPS,但寫入總處理量會受影響。遷移至 ext4 後,部分基準的效能最多可提升 7 倍。
停用延遲初始化並啟用 DISCARD 指令
永久磁碟支援捨棄作業或 TRIM
指令,這類指令可讓作業系統在區塊不再使用時通知磁碟。有了對 DISCARD 指令的支援,OS 就能將磁碟區塊標示為不再需要,而不會因為將區塊零化而產生費用。
在大部分的 Linux 作業系統上,您必須在將永久磁碟掛接至 VM 時啟用捨棄作業。Windows Server 2012 R2 VM 會在您掛接永久磁碟時,預設啟用捨棄作業。
啟用捨棄作業可提高一般執行階段效能,同時還可提高磁碟首次掛接時的效能。將磁碟的整個磁碟區格式化可能相當費時,所以常見的做法是延遲格式化。延遲格式化的缺點是您往往得在首次掛接磁碟區時支付費用。只要停用延遲初始化並啟用捨棄作業,您就能快速進行格式化及掛接作業。
格式化磁碟時,將下列參數傳送至 mkfs.ext4,即可停用延遲初始化並啟用捨棄作業:
-E lazy_itable_init=0,lazy_journal_init=0,discard
lazy_journal_init=0
參數不支援含有 CentOS 6 或 RHEL 6 映像檔的執行個體。如果 VM 使用這些作業系統,請格式化永久磁碟,但不要使用該參數。-E lazy_itable_init=0,discard
掛接磁碟時,將下列標記傳送至
mount
指令,即可啟用捨棄作業:-o discard
永久磁碟在啟用捨棄作業時可順利運作。不過,除了使用捨棄作業以外,您也可以選擇定期執行 fstrim
。如果您不使用捨棄作業,請先執行 fstrim
再建立開機磁碟快照。修整檔案系統可讓您建立較小的快照映像檔,進而減少儲存快照的費用。
調整提前讀取值
為改善 I/O 效能,作業系統會採用提前讀取這類技巧,在這種情況下,記憶體中讀入的檔案數量比所要求的還多,因為系統會假設後續的讀取作業可能需要這些資料。提前讀取量越多,總處理量就越高,但記憶體和 IOPS 會受到影響。提前讀取量越少,IOPS 就越高,但總處理量會受影響。
在 Linux 系統上,您可以透過 blockdev 指令取得及設定提前讀取值:
$ sudo blockdev --getra /dev/DEVICE_ID
$ sudo blockdev --setra VALUE /dev/DEVICE_ID
提前讀取值為 <desired_readahead_bytes>
/ 512 個位元組。
舉例來說,假設需要 8 MB 的提前讀取量,而 8 MB 是 8388608 個位元組 (8 * 1024 * 1024)。
8388608 bytes / 512 bytes = 16384
因此,blockdev 應設為 16384
:
$ sudo blockdev --setra 16384 /dev/DEVICE_ID
修改 VM 或建立新的 VM
每個 VM 機器類型都有相關限制,可能會影響所連磁碟的效能。這些限制包括:
- 可用的 vCPU 數量越多,Persistent Disk 的效能就越高。
- 並非所有機器類型都支援 Hyperdisk。
- 可用 vCPU 數量越多,網路輸出速率就越高。
確保您有可用的 CPU
讀取和寫入永久磁碟時需要 VM 的 CPU 週期。如要達到高度且一致的 IOPS 等級,則必須釋出 CPU 來處理 I/O。
如要增加 VM 可用的 vCPU 數量,可以建立新的 VM,或編輯 VM 執行個體的機器類型。
建立新的 VM,取得新功能
並非所有機器系列或機器類型都支援較新的磁碟類型。 Hyperdisk 可為工作負載提供更高的 IOPS 或處理量,但目前僅適用於少數機器系列,且至少需要 64 個 vCPU。
新的 VM 機器系列通常會搭載較新的 CPU,效能比前代產品更出色。此外,較新的 CPU 可支援額外功能,提升工作負載的效能,例如進階矩陣擴充功能 (AMX) 或 Intel 進階向量擴充功能 (AVX-512)。
後續步驟
- 如要監控磁碟效能,請查看磁碟效能指標,並監控磁碟健康狀態。
- 對連結至 Linux VM 的永久磁碟磁碟區進行基準測試。
- 瞭解永久磁碟的定價。
- 如要瞭解如何監控磁碟效能,請查看永久磁碟效能指標。