物理核還是邏輯核
在 Kubernetes(k8s)編排文件(如 Pod 或 Deployment 的 YAML 文件)中設置的 CPU 核數,針對的是邏輯核數(Logical Cores),而非物理核數(Physical Cores)。
這種抽象設計是為了屏蔽底層硬件差異,避免因硬件差異(如高頻 3GHz 核 vs 低頻 2GHz 核)導致調度偏差,確保資源配額在不同節點上是一致的。比如:requests.cpu: "1000m"
的 Pod,在 3GHz 和 2GHz 節點上均獲得“相當于 1 個標準核”的算力承諾。
算力稀釋
在開啟超線程的物理核上,2 個邏輯核共享 1 個物理核的資源(如緩存、執行單元)。
因此 1000m
的 cpu,可能只用到了 ??半個物理核的資源??。
性能影響與配置建議
-
高頻 CPU 的“吃虧”
3GHz 物理核的 1000m 實際算力 > 2GHz 物理核的 1000m,但 Kubernetes 視作等同。若無顯式調度策略干預,Kubernetes 不會自動將 1000m 優先分配到高頻 CPU 節點。
建議:敏感業務通過節點親和性
nodeAffinity
綁定高頻節點。 -
超線程的資源爭用
若同一物理核上的兩個邏輯核均滿載,實際性能可能低于預期。
建議:
- 對 IO 密集型服務:禁用超線程 +
cpuManagerPolicy: static
綁定物理核 - 對 計算密集型服務:啟用超線程 + 適當提高
limits.cpu
(如 1500m)補償爭用損耗
- 對 IO 密集型服務:禁用超線程 +