「このコンピュータについて」と/cpu/cpuinfoのCPU番号が異なります

「このコンピュータについて」と/cpu/cpuinfoのCPU番号が異なります

質問:

プロセッサの数について 2 つの異なる情報が存在する原因は何でしょうか。以下のレポートを参照してください。

システムダイアログ:

システム設定/詳細タブ (ログアウトホイールやこのコンピューターについてと同じ) を開くと、次のことが報告されます。

プロセッサー: Intel® Xeon(R) CPU E5-2680 v3 @ 2.50GHz × 16


CLI: cpuinfo (1)

それでも、コマンドラインコマンドを使用すると、次のようになります。

$ cat /proc/cpuinfo | grep processor | wc -l
24

私はコマンド ライン レポートを信じる傾向がありますが、その違いの原因は何でしょうか?

参考までに:システムモニターには24コアの統計も表示されます


CLI: cpuinfo (2)

コメントで提案されたように、次のコマンドラインも実行しました

$ cat /proc/cpuinfo |grep 'core id'|sort|uniq|wc -l
12

これで 3 番目の結果も出ました。マシンに 2 つのプロセッサを持つ 12 個のコアがある可能性があるので、これは理にかなっています。しかし、システム ダイアログが 16 をカウントするのはなぜでしょうか。

答え1

CPUコアは対称型マルチプロセッシング(スムム)。

ここに画像の説明を入力してください

インテル Core 2 Duo物理的なレイアウトを示す図。 ここに画像の説明を入力してください


システムの CPU 情報は/procディレクトリに保存されます。ソフトウェアによって以下のようにわかりやすく表示されますlscpu。比較のために、CPU コアが 2 つのデスクトップ、48 個のサーバー、4 個の Raspberry Pi の 3 つの例を示します。

デスクトップコンピューター
ユーザー@ホスト名:~$ lscpu
アーキテクチャ: x86_64
CPU オペレーションモード: 32 ビット、64 ビット
バイトオーダー: リトルエンディアン
CPU: 2
オンラインCPUリスト: 0,1
コアあたりのスレッド数: 1
ソケットあたりのコア数: 2
ソケット: 1
NUMA ノード: 1
ベンダー ID: GenuineIntel
CPUファミリー: 6
モデル: 60
歩数: 3
CPU MHz: 800.000
ボゴMIPS: 5586.94
仮想化: VT-x
L1d キャッシュ: 32K
L1i キャッシュ: 32K
L2キャッシュ: 256K
L3 キャッシュ: 2048K
NUMA ノード0 CPU: 0,1

サーバ
ユーザー@ホスト名% lscpu
アーキテクチャ: x86_64
CPU オペレーションモード: 32 ビット、64 ビット
バイトオーダー: リトルエンディアン
CPU: 48
オンライン CPU リスト: 0-47
コアあたりのスレッド数: 2
ソケットあたりのコア数: 12
ソケット: 2
NUMA ノード: 1
ベンダー ID: GenuineIntel
CPUファミリー: 6
モデル: 62
ステップ数: 4
CPU MHz: 1799.724
ボゴMIPS: 3600.09
仮想化: VT-x
L1d キャッシュ: 32K
L1i キャッシュ: 32K
L2キャッシュ: 256K
L3キャッシュ: 30720K
NUMA ノード0 CPU: 0-47

ラズベリーパイ
ジェフ@clear-pi:~ $ lscpu
アーキテクチャ: armv7l
バイトオーダー: リトルエンディアン
CPU: 4
オンライン CPU リスト: 0-3
コアあたりのスレッド数: 1
ソケットあたりのコア数: 4
ソケット: 1
モデル名: ARMv7 プロセッサ rev 5 (v7l)
CPU 最大 MHz: 900.0000
CPU 最小 MHz: 600.0000

サーバー合計は 48 ですが、そこに到達するには 3 つの数字を掛け合わせる必要があります。2*12*2=48。このように比較するとCPUメーカーの配置の違いが明らかになります。

デスクトップ
[コアあたりのスレッド数: 1] * [ソケットあたりのコア数: 1] * [ソケット数: 1] = 2

サーバ
[コアあたりのスレッド数: 2] * [ソケットあたりのコア数: 12] * [ソケット数: 2] = 48

ラズベリーパイ
[コアあたりのスレッド数: 1] * [ソケットあたりのコア数: 4] * [ソケット数: 1] = 4  

lshwより多くのシステム情報がありますが、ここではそれほど役に立ちません。

デスクトップコンピューター
ユーザー@ホスト名:~$ sudo lshw
     *-CPU
          説明: CPU
          製品: Intel(R) Celeron(R) CPU G1840 @ 2.80GHz
          ベンダー: Intel Corp.
          物理ID: 9
          バス情報: cpu@0
          バージョン: Intel(R) Celeron(R) CPU G1840 @ 2.80GHz
          スロット: ソケット 0
          サイズ: 2800MHz
          容量: 3800MHz
          幅: 64 ビット
          クロック: 100MHz

サーバ
ユーザー@ホスト名% sudo lshw
     *-CPU:0
          説明: CPU
          製品: Intel(R) Xeon(R) CPU E5-2651 v2 @ 1.80GHz
          ベンダー: Intel Corp.
          物理ID: 4
          バス情報: cpu@0
          バージョン: Intel(R) Xeon(R) CPU E5-2651 v2 @ 1.80GHz
          スロット: ソケット 0
          サイズ: 1800MHz
          容量: 4GHz
          幅: 64 ビット
          クロック: 100MHz

ラズベリーパイ
ユーザー@ホスト名:~ $ sudo lshw
*-CPU:0
          説明: CPU
          製品: CPU
          物理ID: 0
          バス情報: cpu@0
          サイズ: 900MHz
          容量: 900MHz
          機能: cpufreq

最後に、この方法は、lscpu が利用できないいくつかの異なる Linux/UNIX オペレーティング システムで機能しました。これは質問とコメントで提案されたもののバリエーションですが、私は短縮コマンドとシンプルな出力を好みます。

user@hostname:~ $ grep -c ^processor /proc/cpuinfo
4

参照:仮想を含む CPU コアの数を確認するにはどうすればよいでしょうか?

参照:https://stackoverflow.com/questions/6481005/linux のコマンドラインから CPU コア数を取得する方法

参照:https://stackoverflow.com/questions/19225859/coreとprocessorの違い

関連情報