どのプロセッサが物理コアであるかを知るにはどうすればよいですか?


15

ここにIntel i7 2700kがあります。どのプロセッサが物理的で、どのプロセッサが仮想であるか(ハイパースレッディングなど)を確認する方法を知りたいです。現在、CPUの温度、周波数、および負荷を表示するためにConkyスクリプトを実行していますが、正しく実行したかどうかはわかりません。

驚くばかり

から温度と周波数を取得する独自のスクリプトを作成しましたi7zが、これらは物理コアにのみ対応しています。現在、各コアを次のように表示しています。

${cpu cpu1} ${lua display_temp 0} ${lua display_load 0}
${cpu cpu2}
${cpu cpu3} ${lua display_temp 1} ${lua display_load 1}
${cpu cpu4}
# ...

負荷と温度が時々見られるため、これが正しいかどうかはわかりません。では/proc/cpuinfo、コアはどのようにソートされますか?最初はすべて物理、次にすべて仮想ですか?各物理コアは、その仮想コアですか?それらはどのようにソートされますか?

回答:


16

各cpuinfoエントリを調べることにより、各プロセッサコアについて知ることができます。

processor       : 0
[...]
physical id     : 0
siblings        : 8
core id         : 0
cpu cores       : 4
apicid          : 0

processor       : 1
[...]
physical id     : 0
siblings        : 8
core id         : 1
cpu cores       : 4
apicid          : 2 

processor       : 2
[...]
physical id     : 0
siblings        : 8
core id         : 2
cpu cores       : 4
apicid          : 4 

processor       : 3
[...]
physical id     : 0
siblings        : 8
core id         : 3
cpu cores       : 4
apicid          : 6

processor       : 4
[...]
physical id     : 0
siblings        : 8
core id         : 0
cpu cores       : 4
apicid          : 1

[and so on]

physical idプロセッサの識別子を示します。マルチプロセッサセットアップ(マシンに2つの個別の物理プロセッサがある)がない限り、常に0になります。

siblings 同じ物理プロセッサに接続されているプロセッサの数を表示します。

core id合計で、現在のコアの識別子を表示しますcpu cores。この情報を使用して、どの仮想プロセッサがシングルコアに入るかを関連付けることができます。

apicid(およびoriginal apicid)BIOSで指定された(仮想)プロセッサの番号を示します。

8つの兄弟と4つのコアがあるため、コアごとに2つの仮想プロセッサがあることに注意してください。ハイパースレッディングでは、「仮想」と「本物」の区別はありません。ただし、この情報を使用して、同じコアのプロセッサを関連付けることができます。


5

/sysファイルシステムはこの情報の素敵な概観を保持しています。ハイパースレッディングを使用したSMPクアッドコアボックスの例を次に示します。

# grep . /sys/devices/system/cpu/cpu{,1}?/topology/thread_siblings | tr : \\t | sed 's,^,    ,'
/sys/devices/system/cpu/cpu0/topology/thread_siblings   00000000,00000101
/sys/devices/system/cpu/cpu1/topology/thread_siblings   00000000,00000202
/sys/devices/system/cpu/cpu2/topology/thread_siblings   00000000,00000404
/sys/devices/system/cpu/cpu3/topology/thread_siblings   00000000,00000808
/sys/devices/system/cpu/cpu4/topology/thread_siblings   00000000,00001010
/sys/devices/system/cpu/cpu5/topology/thread_siblings   00000000,00002020
/sys/devices/system/cpu/cpu6/topology/thread_siblings   00000000,00004040
/sys/devices/system/cpu/cpu7/topology/thread_siblings   00000000,00008080
/sys/devices/system/cpu/cpu8/topology/thread_siblings   00000000,00000101
/sys/devices/system/cpu/cpu9/topology/thread_siblings   00000000,00000202
/sys/devices/system/cpu/cpu10/topology/thread_siblings  00000000,00000404
/sys/devices/system/cpu/cpu11/topology/thread_siblings  00000000,00000808
/sys/devices/system/cpu/cpu12/topology/thread_siblings  00000000,00001010
/sys/devices/system/cpu/cpu13/topology/thread_siblings  00000000,00002020
/sys/devices/system/cpu/cpu14/topology/thread_siblings  00000000,00004040
/sys/devices/system/cpu/cpu15/topology/thread_siblings  00000000,00008080

同一のコンテンツは、同じコアのスレッドを示します。すなわち

  • cpu0 / cpu8
  • cpu1 / cpu9

core_siblings疑似ファイルには、さらに多くのトポロジ情報とともに同様の情報があります。


3

' ht'フラグが表示され/proc/cpuinfoている場合、ハイパースレッディングが有効になっており、各実コアが複数のスレッドに分割されているため、実スレッドと仮想スレッドの概念はありません。両方とも事実上仮想です。

調査したいのは、コアとソケットを比較するphysical idことです。' 'トポロジ識別子を使用してコアをグループ化します。


このhtフラグは、マルチスレッド(HTT)がCPUでサポートされていることを示すだけです。有効になっているかどうかではありません。それでも、それは常に例えば、頼ることができない、それが誤って示しているのi5 i5-6500サポートHTT:ark.intel.com/content/www/us/en/ark/products/88184/...
アンソニー・G -モニカのための正義

1

前の答えは非常に興味深いです。

いくつかのグーグルの後、いくつかの関連する主題を見つけました。

最後のリンクでは、ホストに多くの物理IDがある場合、pythonスクリプトは機能しません。最後に別の条件で変更しようとしました:

変化:

if p > 0:

if p % 2 == 1:

ただし、前のメッセージに基づいて、期待どおりに機能しません。ところで、次のことよりも包括的なことができます。

grep . /sys/devices/system/cpu/cpu{,1}?/topology/thread_siblings | tr : \\\t | sed -r 's,^,\s\s\s\s,'

で:

for file in /sys/devices/system/cpu/cpu[0-9]*/topology/thread_siblings_list; do echo -n "$file "; cat $file; done |sort -k2 -n

[...]

ハイパースレッディング対応の多くのコアホストで興味深いのは、ハードウェア上の論理コアの配布です。

たとえば、私のコンピューターの1つ(48の論理コア、2つの物理プロセッサー、24(12 * 2)の「実コア」(つまり、24の仮想コア)):

for file in /sys/devices/system/cpu/cpu[0-9]*/topology/thread_siblings_list; do echo -n "$file "; cat $file; done |sort -k2 -n

 /sys/devices/system/cpu/cpu0/topology/thread_siblings_list 0,24
 /sys/devices/system/cpu/cpu24/topology/thread_siblings_list 0,24
 /sys/devices/system/cpu/cpu1/topology/thread_siblings_list 1,25
 /sys/devices/system/cpu/cpu25/topology/thread_siblings_list 1,25
 /sys/devices/system/cpu/cpu26/topology/thread_siblings_list 2,26
 /sys/devices/system/cpu/cpu2/topology/thread_siblings_list 2,26
 /sys/devices/system/cpu/cpu27/topology/thread_siblings_list 3,27
 /sys/devices/system/cpu/cpu3/topology/thread_siblings_list 3,27
 /sys/devices/system/cpu/cpu28/topology/thread_siblings_list 4,28
 /sys/devices/system/cpu/cpu4/topology/thread_siblings_list 4,28
 /sys/devices/system/cpu/cpu29/topology/thread_siblings_list 5,29
 /sys/devices/system/cpu/cpu5/topology/thread_siblings_list 5,29
 /sys/devices/system/cpu/cpu30/topology/thread_siblings_list 6,30
 /sys/devices/system/cpu/cpu6/topology/thread_siblings_list 6,30
 /sys/devices/system/cpu/cpu31/topology/thread_siblings_list 7,31
 /sys/devices/system/cpu/cpu7/topology/thread_siblings_list 7,31
 /sys/devices/system/cpu/cpu32/topology/thread_siblings_list 8,32
 /sys/devices/system/cpu/cpu8/topology/thread_siblings_list 8,32
 /sys/devices/system/cpu/cpu33/topology/thread_siblings_list 9,33
 /sys/devices/system/cpu/cpu9/topology/thread_siblings_list 9,33
 /sys/devices/system/cpu/cpu10/topology/thread_siblings_list 10,34
 /sys/devices/system/cpu/cpu34/topology/thread_siblings_list 10,34
 /sys/devices/system/cpu/cpu11/topology/thread_siblings_list 11,35
 /sys/devices/system/cpu/cpu35/topology/thread_siblings_list 11,35
 /sys/devices/system/cpu/cpu12/topology/thread_siblings_list 12,36
 /sys/devices/system/cpu/cpu36/topology/thread_siblings_list 12,36
 /sys/devices/system/cpu/cpu13/topology/thread_siblings_list 13,37
 /sys/devices/system/cpu/cpu37/topology/thread_siblings_list 13,37
 /sys/devices/system/cpu/cpu14/topology/thread_siblings_list 14,38
 /sys/devices/system/cpu/cpu38/topology/thread_siblings_list 14,38
 /sys/devices/system/cpu/cpu15/topology/thread_siblings_list 15,39
 /sys/devices/system/cpu/cpu39/topology/thread_siblings_list 15,39
 /sys/devices/system/cpu/cpu16/topology/thread_siblings_list 16,40
 /sys/devices/system/cpu/cpu40/topology/thread_siblings_list 16,40
 /sys/devices/system/cpu/cpu17/topology/thread_siblings_list 17,41
 /sys/devices/system/cpu/cpu41/topology/thread_siblings_list 17,41
 /sys/devices/system/cpu/cpu18/topology/thread_siblings_list 18,42
 /sys/devices/system/cpu/cpu42/topology/thread_siblings_list 18,42
 /sys/devices/system/cpu/cpu19/topology/thread_siblings_list 19,43
 /sys/devices/system/cpu/cpu43/topology/thread_siblings_list 19,43
 /sys/devices/system/cpu/cpu20/topology/thread_siblings_list 20,44
 /sys/devices/system/cpu/cpu44/topology/thread_siblings_list 20,44
 /sys/devices/system/cpu/cpu21/topology/thread_siblings_list 21,45
 /sys/devices/system/cpu/cpu45/topology/thread_siblings_list 21,45
 /sys/devices/system/cpu/cpu22/topology/thread_siblings_list 22,46
 /sys/devices/system/cpu/cpu46/topology/thread_siblings_list 22,46
 /sys/devices/system/cpu/cpu23/topology/thread_siblings_list 23,47
 /sys/devices/system/cpu/cpu47/topology/thread_siblings_list 23,47

これは、cpu0とcpu24が同じ物理ハードウェア「アドレス」を共有することを意味します。cpu1とcpu25についても同じこと...

したがって、基本的に、Linux OSからハイパースレッディングを無効にするには、cpu {24..47} / onlineに「0」を入力する必要があります。

for fake_cpu in {24..47}; do echo 0 > /sys/devices/system/cpu/cpu$fake_cpu/online;done

私のシステムがコアに番号を付けているのがおもしろいでしょう。


端末上のものには引用符ではなくコードブロックを使用してください。読むのがはるかに簡単です。
-HalosGhost

1

lscpuも使用できます。

# lscpu --all --extended
CPU NODE SOCKET CORE L1d:L1i:L2:L3:L4 ONLINE MAXMHZ    MINMHZ
0   0    0      0    0:0:0:0:0        yes    3200.0000 800.0000
1   0    0      1    1:1:1:0:0        yes    3200.0000 800.0000
2   0    0      2    2:2:2:0:0        yes    3200.0000 800.0000
3   0    0      3    3:3:3:0:0        yes    3200.0000 800.0000
4   0    0      0    0:0:0:0:0        yes    3200.0000 800.0000
5   0    0      1    1:1:1:0:0        yes    3200.0000 800.0000
6   0    0      2    2:2:2:0:0        yes    3200.0000 800.0000
7   0    0      3    3:3:3:0:0        yes    3200.0000 800.0000

ここで論理コア0および4はコア0に移動します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.