新一代動態資源管理


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

下一代動態資源管理功能也具有更好的 NUMA 親和性,可更準確地預測資源需求,並使用效能感知即時遷移功能加快重新平衡。

動態資源管理的運作方式

虛擬 CPU (vCPU) 是以執行緒的形式實作,並排定隨選執行作業,就像主機上的任何其他執行緒一樣。當 vCPU 有工作要執行時,系統會將工作指派給可用的實體 CPU,並在該 CPU 上執行,直到該 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 系列。

Virtio 記憶體氣球裝置與 E2 VM

記憶體膨脹是主機和客機之間的介面機制,可動態調整客機的保留記憶體大小。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

在 5.2 之前的 Linux kernel 中,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 啟動時自動停用裝置。

後續步驟