新一代動態資源管理

N4 VM 搭載第五代 Intel Xeon 處理器和 Titanium,採用新一代動態資源管理技術,可更充分運用主機上的實體資源,並使用自訂 CPU 排程器和效能感知即時遷移功能,在工作負載效能需求與可用資源之間取得平衡,進而提高成本效益。Google 搜尋、Google Ads、Google 地圖和 YouTube 服務也使用這些技術,有效率地執行延遲時間敏感型工作負載。

新一代動態資源管理功能也具備更出色的 NUMA 親和性、更準確的資源需求預測,以及使用效能感知即時遷移功能更快重新平衡。

動態資源管理運作方式

虛擬 CPU (vCPU) 會以執行緒的形式實作,並排定在主機上隨選執行,就像主機上的任何其他執行緒一樣。當 vCPU 有工作要執行時,系統會將工作指派給可用的實體 CPU,直到工作再次進入休眠狀態為止。同樣地,虛擬 RAM 會使用頁面表對應至實體主機頁面,而頁面表會在首次存取訪客實體頁面時填入。在 VM 指出不再需要客體實體頁面之前,這項對應會維持固定。

透過動態資源管理,Compute Engine 可根據資源需求將 VM 排程至伺服器,並將 vCPU 執行緒排程至實體 CPU,盡量縮短等待時間,進而更有效運用可用的實體 CPU。在大多數情況下,我們都能順暢完成這項作業,因此 Google Cloud 可以在較少的伺服器上更有效率地執行 VM。

動態資源管理元件

Compute Engine 使用下列技術進行動態資源管理:

更大、更有效率的實體伺服器

核心數量和 RAM 密度持續增加,因此現在主機伺服器擁有的資源遠多於任何個別 VM。Google 會持續對新硬體進行基準測試,並尋找經濟實惠的平台,以因應各種雲端工作負載和服務,讓您在最新技術推出時搶先使用。

智慧型 VM 放置位置

Google 的叢集管理系統會監控實體伺服器上執行的 VM 的 CPU、RAM 和其他資源需求。並根據這項資訊預測新加入的 VM 在該伺服器上的效能。然後在數千部伺服器中搜尋,找出新增 VM 的最佳位置。這些觀察結果可確保新 VM 放置時與鄰近 VM 相容,且不太可能受到這些執行個體干擾。

可感知效能的即時遷移

將 VM 放置在主機上後,Compute Engine 會持續監控 VM 效能和等待時間。如果 VM 的資源需求增加,Compute Engine 可以使用即時遷移功能,將工作負載透明地轉移至資料中心的其他主機。即時遷移政策採用預測方法,讓 Compute Engine 有時間轉移負載,通常在 VM 發生任何等待時間之前。

管理程序 CPU 排程器

管理程序 CPU 排程器會視需要將虛擬 CPU 和記憶體動態對應至主機伺服器的實體 CPU 和記憶體。這項動態管理功能可更妥善運用實體資源,進而提高 VM 的成本效益。有效運用資源代表 Compute Engine 能在較少的伺服器上更有效率地執行 VM,因此 Google Cloud 能將節省的費用回饋給使用者。

第一代動態資源管理

E2 是第一個使用 virtio 記憶體氣球裝置提供動態資源管理的 VM 系列。

搭配 E2 VM 使用 Virtio 記憶體氣球裝置

記憶體氣球化是主機和客體之間的介面機制,可動態調整客體保留的記憶體大小。E2 會使用 virtio 記憶體氣球裝置 實作記憶體氣球。主機可以透過 virtio 記憶體氣球裝置,明確要求客體讓出一定數量的可用記憶體頁面 (也稱為記憶體氣球膨脹),並回收記憶體,以便主機將可用記憶體用於其他 VM。同樣地,virtio 記憶體氣球裝置可以透過縮減記憶體氣球,將記憶體頁面還給訪客。只有 E2 VM 會使用記憶體氣球裝置。

公開映像檔為基礎的 Compute Engine E2 VM 執行個體具有 virtio 記憶體氣球裝置 ,可監控客層作業系統的記憶體用量。訪客作業系統會將可用記憶體傳達給主機系統。主機可視需要將未使用的記憶體重新分配給其他程序,進而更有效率地使用記憶體。Compute Engine 會收集及使用這項資料,提出更準確的適當大小建議

驗證驅動程式安裝

如要檢查映像檔是否已安裝及載入 virtio 記憶體氣球裝置驅動程式,請執行下列指令。

Linux

大多數 Linux 發行版都包含 virtio 記憶體氣球裝置驅動程式。 如要確認映像檔已安裝並載入驅動程式,請執行下列指令:

sudo modinfo virtio_balloon > /dev/null && echo Balloon driver is \
installed || echo Balloon driver is not installed; sudo lsmod | grep \
virtio_balloon > /dev/null && echo Balloon driver is loaded || echo \
Balloon driver is not loaded

Linux 核心 5.2 之前的版本中,如果存在氣球裝置,Linux 記憶體系統有時會誤判,導致無法分配大量記憶體。實際上很少發生這種問題,但我們建議將虛擬記憶體 overcommit_memory 設定變更為 1,以免發生問題。自 2021 年 2 月 9 日起,所有 Google 提供的映像檔預設都會進行這項變更。

如要修正設定,請使用下列指令將值從 0 變更為 1

sudo /sbin/sysctl -w vm.overcommit_memory=1

如要在重新啟動後保留這項變更,請在 /etc/sysctl.conf 檔案中新增以下內容:

vm.overcommit_memory=1

Windows

Compute Engine Windows 映像檔包含 virtio 氣球裝置。但自訂 Windows 映像檔則否。如要確認 Windows 映像檔是否已安裝驅動程式,請執行下列指令:

googet verify google-compute-engine-driver-balloon

停用 virtio 記憶體氣球裝置

使用 virtio 記憶體氣球裝置,Compute Engine 就能更有效率地運用記憶體資源,因此能以較低的價格提供 E2 VM。 Google Cloud 如要停用 virtio 記憶體氣球裝置,請停用裝置驅動程式。停用 virtio 記憶體氣球裝置後,您仍會收到最適規模建議,但這些建議可能不夠準確。

Linux

如要在 Linux 中停用裝置,請執行下列指令:

sudo rmmod virtio_balloon

您可以將這個指令新增至 VM 的啟動指令碼,在 VM 啟動時自動停用裝置。

Windows

如要在 Windows 上停用裝置,請執行下列指令:

googet -noconfirm remove google-compute-engine-driver-balloon

您可以將這項指令放入 VM 的啟動指令碼,在 VM 啟動時自動停用裝置。

後續步驟