Cgroups
查找與 cpu 集一起使用的 CPU id 號
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
lstopo
從hwloc
包中似乎向我展示了(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