CPU 세트와 함께 사용된 CPU ID 번호 찾기

CPU 세트와 함께 사용된 CPU ID 번호 찾기

그 사람을 위해중앙 처리 유닛어떤 숫자가 어떤 처리 장치에 매핑되는지 알아내는 방법이 명확하게 제시되어 있지 않은 것 같습니다. 내 현재 컴퓨터에는 두 개가 있습니다.인텔 제온 E5645각 코어에는 하이퍼스레딩이 활성화된 6개의 코어가 있으므로 총 24개의 처리 장치가 있으며 이를 참조용으로 cpuset을 사용할 수 있습니다. 내 과제는 1) 어떤 CPUset ID 번호가 어떤 프로세서에 매핑되는지 결정하고 2) 어떤 CPUset ID 번호가 쌍을 이루는지 결정하는 것입니다(예: 코어의 피어).

출력된 숫자가 lscpuCPU 세트 프로세서를 참조하는 데 사용해야 하는 것과 동일한 식별자입니까? 그렇다면 여기의 숫자가 번갈아 나타나는 것 같습니다. (1)에 대한 이 대답은 "짝수는 하나의 프로세서이고 홀수는 또 다른 프로세서입니다"이지만, 제가 올바르게 읽고 있는지 잘 모르겠습니다.

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                24
On-line CPU(s) list:   0-23
Thread(s) per core:    2
Core(s) per socket:    6
Socket(s):             2
NUMA node(s):          2
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 44
Stepping:              2
CPU MHz:               2393.964
BogoMIPS:              4788.01
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              12288K
NUMA node0 CPU(s):     0,2,4,6,8,10,12,14,16,18,20,22
NUMA node1 CPU(s):     1,3,5,7,9,11,13,15,17,19,21,23

lstopohwloc(2)에 대한 대답은 패키지 에 나와 있는 것 같습니다. 매뉴얼 페이지를 올바르게 읽으면 이 P#...비트는 "운영 체제에서 사용되는" 식별자이므로 전달해야 하는 CPU 세트라고 믿게 됩니다. . 따라서 프로세스를 CPU 0과 12로 제한하면 동일한 코어에서 두 개의 스레드를 사용할 수 있고, CPU 0과 2로 제한하면 두 개의 스레드를 서로 다른 두 코어에서 사용할 수 있습니다. 이게 맞는 것 같나요?

$ lstopo
Machine (35GB)
  NUMANode L#0 (P#0 18GB) + Socket L#0 + L3 L#0 (12MB)
    L2 L#0 (256KB) + L1d L#0 (32KB) + L1i L#0 (32KB) + Core L#0
      PU L#0 (P#0)
      PU L#1 (P#12)
    L2 L#1 (256KB) + L1d L#1 (32KB) + L1i L#1 (32KB) + Core L#1
      PU L#2 (P#2)
      PU L#3 (P#14)
    L2 L#2 (256KB) + L1d L#2 (32KB) + L1i L#2 (32KB) + Core L#2
      PU L#4 (P#4)
      PU L#5 (P#16)
    L2 L#3 (256KB) + L1d L#3 (32KB) + L1i L#3 (32KB) + Core L#3
      PU L#6 (P#6)
      PU L#7 (P#18)
    L2 L#4 (256KB) + L1d L#4 (32KB) + L1i L#4 (32KB) + Core L#4
      PU L#8 (P#8)
      PU L#9 (P#20)
    L2 L#5 (256KB) + L1d L#5 (32KB) + L1i L#5 (32KB) + Core L#5
      PU L#10 (P#10)
      PU L#11 (P#22)
  NUMANode L#1 (P#1 18GB) + Socket L#1 + L3 L#1 (12MB)
    L2 L#6 (256KB) + L1d L#6 (32KB) + L1i L#6 (32KB) + Core L#6
      PU L#12 (P#1)
      PU L#13 (P#13)
    L2 L#7 (256KB) + L1d L#7 (32KB) + L1i L#7 (32KB) + Core L#7
      PU L#14 (P#3)
      PU L#15 (P#15)
    L2 L#8 (256KB) + L1d L#8 (32KB) + L1i L#8 (32KB) + Core L#8
      PU L#16 (P#5)
      PU L#17 (P#17)
    L2 L#9 (256KB) + L1d L#9 (32KB) + L1i L#9 (32KB) + Core L#9
      PU L#18 (P#7)
      PU L#19 (P#19)
    L2 L#10 (256KB) + L1d L#10 (32KB) + L1i L#10 (32KB) + Core L#10
      PU L#20 (P#9)
      PU L#21 (P#21)
    L2 L#11 (256KB) + L1d L#11 (32KB) + L1i L#11 (32KB) + Core L#11
      PU L#22 (P#11)
      PU L#23 (P#23)
  HostBridge L#0
    PCIBridge
      PCI 14e4:163a
        Net L#0 "eth0"
      PCI 14e4:163a
        Net L#1 "eth1"
    PCIBridge
      PCI 102b:0532
    PCI 8086:2921
      Block L#2 "sda"
    PCI 8086:2926

답변1

사용

cat /proc/cpuinfo

여기에서 아래에 나열된 각 하이퍼스레드를 얻을 수 있습니다.

processor       : 0
physical id     : 0
core id         : 1

"프로세서"는 "논리 프로세서"를 의미하며 운영 체제에 프로세서로 표시됩니다. 하이퍼스레딩이 켜져 있는 경우 코어당 2개의 "논리 프로세서"가 표시됩니다. "물리적 ID"는 만질 수 있는 프로세서입니다(두 개가 있습니다).

하이퍼스레딩을 사용하는 1 프로세서 4 코어 시스템 목록은 다음과 같습니다.

# cat /proc/cpuinfo|egrep "processor|core id|physical id"
processor       : 0
physical id     : 0
core id         : 0
processor       : 1
physical id     : 0
core id         : 1
processor       : 2
physical id     : 0
core id         : 2
processor       : 3
physical id     : 0
core id         : 3
processor       : 4
physical id     : 0
core id         : 0
processor       : 5
physical id     : 0
core id         : 1
processor       : 6
physical id     : 0
core id         : 2
processor       : 7
physical id     : 0
core id         : 3

답변2

lstopo --cpuset

마스크 형식에 각 논리 프로세서를 포함하기 위해 어떤 CPUset을 사용해야 하는지 알려줄 것입니다.

프로세서 목록 형식으로 변환하여 프로세서 번호가 일치하는지 확인할 수 있습니다.

또는 당신이 나와 같고 게으른 경우 다음과 같은 작업을 수행할 수 있습니다.

taskset 0x00800000 grep -i Cpus_allowed /proc/self/status

다음과 비슷한 출력을 얻게 됩니다.

Cpus_allowed: 000,00800000
Cpus_allowed_list: 23

lstopo --cpuset테스트 머신에서 사용 하면 일치합니다.

PU L#46 (P#23) cpuset=0x00800000

따라서 목록 형식을 사용하여 cpuset을 포맷할 때는 (P#nn)에 있는 숫자를 사용해야 합니다.

관련 정보