热插拔后 CPU 核心仍处于离线状态

热插拔后 CPU 核心仍处于离线状态

当我的 UPS 触发“电池供电”事件时,我希望关闭所有核心以节省电量。这台 PC 在两个芯片上有 8 个核心,由于电流峰值高,UPS 电池需要每 3 个月更换一次。为了减轻我的拥有成本,当 UPS 触发此类事件时,将执行以下指令:

for c in /sys/devices/system/cpu/cpu*/online; do
    echo 0 >$c
done

成功将核心 1 至 7 设置为离线,而核心 0 保持在线,正如预期的那样。然后lscpu确认atop只有 CPU 0 保持在线,并且作为进一步的指示,CPU 温度从 90°C 降至 60°C。

当电网电源恢复时,执行反向命令:

for c in /sys/devices/system/cpu/cpu*/online; do
    echo 1 >$c
done

但核心没有联机。此时,cat /sys/devices/system/cpu/cpu*/online打印1从 0 到 7 的每个 CPU,并lscpu报告所有 CPU 都已恢复联机,但我的所有线程显然继续在核心 0 上独家运行,atop仍然只列出一个核心,系统负载保持在 100% 左右,而不是通常的 800%。此外,CPU 温度保持稳定在 60°C。

异常的是,虽然top以百分比形式列出每个进程的 CPU 使用率,但这些单独的百分比总和约为 100%,而报告的 60 秒平均负载top稳定在 8。


属性:

  • Linux 4.1.1
  • Debian 8
  • LXC 正在积极使用
  • KVM 模块已加载,未处于活动状态
  • CPU 持续加载超过 8 个可运行线程

更新:

我把内核从4.1.1更新到了4.5.4,测试之后发现还是存在同样的问题。

答案1

这是由于 LXC 中与 cgroup 有关的已知错误造成的cpuset。下面介绍了一些解决方法:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=824519

相关内容