物理核还是逻辑核
在 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 密集型服务:禁用超线程 +