CPU 与调度60 条

CPU 逻辑核上下线

通过 /sys/devices/system/cpu/cpuN/online 动态启用/关闭逻辑核,用于故障隔离、维护或演练;下线前任务会被迁走。

什么是 CPU 逻辑核上下线

Linux 支持在运行时把逻辑核从调度器中取下或重新加入:把某个核的 online 文件写成 0,内核会先把该核上的任务与中断迁走,再把它从可用 CPU 集合中移除;写回 1 则重新启用。这个机制用于故障隔离、硬件维护演练与在线扩缩容验证。需要注意的是 CPU0 不允许下线,且云主机往往还受固件与管理平台限制。

基本信息

查看在线集合cat /sys/devices/system/cpu/online
下线单核echo 0 > /sys/devices/system/cpu/cpuN/online
上线单核echo 1 > /sys/devices/system/cpu/cpuN/online
限制CPU0 不可下线,需要 root
前提内核启用 CONFIG_HOTPLUG_CPU
观测lscpu 的 CPU(s) online 行、/proc/cpuinfo 条数

典型使用场景

  • 故障隔离:怀疑某个核异常时临时下线观察影响
  • 维护演练:模拟核数变化,验证应用是否会随 CPU 数量变化行为
  • 在线缩容验证:确认服务在核数减少后仍能满足 SLO
  • 排查特定核上的中断与错误计数异常
  • 压测环境构造不同核数场景,做容量基线对比

查看与操作

查看与操作
cat /sys/devices/system/cpu/online        # 形如 0-7
lscpu | grep -i 'On-line'                 # 在线核数
nproc                                     # 当前可用核数
echo 0 | sudo tee /sys/devices/system/cpu/cpu7/online   # 下线 CPU7
echo 1 | sudo tee /sys/devices/system/cpu/cpu7/online   # 重新上线
cat /sys/devices/system/cpu/offline       # 确认下线结果
grep -c processor /proc/cpuinfo           # 与 online 集合互相校验

操作影响对照

动作内核行为需要注意
下线一个核迁移任务与中断到其他核迁移瞬间可能有抖动,避峰操作
批量下线可用算力下降按 SLO 评估,避免线上误操作
重新上线核重新参与调度中断与负载会逐步分布过去
CPU0不允许下线尝试会直接返回错误
该操作不持久,重启后按固件与内核参数恢复;把它当作临时手段,不要作为长期的核数控制方式(长期控制应使用启动参数或调度隔离)。
在承载关键业务的机器上批量下线逻辑核会直接减少可用算力,可能触发延迟升高甚至级联故障;执行前必须评估余量并存留恢复路径。

易错点

  • CPU0 不允许下线;云主机还可能受固件与管理面限制,操作前先确认环境支持范围
  • 下线核会把其上中断与任务迁走,切换瞬间可能有抖动,应避峰操作
  • 在多线程或 NUMA 敏感的应用上改变核数会让线程池与内存分布策略失配,需要重启相关服务才能恢复最佳状态
  • 把临时下线当成长期容量控制手段,重启后一切恢复,容易造成预期与实际不一致

数据来源与参考

  • Linux 内核 Documentation/core-api/cpu_hotplug.rst
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌