虛擬機器和磁碟效能
適用於: ✔️ Linux VM ✔️ Windows VM ✔️ 彈性擴展集 ✔️ 統一擴展集
本文可協助您釐清磁碟效能,以及如何將 Azure 虛擬機器和 Azure 磁碟結合起來一同運作。 本文也會描述如何診斷磁碟 IO (輸入/輸出) 所碰到的瓶頸,以及如何作出變更以針對效能進行優化。
磁碟效能是怎麼運作的?
Azure 虛擬機器 具有以虛擬機器類型和大小為依據的每秒輸入/輸出作業數 (IOPS) 和輸送量效能限制。 OS 磁碟和資料磁碟可以連結至虛擬機器上。 磁碟有著自己的 IOPS 和輸送量限制。
當應用程式要求的 IOPS 或輸送量超過虛擬機器或連結磁碟所分配的輸送量時,應用程式的效能便會受到限制。 當達到上限時,應用程式的效能將會下降。 這可能會造成負面的後果,例如增加延遲。 讓我們逐步解說幾個範例來釐清此概念。 為了讓您能更輕鬆跟上這些範例,我們只會查看 IOPS。 但是,輸送量的邏輯其實也是相同的。
磁碟 IO 上限
設定:
- 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 的未快取限制內,因此也能夠成功完成要求。 沒有發生達到上限的狀況。