虛擬機器和磁碟效能

適用於: ✔️ Linux VM ✔️ Windows VM ✔️ 彈性擴展集 ✔️ 統一擴展集

本文說明 Azure 虛擬機器(VM)與受管磁碟效能限制如何互動。 同時也說明如何診斷磁碟 I/O 瓶頸並優化儲存效能。

Azure VM 與管理磁碟效能限制的互動方式

Azure 虛擬機有每秒輸入/輸出運算次數(IOPS)和吞吐量限制,取決於虛擬機的類型和大小。 管理作業系統磁碟和資料磁碟有自己的 IOPS 和吞吐量限制。

磁碟配置和效能

連接到 Azure VM 的磁碟會使用三條 I/O 路徑。 下圖顯示 Azure 如何在這些路徑上即時分配頻寬及每秒輸入/輸出操作數(IOPS)。

未快取的受控磁碟 I/O 受磁碟和 VM 網路限制影響的示意圖。快取 I/O 也會受 SSD 限制影響,而快取命中和暫存磁碟 I/O 則使用伺服器 SSD。

第一個 I/O 路徑是未快取的受管理磁碟路徑。 當您使用受控磁碟並將主機快取 none設定為 時,I/O 作業會使用此路徑。 使用此路徑的 I/O 作業會根據磁碟層級布建,然後針對 IOPS 和輸送量執行 VM 網路層級布建。

第二個 I/O 路徑是快取的受控磁碟路徑。 快取的受控磁碟 I/O 會使用靠近 VM 的 SSD。 此 SSD 已為其配置專屬的 IOPS 和吞吐量,並在圖中顯示為「SSD 層級佈建」。

當快取的受控磁碟起始讀取時,要求會先檢查資料是否在伺服器 SSD 中。 如果資料不存在,就會發生快取未命中。 然後 I/O 會根據 IOPS 和輸送量的 SSD 層級佈建、磁碟層級佈建,以及 VM 網路層級佈建來執行。

當伺服器 SSD 啟動讀取位於伺服器 SSD 上的快取 I/O 時,就會發生快取命中。 接著,I/O 會根據 SSD 層級佈建執行。 快取的受控磁碟起始的寫入一律會遵循快取遺漏的路徑。 它們會經歷 SSD 層級、磁碟層級和 VM 網路層級佈建。

第三條路徑是臨時 磁碟。 它只在支援暫存磁碟的虛擬機上使用。 使用此路徑的 I/O 作業會根據 IOPS 和輸送量的 SSD 層級佈建執行。

下圖說明這些限制的範例。 因為 SSD 和網路層級的限制,系統會使 Standard_D2s_v3 VM 無法達到 P30 磁碟的 5,000 IOPS 潛能 (不論是否快取)。

Standard_D2s_v3虛擬機的示意圖,限制 P30 磁碟效能為 3,200 IOPS 及 32 MBps(非快取 I/O)或 4,000 IOPS 與 32 MBps(快取 I/O)。

Azure 會針對磁碟流量使用已排定優先順序的網路通道。 磁碟流量的優先順序高於低優先順序的網路流量。 如果發生網路爭用,此優先順序可協助磁碟維持其預期的效能。

同樣地,Azure 儲存體會使用自動負載平衡來處理背景中的資源爭用和其他問題。 當您建立磁碟時,Azure 儲存體會配置所需的資源,並套用資源的主動式和回應式平衡來處理流量層級。 此行為可進一步確保磁碟可維持其預期的 IOPS 和輸送量目標。 使用 VM 層級和磁碟層級 計量 來追蹤效能,並視需要設定警示。

磁碟輸入輸出封頂

當應用程式要求的 IOPS 或輸送量超過虛擬機器或連結磁碟所分配的輸送量時,應用程式的效能便會受到限制。 當受到限制時,應用程式的效能會不理想。 這種狀況可能導致像是延遲增加等負面後果。 以下範例使用 IOPS,但同樣的邏輯也適用於吞吐量。

磁碟層級封頂範例設置:

  • Standard_D8s_v3
    • 未快取的 IOPS:12,800
  • E30 OS 磁碟
    • IOPS:500
  • 兩個 E30 資料磁碟 × 2
    • IOPS:500

顯示 10,000 IOPS 請求分散到三個 E30 磁碟上的示意圖;每個磁碟的上限皆為 500 IOPS,因此產生 1,500 IOPS 的回應。

在虛擬機器上執行的應用程式會提出要求,要求虛擬機器提供 10000 IOPS。 上述這些全都在 VM 允許的範圍內,因為 Standard_D8s_v3 虛擬機器最多可支援 12,800 IOPS。

這 10000 個 IOPS 要求分成了對三個不同磁碟所提出的不同要求:

  • 作業系統磁碟被要求處理 1000 IOPS。
  • 每個資料磁碟各被要求處理 4500 IOPS。

所有連結的磁碟都是 E30 磁碟,各只能處理 500 IOPS。 因此,它們會分別以 500 IOPS 回應。 應用程式的效能受限於連結的磁碟,因此只能處理 1500 IOPS。 如果使用效能更佳的磁碟,應用程式可以在 10000 IOPS 的尖峰效能下運作,例如進階 SSD P30 磁碟。

虛擬機 I/O 上限

虛擬機層級封頂範例設定:

  • Standard_D8s_v3
    • 未快取 IOPS:12,800
  • P30 OS 磁碟
    • IOPS:5000
  • 兩個 P30 資料磁碟 × 2
    • IOPS:5000

對三顆 P30 磁碟提出 15,000 IOPS 要求、但受 Standard_D8s_v3 VM 限制為 12,800 IOPS 的示意圖。

在虛擬機器上執行的應用程式會提出一個需要 15000 IOPS 的要求。 不幸的是,Standard_D8s_v3 虛擬機器在佈建時僅能設計來處理到最多 12800 IOPS。 應用程式受限於虛擬機器的限制,且必須配置所配給的 12,800 IOPS。

所要求的 12,800 IOPS 會分解為三個不同的請求,分別發送到不同的磁碟:

  • 作業系統磁碟被要求處理 4267 IOPS。
  • 每個資料磁碟各被要求處理 4266 IOPS。

所有連接的磁碟都是 P30 磁碟,可處理 5,000 IOPS。 因此,他們會以被要求的數額回應。

虛擬機快取與非快取限制

同時啟用進階儲存體和進階儲存體快取功能的虛擬機器,具有兩種不同的儲存體頻寬限制。 讓我們來看看作為範例的 Standard_D8s_v3 虛擬機器吧。 以下是 Dsv3 系列和Standard_D8s_v3 的文件:

  • 遠端記憶體下的「未快取」磁碟數據是虛擬機可以處理的預設記憶體上限。 Standard_D8s_v3遠端儲存限制的截圖顯示 16 顆磁碟、12,800 未快取 IOPS、192 MBps 吞吐量,以及突發限制 16,000 IOPS 和 400 MBps。

  • 當您啟用主機快取時,本機儲存體 索引標籤下的「已快取」磁碟資料屬於獨立限制。 Standard_D8s_v3本地儲存限制截圖顯示一顆 64 GiB 的暫存磁碟、一個 200 GiB 快取、16,000 次快取 IOPS,以及 128 MBps 快取吞吐量。

設定主機快取

主機快取的運作方式是將儲存體移近虛擬機器 (VM),以便快速讀取或寫入資料。 VM 可用於主機快取的儲存體數量記載於文件中。 例如,您可以看到 Standard_D8s_v3 隨附了 200 GiB 的快取儲存體。

您可以在建立虛擬機器並連結磁碟時啟用主機快取。 您也可以在現有 VM 的磁碟上開啟和關閉主機快取。 預設情況下,支援快取的資料磁碟不會啟用快取。 能夠快取的 OS 磁碟已啟用讀取/寫入快取。

Azure Portal 磁碟設定的截圖顯示作業系統磁碟的讀寫快取、一個資料磁碟的唯讀快取,以及另一個資料磁碟的讀寫快取。

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

  • 唯讀:針對只執行讀取作業的工作負載
  • 讀取/寫入:適用於讀取與寫入作業均衡的工作負載

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

唯讀主機快取

以下範例展示了當你將主機快取設為 唯讀時,I/O 請求的流程。

唯讀主機快取範例設定:

  • Standard_D8s_v3
    • 快取 IOPS:16,000
    • 未快取的 IOPS:12,800
  • P30 資料磁碟
    • IOPS:5000
    • 主機快取:唯讀

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

主機快取在未存取 P30 資料磁碟的情況下所服務的 Standard_D8s_v3 讀取請求示意圖。

執行讀取作業時,如果所需資料不在快取中,讀取要求會轉送到磁碟。 接著,磁碟會將其提供給快取和虛擬機器。 這次讀取作業會同時計入 VM 的未快取限制和 VM 的快取限制。

快取未命中讀取從Standard_D8s_v3虛擬機經由主機快取流向 P30 資料磁碟,回應則透過快取回傳的圖示。

執行寫入時,寫入必須同時寫入快取和磁碟,才能將其視為完成。 此寫入會計入 VM 的未快取限制和 VM 的快取限制中。

啟用唯讀主機快取的寫入作業示意圖:資料會先從 Standard_D8s_v3 VM 經由主機快取流向 P30 資料磁碟,之後才完成寫入。

讀取/寫入主機快取

以下範例顯示當您將主機快取設定為 讀取/寫入 時,I/O 要求如何流動。

讀寫主機快取範例設定:

  • Standard_D8s_v3
    • 快取 IOPS:16,000
    • 未使用快取的 IOPS:12,800
  • P30 資料磁碟
    • IOPS:5000
    • 主機快取:讀取/寫入

使用主機讀取/寫入快取時,快取命中讀取會計入虛擬機器的快取限制。 快取未命中的讀取作業會同時計入該虛擬機的快取和非快取限制。 寫入的處理方式不同:寫入只需到達主機快取即可被視為完成。 然後,當快取定期清空時,該寫入作業才會延後寫入磁碟。 你也可以透過發出 f/sync 或 fua 指令來強制刷新。 當寫入作業寫入快取時,會計入快取 I/O;當它以延後寫入的方式寫入磁碟時,則會計入未快取 I/O。

顯示在啟用讀取/寫入主機快取時,寫入作業於主機快取完成,並延後寫入 P30 資料磁碟的示意圖。

快取限制範例

以下範例使用已啟用主機快取的 Standard_D8s_v3 虛擬機器,以及三個附加的 P30 磁碟。 虛擬機的快取限制為 16,000 IOPS,每顆 P30 磁碟可支援 5,000 IOPS。

快取限制範例設定:

  • Standard_D8s_v3
    • 快取 IOPS:16,000
    • 未經快取的 IOPS:12,800
  • P30 OS 磁碟
    • IOPS:5000
    • 主機快取:讀取/寫入
  • 兩個 P30 資料磁碟 × 2
    • IOPS:5000
    • 主機快取:讀取/寫入

Standard_D8s_v3 虛擬機器透過主機快取完成 16,000 IOPS 要求的示意圖,該快取會延後寫入一顆 P30 作業系統磁碟和兩顆 P30 資料磁碟。

應用程式使用已啟用快取的 Standard_D8s_v3 虛擬機器。 它會提出 16000 IOPS 的要求。 要求會讀取或寫入到快取時,便會立即完成。 接著,這些寫入作業會以延遲方式寫入連接的磁碟。

合併未快取和快取的限制

虛擬機器的快取限制與其未快取的限制是分開的。 這種分離意味著你可以在連接虛擬機的某些磁碟上啟用主機快取,而在其他磁碟上則不啟用主機快取。 此配置可讓您的虛擬機器獲得相當於快取上限加上非快取上限之和的總儲存體 I/O。

以下範例展示了快取與未快取限制如何在連接高級 SSD 的 Standard_D8s_v3 虛擬機上協同運作。

結合快取與非快取極限設置範例:

  • Standard_D8s_v3
    • 快取 IOPS:16,000
    • 未快取 IOPS:12,800
  • P30 OS 磁碟
    • IOPS:5000
    • 主機快取:讀取/寫入
  • 兩個 P30 資料磁碟 × 2
    • IOPS:5000
    • 主機快取:讀取/寫入
  • 兩個 P30 資料磁碟 × 2
    • IOPS:5000
    • 主機快取:停用

顯示 Standard_D8s_v3 虛擬機如何透過將 15,000 個快取 IOPS 傳送至三個 P30 磁碟,並將 10,000 個未快取 IOPS 傳送至兩個 P30 資料磁碟,來達到 25,000 IOPS 的示意圖。

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

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