Linux找出超线程核心ID

时间:2011-09-01 18:12:32

标签: linux linux-kernel affinity hyperthreading smp

我今天早上试图找出如何确定哪个处理器ID是超线程核心,但没有运气。

我希望找到这些信息并使用set_affinity()将进程绑定到超线程线程或非超线程线程来分析其性能。

6 个答案:

答案 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

lstopo from hwloc (OpenMPI) - output example

或以文本形式:

 ubuntu$ sudo apt-get hwloc-nox
 ubuntu$ lstopo --of console

我们可以将物理核心视为Core L#x,每个核心都有两个逻辑核心PU L#yPU 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核心负载来验证信息。

enter image description here

答案 5 :(得分:1)

在bash中获取CPU内核的超线程同级的简单方法:

cat $(find /sys/devices/system/cpu -regex ".*cpu[0-9]+/topology/thread_siblings_list") | sort -n | uniq