【Linux】判斷系統當前是否開啓了超線程

在判斷當前是否開啓了超線程之前,需要先判斷另外幾個數據:
1,物理CPU個數:

1
2
3
[root@localhost ~]# cat /proc/cpuinfo | grep "physical id" | sort | uniq
physical id : 0
physical id : 1

可以看到物理CPU個數爲2,物理CPU也就是機器外面就能看到的一個個CPU,每個物理CPU還帶有單獨的風扇。
2,每個物理CPU的邏輯核數:

1
2
[root@localhost ~]# cat /proc/cpuinfo | grep "cores" | uniq
cpu cores   : 6

3,系統整個cpu線程數:

1
2
[root@localhost ~]# cat /proc/cpuinfo | grep "processor" | wc -l
24

有了三面幾個數據,就可以判斷當前是否開啓了超線程了,沒開啓超線程的情況下,系統的cpu線程數=物理CPU個數*每個物理CPU的邏輯核數*1,因爲每個邏輯核只跑了1個cpu線程,如果開啓了超線程,那麼cpu線程數=物理CPU個數*每個物理CPU的邏輯核數*2,因爲每個邏輯核跑了2個cpu線程。所以,上面的24=2*6*2,可以判斷當前開啓了超線程。

1
2
3
[root@localhost ~]# cat /proc/cpuinfo | grep "model name" | uniq
model name  : Intel(R) Xeon(R) CPU           X5670  @ 2.93GHz
[root@localhost ~]#

這是一臺X5670機器,從Intel的cpuX5670規格頁面(http://ark.intel.com/products/47920/Intel-Xeon-Processor-X5670-%2812M-Cache-2_93-GHz-6_40-GTs-Intel-QPI%29)可以看到,其的確支持Intel® Hyper-Threading Technology。再看另外一個:

1
2
3
4
5
6
7
8
9
10
[root@localhost ~]# cat /proc/cpuinfo | grep "physical id" | sort | uniq
physical id : 0
physical id : 1
[root@localhost ~]# cat /proc/cpuinfo | grep "cores" | uniq
cpu cores   : 4
[root@localhost ~]# cat /proc/cpuinfo | grep "processor" | wc -l
8
[root@localhost ~]# cat /proc/cpuinfo | grep "model name" | uniq
model name  : Intel(R) Xeon(R) CPU           E5504  @ 2.00GHz
[root@localhost ~]#

8=2*4,沒有開啓超線程,從Intel的cpuE5504規格頁面(http://ark.intel.com/products/40711/Intel-Xeon-Processor-E5504-%284M-Cache-2_00-GHz-4_80-GTs-Intel-QPI%29)可以看到,其不支持Intel® Hyper-Threading Technology,想開啓都沒法。
另外,根據physical id信息可以判斷哪些邏輯核在同一個物理核上,因爲同一物理核上的邏輯核的physical id相等;而根據core id信息又可以判斷哪兩個cpu線程跑在同一個邏輯核上,因爲跑在同一邏輯核上的cpu線程的core id相等,但是,由於不同物理核上的邏輯核core id可以相等,所以在進行第二個判斷(即哪兩個cpu線程跑在同一個邏輯核上)前需要先進行第一個判斷(即哪些邏輯核在同一個物理核上)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章