我今天早上试图找出如何确定哪个处理器ID是超线程核心,但没有运气。
我希望找到这些信息并使用set_affinity()
将进程绑定到超线程线程或非超线程线程来分析其性能。
答案 0 :(得分:29)
我发现了做我需要的简单技巧。
cat /sys/devices/system/cpu/cpu0/topology/thread_siblings_list
如果第一个数字等于CPU数量(本例中为0)那么它就是一个真正的核心,如果不是超线程核心。
真正的核心示例:
# cat /sys/devices/system/cpu/cpu1/topology/thread_siblings_list
1,13
超线程核心示例
# cat /sys/devices/system/cpu/cpu13/topology/thread_siblings_list
1,13
第二个示例的输出与第一个示例的输出完全相同。但是我们正在检查cpu13
,第一个数字是1
,因此CPU 13这是一个超线程核心。
答案 1 :(得分:11)
答案 2 :(得分:6)
我很惊讶没人提到lscpu
。以下是具有四个物理内核和超线程的单插槽系统的示例:
$ lscpu -p
# The following is the parsable format, which can be fed to other
# programs. Each different item in every column has an unique ID
# starting from zero.
# CPU,Core,Socket,Node,,L1d,L1i,L2,L3
0,0,0,0,,0,0,0,0
1,1,0,0,,1,1,1,0
2,2,0,0,,2,2,2,0
3,3,0,0,,3,3,3,0
4,0,0,0,,0,0,0,0
5,1,0,0,,1,1,1,0
6,2,0,0,,2,2,2,0
7,3,0,0,,3,3,3,0
输出解释了如何解释ID表;具有相同Core ID的逻辑CPU ID是兄弟姐妹。
答案 3 :(得分:2)
OpenMPI项目有通用(Linux / Windows)和便携式硬件拓扑检测器(核心,HT,cacahes,南桥和磁盘/网络连接位置) - hwloc
。您可以使用它,因为linux可能使用不同的HT核心编号规则,我们无法知道它是偶数/奇数还是y和y + 8 nubering规则。
hwloc的主页: http://www.open-mpi.org/projects/hwloc/
下载页面: http://www.open-mpi.org/software/hwloc/v1.10/
说明
Portable Hardware Locality(hwloc)软件包提供现代体系结构的分层拓扑的可移植抽象(跨操作系统,版本,体系结构......),包括NUMA内存节点,套接字,共享缓存,内核和同步多线程。它还收集各种系统属性,如缓存和内存信息,以及I / O设备的位置,如网络接口,InfiniBand HCA或GPU。它主要旨在帮助应用程序收集有关现代计算硬件的信息,以便相应有效地利用它。
它有lstopo
命令以图形形式获取hw拓扑,如
ubuntu$ sudo apt-get hwloc
ubuntu$ lstopo
或以文本形式:
ubuntu$ sudo apt-get hwloc-nox
ubuntu$ lstopo --of console
我们可以将物理核心视为Core L#x
,每个核心都有两个逻辑核心PU L#y
和PU L#y+8
。
Machine (16GB)
Socket L#0 + L3 L#0 (4096KB)
L2 L#0 (1024KB) + L1 L#0 (16KB) + Core L#0
PU L#0 (P#0)
PU L#1 (P#8)
L2 L#1 (1024KB) + L1 L#1 (16KB) + Core L#1
PU L#2 (P#4)
PU L#3 (P#12)
Socket L#1 + L3 L#1 (4096KB)
L2 L#2 (1024KB) + L1 L#2 (16KB) + Core L#2
PU L#4 (P#1)
PU L#5 (P#9)
L2 L#3 (1024KB) + L1 L#3 (16KB) + Core L#3
PU L#6 (P#5)
PU L#7 (P#13)
Socket L#2 + L3 L#2 (4096KB)
L2 L#4 (1024KB) + L1 L#4 (16KB) + Core L#4
PU L#8 (P#2)
PU L#9 (P#10)
L2 L#5 (1024KB) + L1 L#5 (16KB) + Core L#5
PU L#10 (P#6)
PU L#11 (P#14)
Socket L#3 + L3 L#3 (4096KB)
L2 L#6 (1024KB) + L1 L#6 (16KB) + Core L#6
PU L#12 (P#3)
PU L#13 (P#11)
L2 L#7 (1024KB) + L1 L#7 (16KB) + Core L#7
PU L#14 (P#7)
PU L#15 (P#15)
答案 4 :(得分:1)
我试图通过比较核心温度和HT核心负载来验证信息。
答案 5 :(得分:1)
在bash中获取CPU内核的超线程同级的简单方法:
cat $(find /sys/devices/system/cpu -regex ".*cpu[0-9]+/topology/thread_siblings_list") | sort -n | uniq