混合核心分配:从超分配到可靠共享
Uber 的有状态容器编排系统 Odin 引入"混合核心分配":工作负载同时获得专用(reserved)核心和共享核心, 共享核心按主机池化超分配,并用 Linux cpu.shares 做公平竞争。 关键工程细节: • cpu.shares 公式:round((dedicated + shared_for_contention) × 100),例 2 专 + 0.5 共 = 250;实验表明严重竞争下实际份额会明显偏离设定,与 SoCC'21 的 rkube 结论一致。 • NUMA 观察:内核默认会把进程调度到内存所在 socket 的 CPU,cgroup 约束下也成立,但共享库会打乱;内存分配优先就近,自动 NUMA 平衡可迁移页。 策略是专用核放在同一 NUMA node,共享池跨 node 铺开。 • 同机 in-place 垂直扩缩:有状态工作负载跑在本地盘上,换机代价高,所以直接在原主机上调 CPU 配额,部分场景仍需重启但不需迁移。 • 垂直 scaler 用专用核平均用量定基线、共享核用量偏离定弹性;共享总池通常大于物理可用,靠 cpu.shares 按比例分。 • 对齐 K8s:把 cgroups 管理拆成独立库并封装为 CRI 插件,弥补 K8s 没有混合核心调度的缺口。 作者坦承局限:分配决策仍在 host 级,未来可上移到全局调度器;长期运行会产生核心碎片化,需要周期 defrag。 





