Cgroups

查找與 cpu 集一起使用的 CPU id 號

  • November 16, 2018

cpuset的人似乎沒有清楚地列出如何確定哪些數字映射到哪些處理單元。我目前的機器有兩台Intel Xeon E5645,每台都有 6 個核心並啟用了超執行緒,所以我總共有 24 個處理單元可以參考 cpuset。我的挑戰是 1)確定哪些 cpuset ID 號映射到哪個處理器 2)確定哪些 cpuset id 號是配對的(例如核心上的兄弟姐妹)

輸出相同標識符的數字是否lscpu應該用於指代 CPU 集處理器?如果是這樣,這裡的數字似乎是交替的,這個答案 (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集。因此,將程序限制為 cpus 0 和 12 將允許在同一核心上使用兩個執行緒,而將其限制為 cpus 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

採用

cat /proc/cpuinfo

在那裡你會得到像這樣列出的每個超執行緒:

processor       : 0
physical id     : 0
core id         : 1

“處理器”代表“邏輯處理器”,即作為處理器呈現給作業系統的東西。如果您打開了超執行緒,您將看到每個核心有兩個“邏輯處理器”。“物理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

引用自:https://unix.stackexchange.com/questions/165374