Kubernetes v1.34:為 CPU Manager 靜態策略引入 Uncore 快取對齊選項
Kubernetes v1.32 中引入了一個名為 prefer-align-cpus-by-uncorecache
的新 CPU Manager Static 策略選項,作為 Alpha 特性,並在 Kubernetes v1.34 中進階至 beta 階段。此 CPU Manager 策略選項旨在最佳化在具有 split uncore cache(分裂非核心快取) 架構的處理器上執行的特定工作負載的效能。在本文中,我將解釋這意味著什麼以及它為何有用。
瞭解此特性
什麼是 uncore cache?
直到最近,幾乎所有主流計算機處理器都具有一個在多個 CPU 封裝中所有核心共享的單片(monolithic)末級快取。這種單片快取也稱為 uncore cache(因為它不與特定核心相關聯),或 L3 快取。除了 L3 快取外,還有其他快取,通常稱為 L1 和 L2 快取,它們 是 與特定 CPU 核心關聯的。
為了減少 CPU 核心與其快取之間的訪問延遲,近期的 AMD64 和 ARM 架構處理器引入了 split uncore cache(分裂非核心快取) 架構,其中末級快取被分為多個物理快取,這些快取與物理封裝內的特定 CPU 分組對齊。CPU 封裝內較短的距離有助於減少延遲。
Kubernetes 能夠以考慮 CPU 封裝內快取拓撲的方式來放置工作負載。
感知快取的工作負載放置
下面的矩陣顯示了在使用分裂非核心快取的處理器上,透過其快取一致性協議在 CPU 之間傳遞資料包時測量的 CPU-to-CPU 延遲(以納秒為單位,越低越好)。在此示例中,處理器封裝包含 2 個非核心快取。每個非核心快取服務 8 個 CPU 核心。 矩陣中的藍色條目表示共享相同非核心快取的 CPU 之間的延遲,而灰色條目表示對應於不同非核心快取的 CPU 之間的延遲。對應於不同快取的 CPU 之間的延遲高於屬於同一快取的 CPU 之間的延遲。
啟用 prefer-align-cpus-by-uncorecache
後,靜態 CPU Manager 會嘗試為容器分配 CPU 資源,使得分配給一個容器的所有 CPU 共享相同的非核心快取。此策略以盡力而為的方式執行,旨在根據容器的需求,並考慮到節點上的可分配資源,最大限度地減少容器的 CPU 資源在不同非核心快取間的分佈。
透過在一組使用盡可能少的非核心快取的 CPU 上執行工作負載,應用程式可以從減少的快取延遲(如上矩陣所示)和減少與其他工作負載的爭用中受益,從而實現更高的總體吞吐量。只有當你的節點處理器使用分裂非核心快取拓撲時,這種好處才會顯現。
下圖說明了啟用該功能時的非核心快取對齊情況。
預設情況下,Kubernetes 不考慮非核心快取拓撲;容器使用密集打包(packed)的方法分配 CPU 資源。因此,容器 1 和容器 2 可能會因非核心快取 0 上的快取訪問爭用而遭受“吵鬧鄰居”的影響。此外,容器 2 的 CPU 將分佈在兩個快取上,這可能引入跨快取的延遲。
啟用 prefer-align-cpus-by-uncorecache
後,每個容器都被隔離在單個快取上。這解決了容器之間的快取爭用,並最大限度地減少了所用 CPU 的快取延遲。
使用場景
常見用例可以包括電信應用,如 vRAN、移動分組核心和防火牆。需要注意的是,prefer-align-cpus-by-uncorecache
提供的最佳化可能依賴於具體的工作負載。例如,受記憶體頻寬限制的應用程式可能無法從非核心快取對齊中受益,因為使用更多的非核心快取可以增加記憶體頻寬訪問。
啟用該特性
要啟用此功能,請將 CPU Manager 策略設定為 static
,並使用 prefer-align-cpus-by-uncorecache
啟用 CPU Manager 策略選項。
對於 Kubernetes 1.34,該功能處於 Beta 階段,還需要啟用 CPUManagerPolicyBetaOptions
特性門控。
將以下內容附加到 kubelet 配置檔案中
kind: KubeletConfiguration
apiVersion: kubelet.config.k8s.io/v1beta1
featureGates:
...
CPUManagerPolicyBetaOptions: true
cpuManagerPolicy: "static"
cpuManagerPolicyOptions:
prefer-align-cpus-by-uncorecache: "true"
reservedSystemCPUs: "0"
...
如果你在現有節點上進行此更改,請刪除 cpu_manager_state
檔案,然後重啟 kubelet。
prefer-align-cpus-by-uncorecache
可以在具有單片非核心快取處理器的節點上啟用。該功能將模擬盡力而為的插槽對齊效果,並將像預設的靜態 CPU Manager 策略一樣在插槽上密集打包 CPU 資源。
進一步閱讀
請參閱節點資源管理器以瞭解有關 CPU Manager 和可用策略的更多資訊。
在此處引用 prefer-align-cpus-by-uncorecache
的文件。
有關 prefer-align-cpus-by-uncorecache
如何實現的更多資訊,請參閱 Kubernetes 增強提案。
參與進來
此功能由 SIG Node 推動。如果你有興趣幫助開發此功能、分享反饋或參與任何其他正在進行的 SIG Node 專案,請參加 SIG Node 會議以獲取更多詳細資訊。