命令中的核心编号为0,4,8,.....39 sensors
。
为什么不是0、1、2、3、4……?
foo@foo-linux:~$ sensors
coretemp-isa-0000
Adapter: ISA adapter
Package id 0: +73.0°C (high = +80.0°C, crit = +100.0°C)
Core 0: +46.0°C (high = +80.0°C, crit = +100.0°C)
Core 4: +50.0°C (high = +80.0°C, crit = +100.0°C)
Core 8: +52.0°C (high = +80.0°C, crit = +100.0°C)
Core 12: +47.0°C (high = +80.0°C, crit = +100.0°C)
Core 16: +73.0°C (high = +80.0°C, crit = +100.0°C)
Core 20: +50.0°C (high = +80.0°C, crit = +100.0°C)
Core 24: +58.0°C (high = +80.0°C, crit = +100.0°C)
Core 28: +52.0°C (high = +80.0°C, crit = +100.0°C)
Core 36: +48.0°C (high = +80.0°C, crit = +100.0°C)
Core 37: +48.0°C (high = +80.0°C, crit = +100.0°C)
Core 38: +48.0°C (high = +80.0°C, crit = +100.0°C)
Core 39: +48.0°C (high = +80.0°C, crit = +100.0°C)
再次更新
这是第 12 代英特尔(R) 酷睿(TM) i7-12700
这是一台 PC,不是服务器,只有 1 个 CPU 插槽。
更新
foo@foo-linux:~$ cat /proc/cpuinfo | grep -i apicid
apicid : 0
initial apicid : 0
apicid : 1
initial apicid : 1
apicid : 8
initial apicid : 8
apicid : 9
initial apicid : 9
apicid : 16
initial apicid : 16
apicid : 17
initial apicid : 17
apicid : 24
initial apicid : 24
apicid : 25
initial apicid : 25
apicid : 32
initial apicid : 32
apicid : 33
initial apicid : 33
apicid : 40
initial apicid : 40
apicid : 41
initial apicid : 41
apicid : 48
initial apicid : 48
apicid : 49
initial apicid : 49
apicid : 56
initial apicid : 56
apicid : 57
initial apicid : 57
apicid : 72
initial apicid : 72
apicid : 74
initial apicid : 74
apicid : 76
initial apicid : 76
apicid : 78
initial apicid : 78
答案1
核心编号来自驱动模块中cpu_core_id
的变量。在其源码中是这样描述的:struct temp_data
coretemp
cpu_core_id
* @cpu_core_id: The CPU Core from which temperature values should be read
* This value is passed as "id" field to rdmsr/wrmsr functions.
和rdmsr
是wrmsr
用于读取/写入指定处理器中的特定于模型的寄存器的机器代码指令。该coretemp
模块通过中定义的函数使用这些指令拱门/x86/lib/msr-smp.c。这些函数只是按原样传递 CPU/核心 ID 字段,因此显示的 ID 正是您的主板和 CPU 使用的 ID。
如果您的主板有 4 个 CPU 插槽,其中仅填充了一个插槽,则固件可能已配置为依次为每个插槽分配 ID 号,因此属于空插槽的 ID 不会被使用。但在您的情况下,末尾有四个连续核心 ID 的序列(36 .. 39),因此这可能有所不同。
也许这是一个具有两种类型核心的单个处理器,并且一种类型的核心的编号有间隙(0、4、8 ...),而另一种类型的核心没有间隙(36 .. 39)?
要了解更多信息,有必要确定确切的处理器型号(例如,使用 的输出lscpu | head -14
),然后研究该处理器型号的技术文档,以了解如何在硬件/微码级别分配核心 ID。
如果主板/固件无法规定核心 ID 的分配,那么人们可以猜测 CPU 制造商可能正在规划具有更多第一类型核心的下一代处理器(即部分或完全填充编号中的间隙) 。但这只是猜测,制造商的计划无论如何都可能会改变......
答案2
sensors
这个答案可能不会令您感到惊讶,但是:因为这就是写的方式。
sensors
只是用于sensors_get_detected_chips
遍历所有传感器,而不是通过 CPU 内核。传感器的这些顺序是在相关总线上“检测到的”(因此,主要是 I²C/SMBUS、模拟 ISA),而不是按照 CPU 内核(相对任意)编号的顺序。