어떤 프로세서가 물리적 코어인지 어떻게 알 수 있습니까?


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 )는 바이오스에 의해 주어진 (가상) 프로세서의 수를 보여줍니다.

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/…
Anthony 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

[...]

하이퍼 스레딩을 사용하는 많은 코어 호스트에서 흥미로운 점은 하드웨어에 논리 코어를 분배하는 것입니다.

예를 들어 내 컴퓨터 중 하나 (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.