適用於: ✔️ Linux VM ✔️ Windows VM ✔️ 彈性擴展集 ✔️ 統一擴展集
本文可協助您釐清磁碟效能,以及如何將 Azure 虛擬機器和 Azure 磁碟結合起來一同運作。 本文也會描述如何診斷磁碟 IO (輸入/輸出) 所碰到的瓶頸,以及如何作出變更以針對效能進行優化。
磁碟效能是怎麼運作的?
Azure 虛擬機器 (VM) 具有以 VM 類型和大小為依據的每秒輸入/輸出作業數 (IOPS) 和輸送量效能限制。 OS 磁碟和資料磁碟可以連結至虛擬機器上。 磁碟有著自己的 IOPS 和輸送量限制。
磁碟配置和效能
在 Azure 中,帶寬和每秒 I/O 作業 (IOPS) 可以透過三個路徑連接到虛擬機器 (VM) 的磁碟。 下圖描述這些路徑的實時配置。
下圖描述磁碟的頻寬和每秒 I/O 作業(IOPS) 的即時配置,以及 I/O 可採用的三個路徑。
第一個 I/O 路徑是未快取的受控磁碟路徑。 當您使用受控磁碟並將主機快取 none
設定為 時,I/O 作業會使用此路徑。 使用此路徑的 I/O 作業會根據磁碟層級布建,然後針對 IOPS 和輸送量執行 VM 網路層級布建。
第二個 I/O 路徑是快取的受控磁碟路徑。 快取的受控磁碟 I/O 會使用接近 VM 的 SSD。 此 SSD 已佈建自己的 IOPS 和輸送量,其會顯示為圖表中的「SSD 層級佈建」。
當快取的受控磁碟起始讀取時,要求會先檢查資料是否在伺服器 SSD 中。 如果數據不存在,就會發生快取遺漏。 然後 I/O 會根據 SSD層級的配置、磁碟層級的配置,以及 VM網路層級的配置來執行 IOPS 和吞吐量。
當伺服器 SSD 起始讀取位於伺服器 SSD 上的快取 I/O 時,就會發生快取命中。 接著,I/O 會根據 SSD 層級佈建執行。 快取的受控磁碟起始的寫入一律會遵循快取遺漏的路徑。 它們會經歷 SSD 層級、磁碟層級和 VM 網路層級布建。
第三個路徑用於本機/暫存磁碟。 它僅適用於支援 本機/暫存 磁碟的 VM。 使用此路徑的 I/O 作業會根據 IOPS 和輸送量的 SSD 層級佈建執行。
下圖說明這些限制的範例。 因為 SSD 和網路層級的限制,系統會使 Standard_D2s_v3 VM 無法達到 P30 磁碟的 5,000 IOPS 潛能 (不論是否快取)。
Azure 會針對磁碟流量使用已排定優先順序的網路通道。 磁碟流量的優先順序高於低優先順序的網路流量。 如果發生網路爭用,此優先順序可協助磁碟維持其預期的效能。
同樣地,Azure 儲存體會使用自動負載平衡來處理背景中的資源爭用和其他問題。 當您建立磁碟時,Azure 儲存體會配置所需的資源,並套用資源的主動式和回應式平衡來處理流量層級。 此行為可進一步確保磁碟可維持其預期的 IOPS 和輸送量目標。 使用 VM 層級和磁碟層級 計量 來追蹤效能,並視需要設定警示。
磁碟 IO 上限
當應用程式要求的 IOPS 或輸送量超過虛擬機器或連結磁碟所分配的輸送量時,應用程式的效能便會受到限制。 當達到上限時,應用程式的效能將會下降。 這可能會造成負面的後果,例如增加延遲。 讓我們逐步解說幾個範例來釐清此概念。 為了讓您能更輕鬆跟上這些範例,我們只會查看 IOPS。 但是,輸送量的邏輯其實也是相同的。
設定:
- Standard_D8s_v3
- 未快取的 IOPS:12800
- E30 OS 磁碟
- IOPS:500
- 兩個 E30 資料磁碟 × 2
- IOPS:500
在虛擬機器上執行的應用程式會提出要求,要求虛擬機器提供 10000 IOPS。 VM 會完整允許這個要求,因為 Standard_D8s_v3 虛擬機器最多可以執行 12800 IOPS。
這 10000 個 IOPS 要求分成了對三個不同磁碟所提出的不同要求:
- 作業系統磁碟被要求處理 1000 IOPS。
- 每個資料磁碟各被要求處理 4500 IOPS。
所有連結的磁碟都是 E30 磁碟,各只能處理 500 IOPS。 因此,它們會分別以 500 IOPS 回應。 應用程式的效能受限於連結的磁碟,因此只能處理 1500 IOPS。 如果使用效能更佳的磁碟,應用程式可以在 10000 IOPS 的尖峰效能下運作,例如進階 SSD P30 磁碟。
虛擬機器 IO 上限
設定:
- Standard_D8s_v3
- 未快取的 IOPS:12800
- P30 OS 磁碟
- IOPS:5000
- 兩個 P30 資料磁碟 × 2
- IOPS:5000
在虛擬機器上執行的應用程式會提出一個需要 15000 IOPS 的要求。 不幸的是,Standard_D8s_v3 虛擬機器在佈建時僅能設計來處理到最多 12800 IOPS。 應用程式會限制虛擬機器的限制,且必須配置分配的 12,800 IOPS。
這 12800 個 IOPS 要求分成了對三個不同磁碟所提出的不同要求:
- 作業系統磁碟被要求處理 4267 IOPS。
- 每個資料磁碟各被要求處理 4266 IOPS。
所有連接的磁碟都是 P30 磁碟,可處理 5,000 IOPS。 因此,他們會以被要求的數額回應。
虛擬機器未快取與快取限制的比較
針對進階儲存體和進階儲存體快取啟用的虛擬機器,有兩個不同的儲存體頻寬限制。 讓我們來看看作為範例的 Standard_D8s_v3 虛擬機器吧。 以下是 Dsv3 系列和Standard_D8s_v3 的文件:
遠端記憶體下的「未快取」磁碟數據是虛擬機可以處理的預設記憶體上限。
當您啟用主機快取時,[本機記憶體] 索引卷標下的 [快取] 磁碟數據是個別的限制。
主機快取的運作方式是讓儲存體可以更接近可快速寫入或讀取的 VM。 VM 可用於主機快取的儲存體數量記載於文件中。 例如,您可以看到 Standard_D8s_v3 隨附了 200 GiB 的快取儲存體。
您可以在建立虛擬機器並連結磁碟時啟用主機快取。 您也可以在現有 VM 的磁碟上開啟和關閉主機快取。 根據預設,支援快取的數據磁碟不會啟用快取。 支援快取的 OS 磁碟已啟用讀取/寫入快取。
您可以調整主機快取,以符合每個磁碟的工作負載需求。 您可以將主機快取設定為:
- 唯讀:針對只執行讀取作業的工作負載
- 讀取/寫入:針對讀取和寫入作業皆平衡執行的工作負載
如果您的工作負載未遵循上述任一模式,則不建議您使用主機快取。
讓我們逐一查看不同主機快取設定的幾個範例,以查看它能如何影響資料流程和效能。 在第一個範例中,我們看到當主機快取設定設為 只讀時,IO 要求會發生什麼情況。
設定:
- Standard_D8s_v3
- 已快取的 IOPS:16000
- 未快取的 IOPS:12800
- P30 資料磁碟
- IOPS:5000
- 主機快取:唯獨
當執行了讀取作業並在快取上使用所需的資料時,快取便會傳回要求的資料。 不需要從磁碟讀取。 此讀取會計入 VM 的快取限制中。
執行讀取且快取上無法使用所需的數據時,讀取要求會轉寄至磁碟。 然後,磁碟會將它呈現給快取和 VM。 此讀取會計入 VM 的未快取限制和 VM 的快取限制中。
執行寫入時,寫入必須同時寫入快取和磁碟,才能將其視為完成。 此寫入會計入 VM 的未快取限制和 VM 的快取限制中。
接下來,讓我們看看當主機快取設定設為 [讀取/寫入] 時,IO 要求會發生什麼情況。
設定:
- Standard_D8s_v3
- 已快取的 IOPS:16000
- 未快取的 IOPS:12800
- P30 資料磁碟
- IOPS:5000
- 主機快取:讀取/寫入
讀取的處理方式與設定為 [唯讀] 時相同。 寫入是 [讀取/寫入] 快取設定中唯一不同的部分。 主機快取寫入被設定為 [讀取/寫入] 時,寫入只需要寫入主機快取即被視為作業完成。 然後,快取定期排清時,寫入會延遲寫入磁碟。 客戶可以藉由發出 f/sync
或 fua
命令來強制排清。 這表示寫入會在寫入快取時計入快取的IO。 當它延遲寫入磁碟時,它會計入未快取的IO。
讓我們繼續回到 Standard_D8s_v3 虛擬機器上。 除了這次,我們會在磁碟上啟用主機快取。 因此 VM 的 IOPS 限制為 16000 IOPS。 連結至 VM 的是三個基礎 P30 磁碟,每個磁碟可以處理 5000 IOPS。
設定:
- Standard_D8s_v3
- 已快取的 IOPS:16000
- 未快取的 IOPS:12800
- P30 OS 磁碟
- IOPS:5000
- 主機快取:讀取/寫入
- 兩個 P30 資料磁碟 × 2
- IOPS:5000
- 主機快取:讀取/寫入
應用程式會使用已啟用快取的 Standard_D8s_v3 虛擬機器。 它會提出 16000 IOPS 的要求。 要求會在快取讀取或寫入時立即完成。 寫入接著會延遲寫入連結的磁碟。
合併未快取和快取的限制
虛擬機器的快取限制與其未快取的限制是分開的。 這表示您可以在連結至 VM 的磁碟上啟用主機快取,而不在其他磁碟上啟用主機快取。 此設定可讓您的虛擬機器取得快取限制的總儲存體 IO ,再加上未快取的限制。
讓我們執行一個範例,來協助您瞭解這些限制是如何一起運作的。 我們會繼續Standard_D8s_v3虛擬機和進階磁碟連接的設定。
設定:
- Standard_D8s_v3
- 已快取的 IOPS:16000
- 未快取的 IOPS:12800
- P30 OS 磁碟
- IOPS:5000
- 主機快取:讀取/寫入
- 兩個 P30 資料磁碟 × 2
- IOPS:5000
- 主機快取:讀取/寫入
- 兩個 P30 資料磁碟 × 2
- IOPS:5000
- 主機快取:停用
在此情況下,Standard_D8s_v3 虛擬機器上執行的應用程式提出了 25000 IOPS 的要求。 該要求會被分配給每個連結的磁碟各 5000 IOPS。 三個磁片使用了主機快取,而另外兩個磁片沒有使用主機快取。
- 由於使用主機快取的三個磁碟在 16000 的快取限制內,因此能夠成功完成要求。 不會發生儲存體效能達到上限的狀況。
- 而由於未使用主機快取的兩個磁碟仍在 12800 的未快取限制內,因此也能夠成功完成要求。 沒有發生達到上限的狀況。