虛擬機器和磁碟效能

適用於: ✔️ 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

Diagram showing disk level capping.

在虛擬機器上執行的應用程式會提出要求,要求虛擬機器提供 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

Diagram showing virtual machine level capping.

在虛擬機器上執行的應用程式會提出一個需要 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 的文件:

Chart showing D s v 3 specifications.

  • 最大「未快取」的磁碟輸送量是虛擬機器可以處理的預設最大儲存體限制。
  • 當啟用主機快取時,最大「快取」儲存體輸送量限制則是個別的限制。

主機快取的運作方式是讓儲存體可以更接近可快速寫入或讀取的 VM。 VM 可用於主機快取的儲存體數量記載於文件中。 例如,您可以看到 Standard_D8s_v3 隨附了 200 GiB 的快取儲存體。

您可以在建立虛擬機器並連結磁碟時啟用主機快取。 您也可以在現有 VM 的磁碟上開啟和關閉主機快取。 可擷取快取的資料磁碟預設會啟用唯讀快取。 可擷取快取的作業系統磁碟會啟用讀取/寫入快取。

Screenshot showing host caching.

您可以調整主機快取,以符合每個磁碟的工作負載需求。 您可以將主機快取設定為:

  • 唯讀:針對只執行讀取作業的工作負載
  • 讀取/寫入:針對讀取和寫入作業皆平衡執行的工作負載

如果您的工作負載未遵循上述任一模式,則不建議您使用主機快取。

讓我們逐一查看不同主機快取設定的幾個範例,以查看它能如何影響資料流程和效能。 在第一個範例中,我們將探討當主機快取設定調整為 唯讀時,IO 要求會發生什麼情況。

設定

  • Standard_D8s_v3
    • 已快取的 IOPS:16000
    • 未快取的 IOPS:12800
  • P30 資料磁碟
    • IOPS:5000
    • 主機快取:唯獨

當執行了讀取作業並在快取上使用所需的資料時,快取便會傳回要求的資料。 不需要從磁碟進行讀取。 此讀取會計入 VM 的快取限制中。

Diagram showing a read host caching read hit.

當執行讀取且「無法」在快取上取得所需的資料時,讀取要求會轉寄至磁碟。 然後,磁碟會將它呈現給快取和 VM。 此讀取會計入 VM 的未快取限制和 VM 的快取限制中。

Diagram showing a read host caching read miss.

執行寫入作業時,寫入作業必須同時寫入快取和磁碟,整個作業才會被視為完成。 此寫入會計入 VM 的未快取限制和 VM 的快取限制中。

Diagram showing a read host caching write.

接下來,讓我們看看當主機快取設定設為 [讀取/寫入] 時,IO 要求會發生什麼情況。

設定

  • Standard_D8s_v3
    • 已快取的 IOPS:16000
    • 未快取的 IOPS:12800
  • P30 資料磁碟
    • IOPS:5000
    • 主機快取:讀取/寫入

讀取的處理方式與設定為 [唯讀] 時相同。 寫入是 [讀取/寫入] 快取設定中唯一不同的部分。 主機快取寫入被設定為 [讀取/寫入] 時,寫入只需要寫入主機快取即被視為作業完成。 然後,快取定期排清時,寫入會延遲寫入磁碟。 客戶可發出 f/sync 或 fua 命令來強制排清。 這表示寫入會計入到快取的 IO 寫入快取。 當它延遲寫入磁片時,它會計入未快取的 IO 中。

Diagram showing read/write host caching write.

讓我們繼續回到 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
    • 主機快取:讀取/寫入

Diagram showing a host caching example.

應用程式會使用已啟用快取的 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
    • 主機快取:停用

Diagram showing a host caching example with remote storage.

在此情況下,Standard_D8s_v3 虛擬機器上執行的應用程式提出了 25000 IOPS 的要求。 該要求會被分配給每個連結的磁碟各 5000 IOPS。 三個磁片使用了主機快取,而另外兩個磁片沒有使用主機快取。

  • 由於使用主機快取的三個磁碟在 16000 的快取限制內,因此能夠成功完成要求。 不會發生儲存體效能達到上限的狀況。
  • 而由於未使用主機快取的兩個磁碟仍在 12800 的未快取限制內,因此也能夠成功完成要求。 沒有發生達到上限的狀況。