我们在一台服务器上看到一种奇怪的现象,其中/proc/cpuinfo
“cpu 核心”字段经常发出不同的值。 /proc/cpuinfo
正确地说有 8 个 cpu(1 个物理 x 4 个核心 x 2 个超线程),但是 cpu-cores 字段可以是 4(正确)或 65531、65528,...(不太正确)。报告错误数字的似乎是相同的虚拟 CPU。
我们为什么关心?好吧,我们的第 3 方库之一正在使用指纹来/proc/cpuinfo
进行许可,因此会产生故障,因为核心数量正在发生变化。
- 有没有人见过这个?
- 知道这是硬件还是操作系统错误吗?
- 关于如何诊断和解决问题有什么建议吗?
感谢您提供任何信息。
以下是 的输出示例/proc/cpuinfo
:
cpu cores : 4
cpu cores : 20
cpu cores : 20
cpu cores : 20
cpu cores : 4
cpu cores : 4
cpu cores : 4
cpu cores : 65528
答案1
尽管我们没有掌握所有信息,但目前这看起来像是一个 Linux 内核错误。这是在 github 上提交这似乎是为了解决这个问题而做出的。标签似乎表明此修复位于 4.16.X 内核中。这是提交的评论:
如果没有此修复,
/proc/cpuinfo
在使 CPU 内核脱机并再次联机后,将显示不正确的 CPU 内核数量,如下例所示...此补丁通过在关闭逻辑 CPU 时始终将 booted_cores 变量归零来修复此问题。
这看起来是由于盒子有时会休眠,尽管我们也担心“涡轮增压”功能也会禁用核心。我们现在正在关闭睡眠和休眠模式,这可能会解决这个问题,因为升级内核对我们来说不是一个容易的选择。
到目前为止我们已经尝试过以下 grub 设置哪个没有似乎有效,或者至少它没有阻止计算机休眠并出现此问题。
intel_idle.max_cstate=0
processor.max_cstate=1
我们还发现此页面有关禁用涡轮增压。