센서에서 출력되는 CPU 코어 수가 불연속적인 이유는 무엇입니까?

센서에서 출력되는 CPU 코어 수가 불연속적인 이유는 무엇입니까?

명령의 핵심 번호는 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세대 Intel(R) Core(TM) i7-12700입니다.

이것은 서버가 아닌 PC이며 CPU 소켓이 1개만 있습니다.

고쳐 쓰다

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_datacoretempcpu_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입니다 . wrmsrcoretemp모듈은 다음에 정의된 함수를 통해 이러한 지시어를 사용합니다.아치/x86/lib/msr-smp.c. 이러한 함수는 단순히 CPU/코어 ID 필드를 있는 그대로 전달하므로 표시되는 ID는 마더보드 및 CPU에서 사용되는 ID입니다.

마더보드에 4개의 CPU 소켓이 있고 그중 하나만 채워져 있는 경우 각 슬롯에 ID 번호를 차례로 할당하도록 펌웨어가 구성되었을 수 있으므로 빈 슬롯에 속한 ID는 사용되지 않습니다. 그러나 귀하의 경우에는 끝에 4개의 연속적인 코어 ID 시퀀스(36 .. 39)가 있으므로 이는 다를 수 있습니다.

어쩌면 두 가지 유형의 코어가 있는 단일 프로세서일 수도 있고, 한 가지 유형의 코어(0, 4, 8...)에 대해서는 숫자에 차이가 있지만 다른 유형의 코어(36..39)에는 차이가 없을 수도 있습니다.

자세히 알아보려면 정확한 프로세서 모델(예: 사용되는 출력 lscpu | head -14)을 결정한 다음 해당 프로세서 모델에 대한 기술 문서를 연구하여 하드웨어/마이크로코드 수준에서 코어 ID가 할당되는 방식을 이해해야 합니다.

마더보드/펌웨어가 코어 ID 할당을 지정할 수 없는 경우 CPU 제조업체가 더 많은 유형 1 코어를 갖춘 차세대 프로세서를 계획하고 있을 수 있다고 추측할 수 있습니다(즉, 번호 지정의 공백을 부분적으로 또는 완전히 메움). 하지만 그건 추측일 뿐이고, 제조사의 계획은 어차피 바뀔 수도 있으니까요...

답변2

sensors그러나 이 대답은 아마도 당신을 놀라게 하지 않을 것입니다. 왜냐하면 그것이 쓰여진 방식이기 때문입니다.

sensorssensors_get_detected_chipsCPU 코어를 거치는 대신 모든 센서를 반복하는 데 사용됩니다 . 이러한 센서 시퀀스는 CPU 코어 수의 (상대적으로 임의적인) 순서가 아닌 관련 버스(주로 I²C/SMBUS, 아날로그 ISA)에서 "감지"됩니다.

관련 정보