センサーから出力される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です。wrmsrこのcoretempモジュールは、次に定義された関数を通してこれらのディレクティブを使用します。アーチ/x86/lib/msr-smp.c。これらの関数は単にCPU /コアIDフィールドをそのまま渡すため、表示されるIDはマザーボードとCPUで使用されるIDです。

マザーボードに4つのCPUソケットがあり、そのうちの1つだけが満たされている場合は、各スロットにID番号を順番に割り当てるようにファームウェアが構成されている可能性があるため、空のスロットに属するIDは使用されません。ただし、お客様の場合、最後に4つの連続したコアIDシーケンス(36 ... 39)があるため、これは異なる場合があります。

たぶん2つのタイプのコアを持つシングルプロセッサであるかもしれませんが、1つのタイプのコア(0、4、8 ...)については数字に違いがありますが、他のタイプのコア(36..39)には違いはありません。かもしれません。

詳細については、正確なプロセッサモデル(使用される出力などlscpu | head -14)を決定し、そのプロセッサモデルに関する技術文書を調べて、ハードウェア/マイクロコードレベルでコアIDが割り当てられる方法を理解する必要があります。

マザーボード/ファームウェアがコアID割り当てを指定できない場合は、CPUメーカーがより多くのタイプ1コアを備えた次世代プロセッサを計画している可能性があると推測できます(つまり、番号付けのスペースを部分的または完全に埋める)。しかし、それは推測だけであり、メーカーの計画はどうせ変わることもありますから…

おすすめ記事