标准答案

  1. 绑定 CPU 可以减少跨核迁移、隔离关键工作或配合专用线程,但会缩小可用 CPU,绑定过窄反而造成饥饿。
  2. NUMA 节点的本地内存访问通常延迟更低,CPU 和内存绑定需要一起考虑,否则可能出现计算绑在一处、内存分配在另一处。
  3. 排查应结合线程实际运行、上下文切换、内存访问和 tail latency,而不是只看配置是否存在。
  4. 先用调度、并发、锁和数据布局解决主要问题,再用压测验证亲和性策略。

题目解析

CPU affinity 可以减少任务在 CPU 之间迁移,NUMA 绑定可以让线程和内存尽量位于同一节点,适合低延迟、缓存敏感或经过测量的高吞吐场景。但绑核也会减少调度弹性;如果容器有 CPU quota、cpuset 或线程池配置,应用看到的 CPU 与宿主机总核数可能不同。

NUMA 优化必须同时考虑内存分配、IRQ、设备和线程拓扑,不能只执行 taskset 就宣称性能提升。应比较调优前后的尾延迟、上下文切换、cache miss、内存带宽和 cgroup throttling,并确认故障迁移和滚动发布仍有余量。

常见误区

  • 误区:把 CPU 绑核当成提高 CPU 频率。改正:它只改变调度位置,性能收益要靠实际指标验证。
  • 误区:忽略 NUMA 内存节点、CPU quota 和线程池。改正:先确认拓扑与容器边界,再成组调优并保留迁移余量。

作者信息