यह जाँचना कि क्या हाइपरथ्रेडिंग सक्षम है या नहीं?


51

मैं कैसे जांच कर सकता हूं कि क्या हाइपरथ्रेडिंग लिनक्स मशीन पर सक्षम है, इसकी जांच के लिए एक पर्ल स्क्रिप्ट का उपयोग कर रहा है?

मैं निम्नलिखित तरीके से कोशिश कर रहा हूँ:

dmidecode -t processor | grep HTT

मुझे पता है कि क्या मैं सही रास्ते पर हूँ।


2
के लिए dmidecodeआप रूट होना है।
निल्स

5
मुझे पसंद है कि कैसे हर किसी ने "पर्ल स्क्रिप्ट" को नजरअंदाज कर दिया ;-)
सैमबी

यह स्वीकृत उत्तर होना चाहिए: unix.stackexchange.com/a/522295/1131
maxschlepzig

जवाबों:


27

8 जुलाई, 2014 को जोड़े गए नोट्स: जैसा कि रिकार्डो मुर्री ने बताया, नीचे दिए गए मेरे जवाब से ही पता चलता है कि प्रोसेसर हाइपरथ्रेडिंग का समर्थन करने की रिपोर्ट करता है या नहीं। आम तौर पर, * निक्स ओ / एस को हाइपरथ्रेडिंग को सक्षम करने के लिए कॉन्फ़िगर किया गया है। हालाँकि, वास्तव में इस प्रोग्राम को जाँचने के लिए देखें उदाहरण के लिए निल्स का जवाब !

---- 25 मार्च 2012 से मूल उत्तर:

आप वास्तव में सही रास्ते पर हैं :) के साथ

dmidecode -t processor | grep HTT

लिनक्स पर, मैं आमतौर पर "ध्वज" लाइन पर "ht" की तलाश करता हूं /proc/cpuinfo। उदाहरण के लिए देखें

grep '^flags\b' /proc/cpuinfo | tail -1

या यदि आप पैटर्न में "ht" को शामिल करना चाहते हैं

grep -o '^flags\b.*: .*\bht\b' /proc/cpuinfo | tail -1

( \bशब्द सीमाओं से मेल खाता है और उन मामलों में झूठी सकारात्मकता से बचने में मदद करता है जहां "ht" दूसरे ध्वज का हिस्सा है।)


19
यह केवल आपको बताएगा कि क्या प्रोसेसर एचटी सक्षम है, न कि अगर एचटी वास्तव में उपयोग किया जा रहा है।
Riccardo Murri

3
HTT फ़ील्ड इंगित नहीं करता है कि प्रोसेसर वास्तव में अपने कोर में हाइपरथ्रेडिंग कर रहा है। 'भाई-बहन' और 'सीपीयू कोर' का मूल्य / खरीद / सीपीयूएफओ में देखें
सिल्वर मून

@ रजत-चंद्रमा क्या आप खोज सकते हैं? dmidecode SMBIOS को पढ़ता है और प्रोसेसर की क्षमताओं को बताना चाहिए। यह नहीं बताता है कि ओ / एस द्वारा हाइपर-थ्रेडिंग को देखा जाता है या उपयोग किया जाता है। लेकिन इस पर पहले ही टिप्पणी की जा चुकी है। निल्स जवाब
xebeche

1
@xebeche मेरे सिस्टम dmidecode आउटपुट पर "HTT (मल्टी-थ्रेडिंग)" दिखाता है, लेकिन मेरा प्रोसेसर "कोर 2 क्वाड Q8400" है जिसमें हाइपरथ्रेडिंग नहीं है। इंटेल विनिर्देशों की जाँच करें।
सिल्वर मून

1
+1 से रिकार्डो; मैंने एक HT- सक्षम सर्वर पर HT अक्षम किया है, और मैं इसे "HTT" प्रिंट करता हूं। lscpuजांचने का तरीका है
सूदो

96

मैंने हमेशा केवल निम्नलिखित का उपयोग किया है और 'थ्रेड (ओं) प्रति कोर:' को देखा है।

hostname:~ # lscpu
Architecture:          x86_64
CPU(s):                24
Thread(s) per core:    2                <-- here
Core(s) per socket:    6
CPU socket(s):         2
NUMA node(s):          2
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 44
Stepping:              2
CPU MHz:               1596.000
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              12288K

ध्यान दें, हालांकि, यह तकनीक विफल हो जाएगी यदि कोई तार्किक प्रोसेसर एक सरल के साथ बंद कर दिया गया है

echo 0 > /sys/devices/system/cpu/cpuX/online

4
यह अभी तक का सबसे अच्छा जवाब है। इसके लिए चाय की पत्ती, बहुत सारी सहायक जानकारी, और किसी भी प्रकार की तैयारी की आवश्यकता नहीं है।
ममस

11
OMG आप अपने जवाब पाने के लिए एक शेल कमांड का इस्तेमाल किया ?! उसके लिए इतना पुराना स्कूल -1 है। क्या एक अच्छा पायथन स्क्रिप्ट के बारे में ??? लिखने में आपको केवल एक दोपहर का समय लगेगा। चूंकि यह पायथन नहीं है, एक और -1। लेकिन संक्षिप्तता के लिए +3।
माइक एस

@ माइक बहुत सारे व्यंग्य लेकिन ... lscpu का आउटपुट सही नहीं है, जब कहते हैं, केवल 1 हाइपर-थ्रेडेड कोर 4 कोर सीपीयू (जो पूरी तरह से वैध परिदृश्य है) पर नीचे है। क्योंकि तब यह रिपोर्ट करेगा "थ्रेड (ओं) प्रति कोर: 1" हालांकि 3 कोर वास्तव में हाइपरथ्रेडेड हैं (कुल में 7 धागे)।
सेड्रिक मार्टिन

@Cedric मार्टिन आपने देखा। :-) ... ऊओ! अच्छी पकड़ है ... मैंने यह किया! एक दोहरी 8-कोर मशीन (डेल R620 / E5-2667 v2 सीपीयू) ले गया ... यह 32 सीपीयू रिपोर्ट करता है ... प्रदर्शन किया echo 0 > /sys/devices/system/cpu/cpu31/online, अब lscpu रिपोर्ट करता है Thread(s) per core: 1। बुरा lscpu! मैं यह किसी भी अधिक उपयोग नहीं किया जाएगा लगता है।
माइक एस

3
@ मायक एस आप अभी भी lscpu का उपयोग कर सकते हैं , लेकिन सिर्फ उस पंक्ति का नहीं जो मुझे लगता है। "Lscpu -e -a" का उपयोग करते हुए, प्रत्येक धागे को सही ढंग से सूचीबद्ध करें और बताएं कि यह सक्रिय है या नहीं। यह सिर्फ इतना है कि "थ्रेड (एस) प्रति कोर" बहुत मायने नहीं रखता है जब आप प्रत्येक कोर पर अलग-अलग थ्रेड को सक्षम / अक्षम कर सकते हैं।
सेड्रिक मार्टिन

18

यदि तार्किक प्रोसेसर की संख्या कोर की संख्या से दोगुनी है तो आपके पास एचटी है। डिकोड / खरीद / cpuinfo के लिए निम्नलिखित स्क्रिप्ट का उपयोग करें :

#!/bin/sh
CPUFILE=/proc/cpuinfo
test -f $CPUFILE || exit 1
NUMPHY=`grep "physical id" $CPUFILE | sort -u | wc -l`
NUMLOG=`grep "processor" $CPUFILE | wc -l`
if [ $NUMPHY -eq 1 ]
  then
    echo This system has one physical CPU,
  else
    echo This system has $NUMPHY physical CPUs,
fi
if [ $NUMLOG -gt 1 ]
  then
    echo and $NUMLOG logical CPUs.
    NUMCORE=`grep "core id" $CPUFILE | sort -u | wc -l`
    if [ $NUMCORE -gt 1 ]
      then
        echo For every physical CPU there are $NUMCORE cores.
    fi
  else
    echo and one logical CPU.
fi
echo -n The CPU is a `grep "model name" $CPUFILE | sort -u | cut -d : -f 2-`
echo " with`grep "cache size" $CPUFILE | sort -u | cut -d : -f 2-` cache"

अगर $NUMCORE > $NUMLOGहम कह सकते हैं कि हाइपरथ्रेडिंग सक्षम है, है ना? यह तथ्य यह होगा 2 * $NUMCORE = $NUMLOG, क्या यह हमेशा सच है या कुछ सीपीयू में 4x अधिक कोर हो सकते हैं?
टॉमबार्ट

@ टॉमबार्ट वर्तमान में एचटी कारक है। मैं कल्पना कर सकता हूं कि यह भविष्य में अधिक हो सकता है। एक कोर भौतिक के रूप में विख्यात है। सॉकेट प्रति कोर की संख्या भाई-बहनों से प्राप्त की जा सकती है।
निल्स

यदि आपके पास lscpuउपलब्ध है, तो lscpuअतिरिक्त मेटा-डेटा के साथ एक ही जानकारी प्रदान करेगा और इससे आउटपुट lscpuअधिक आसानी से पार्स करने योग्य होगा। लेकिन यह समाधान काम करता है और केवल उपयोग करता है /proc/cpuinfo
ट्रेवर बॉयड स्मिथ

8

उपरोक्त उदाहरण दिखाते हैं कि सीपीयू एचटी में सक्षम है, लेकिन नहीं अगर इसका उपयोग किया जा रहा है। अंतिम विधि काम करती है, लेकिन दोहरी सॉकेट सर्वर और वीएमएस का परीक्षण Xenserverनहीं किया जाता है जहां यह भौतिक सीपीयू प्रदर्शित नहीं करता है, क्योंकि कोई भी नहीं है।

मुझे यह सबसे आसान और कम कोड वाला तरीका लगा, जिसने मेरे सभी टेस्ट परिवेशों पर भी काम किया। लेकिन आवश्यकता है bc

echo "testing ################################### "

nproc=$(grep -i "processor" /proc/cpuinfo | sort -u | wc -l)

phycore=$(cat /proc/cpuinfo | egrep "core id|physical id" | tr -d "\n" | sed s/physical/\\nphysical/g | grep -v ^$ | sort | uniq | wc -l)

if [ -z "$(echo "$phycore *2" | bc | grep $nproc)" ]

then

echo "Does not look like you have HT Enabled"

if [ -z "$( dmidecode -t processor | grep HTT)" ]

 then

echo "HT is also not Possible on this server"

 else

echo "This server is HT Capable,  However it is Disabled"

fi

else

   echo "yay  HT Is working"

fi


echo "testing ################################### "

मुझे विश्वास है कि यह सभी प्लेटफार्मों पर काम करेगा, और आपको बताएगा कि क्या इसका सीपीयू सक्षम है, और यदि यह सक्षम है। थोड़ा गड़बड़ हो सकता है, मैं स्क्रिप्टिंग में एक शुरुआत कर रहा हूँ, हालांकि। मैंने सेंटो XENSERVER vm, Ubuntu और Openfiler (rpath) के साथ परीक्षण किया


सिर्फ पढ़ने से आपकी स्क्रिप्ट बहुत सरल हो सकती है /sys/devices/system/cpu/smt/control। यह भी देखें ऑस्कर के जवाब
maxschlepzig

6

आप इस कमांड से CPU की HT क्षमता की जांच कर सकते हैं

# grep ht /proc/cpuinfo

आप कर्नेल द्वारा देखे गए भौतिक और लॉजिकियल सीपीयू को निम्न कमांड के साथ सूचीबद्ध कर सकते हैं:

# egrep -i "processor|physical id" /proc/cpuinfo

यह सिंगल-कोर HT सक्षम CPU पर यह आउटपुट देता है:

processor   : 0
physical id : 0
processor   : 1
physical id : 0

आप इस तरह से परिणाम पढ़ सकते हैं:

processor   : 0 (CPU 0, first logical)
physical id : 0 (CPU 0 is on the first physical)
processor   : 1 (CPU 1, second logical)
physical id : 0 (CPU 1 is on the first physical)
=> It means I have HT enabled

1
यह केवल आपको बताएगा कि क्या प्रोसेसर एचटी सक्षम है, न कि अगर एचटी वास्तव में उपयोग किया जा रहा है। नोड्स जिनके प्रोसेसर एचटी-सक्षम हैं, लेकिन जहां एचटी सक्षम नहीं है, वे अभी भी htसीपीयू झंडे में विज्ञापन करेंगे ।
रिकाडर्डो मुर्री

@RiccardoMurri जहाँ तक मुझे पता है, जब HT अक्षम है, तो ht झंडा / proc / cpuinfo में नहीं दिखता है
Coren

6
मुझे पूरा यकीन है कि यह नहीं है। मेरे पास एचटी-सक्षम और एचटी-अक्षम दोनों सर्वर हैं, और उनमें से सभी में एचटी ध्वज दिखाया गया है।
रिकार्डो मुर्री

2
यदि आपके पास 4 कोर के साथ एक एक्सोन प्रोसेसर है, तो यह एक भौतिक आईडी और चार प्रोसेसर के रूप में दिखाई देगा। तो आपके पास हाइपरट्रेडिंग के बिना भौतिक आईडी प्रति कई प्रोसेसर हो सकते हैं।
एंडोमर

2
मुझे 2 सॉकेट मशीन मिल गई है, और physical idसॉकेट / चिप का प्रतिनिधित्व करने लगता है। core idकरने के लिए एक ही शारीरिक कोर बात करने के लिए लगता है
Heartinpiece

6

यह एक लाइनर मेरे लिए चाल करने के लिए लगता है (रूट विशेषाधिकार की आवश्यकता है):

dmidecode -t processor | grep -E '(Core Count|Thread Count)'

आउटपुट है:

Core Count: 2
Thread Count: 4

थ्रेड काउंट कोर काउंट दोगुना है, इसलिए मेरे पास हाइपरथ्रेडिंग सक्षम है।

या यदि आप वास्तव में अपनी पर्ल स्क्रिप्ट चाहते हैं, जैसा कि अनुरोध किया गया है ...

perl -e 'print grep(/Core Count/ || /Thread Count/, `dmidecode -t processor`);'

1
मैंने HT को इंटेल आधारित HT सक्षम प्रणाली पर बंद कर दिया है, फिर भी dmidecode के साथ लौटा थ्रेड काउंट दो बार कोर काउंट है। ऐसा लगता है कि यह पता चलता है कि सीपीयू एचटी सक्षम है, न कि अगर एचटी सक्षम है या नहीं।
दिमित्री चुबरोव

@ दित्री अजीब। मैं सिर्फ एक HT- सक्षम सर्वर (दो Intel Xeon E5-2670 v3 है) पर हाइपरथ्रेडिंग डिसेबल के साथ दौड़ा, और कोर और थ्रेड काउंट समान थे। मुझे यकीन नहीं है कि व्यवहार में अंतर क्या होगा। मुझे इसमें और देखना पड़ेगा।
billyw

मैं अभी दो X5680 प्रोसेसर के साथ एक डेल R610 पर चला गया, हाइपरथ्रेडिंग बंद, और थ्रेड काउंट कोर काउंट दोगुना है। स्टेफनीया का जवाब (lscpu) काम करने लगता है। मैंने iDRAC (डेल की लाइट-आउट, बैंड प्रोसेसर से बाहर [उन लोगों के लिए नहीं]] में डबलचेक किया है और यह कहता है कि हाइपरथ्रेडिंग बंद है। इसलिए मुझे नहीं लगता कि dmidecodeयह विश्वसनीय है।
माइक एस

मैंने एक डेल 1950 (x5460 CPUs, कोई हाइपरथ्रेडिंग संभव नहीं है) की जाँच की और lscpu सही था। इसके अलावा एक डेल R620 (E5-2690 [v1, मुझे विश्वास है]) और यह सही था।
माइक एस

लेकिन @Cedric मार्टिन उपरोक्त उत्तरों में से एक में टिप्पणी करता है जो lscpuहमेशा विश्वसनीय नहीं होगा। मुझे स्कॉटलैब का जवाब पसंद है।
माइक एस

3
perl -ne'
  $i++ if /^\s*$/;
  push @{$x[$i]}, [/^(.+?) \s*:\s* (.+)/x] if /core|sibling|physical id/; }{
  $r= shift @x; 
  for $i (0..$#$r) {
    $$r[$i][1] .= " ".$$_[$i][1] for @x;
    printf "%-15s: %s\n", @{$$r[$i]};
  }
' /proc/cpuinfo

यह परिणाम बताता है कि HT सक्षम है क्योंकि siblingsसंख्या (12) cpu cores6 (6) से अधिक है

physical id    : 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1
siblings       : 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12
core id        : 0 1 2 8 9 10 0 1 2 8 9 10 0 1 2 8 9 10 0 1 2 8 9 10
cpu cores      : 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6

2

यदि आप पढ़ते हैं /sys/devices/system/cpu/cpu0/topology/thread_siblings_list, तो यह सीपीयू 0 के थ्रेड भाई-बहन (यानी हाइपरथ्रेड "कोर") की अल्पविराम से अलग की गई सूची लौटाएगा।

उदाहरण के लिए, मेरे 2-सॉकेट 6-कोर एक्सॉन पर, हाइपरथ्रेडिंग सक्षम होने के साथ मुझे प्राप्त होता है:

cat /sys/devices/system/cpu/cpu0/topology/thread_siblings_list
0,12

लेकिन BIOS में हाइपरथ्रेडिंग को बंद करने के बाद, मुझे मिलता है:

cat /sys/devices/system/cpu/cpu0/topology/thread_siblings_list
0

यह मानते हुए कि सीपीयू 0 हमेशा उपलब्ध रहेगा, फिर thread_sibling_listएक से अधिक नोड के लिए सीपीयू 0 के प्रोफ़्फ़्स फ़ाइल की जांच करना , या अल्पविराम की तलाश करना, या यहां तक ​​कि कुछ भी अधिक से अधिक 0, यह इंगित करेगा कि क्या हाइपरथ्रेडिंग सक्षम है।


मैं पर्ल में उत्तर दूंगा, लेकिन 1) मैं पर्ल को नहीं जानता, और 2) मुझे लगता है कि समाधान एक बहुत मामूली वन-लाइनर है।


2

लिनक्स पर यह अच्छी तरह से काम करता है:

$ lscpu -e  
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE  
0   0    0      0    0:0:0:0       yes  
1   0    0      1    1:1:1:0       yes  
2   0    0      2    2:2:2:0       yes  
3   0    0      3    3:3:3:0       yes  
4   0    0      4    4:4:4:0       yes  
5   0    0      5    5:5:5:0       yes  
6   0    0      6    6:6:6:0       yes  
7   0    0      7    7:7:7:0       yes  
8   1    1      8    8:8:8:1       yes  
9   1    1      9    9:9:9:1       yes  
10  1    1      10   10:10:10:1    yes  
11  1    1      11   11:11:11:1    yes  
12  1    1      12   12:12:12:1    yes  
13  1    1      13   13:13:13:1    yes  
14  1    1      14   14:14:14:1    yes  
15  1    1      15   15:15:15:1    yes  
16  0    0      0    0:0:0:0       yes  
17  0    0      1    1:1:1:0       yes   
18  0    0      2    2:2:2:0       yes  
19  0    0      3    3:3:3:0       yes  
20  0    0      4    4:4:4:0       yes  
21  0    0      5    5:5:5:0       yes  
22  0    0      6    6:6:6:0       yes  
23  0    0      7    7:7:7:0       yes  
24  1    1      8    8:8:8:1       yes  
25  1    1      9    9:9:9:1       yes  
26  1    1      10   10:10:10:1    yes  
27  1    1      11   11:11:11:1    yes  
28  1    1      12   12:12:12:1    yes  
29  1    1      13   13:13:13:1    yes  
30  1    1      14   14:14:14:1    yes  
31  1    1      15   15:15:15:1    yes  

उपरोक्त उदाहरण में, हमारे पास 2 NUMA सॉकेट (SOCKET = 1 या 2) हैं। हमारे पास 16 भौतिक कोर (कोर = 0 15 के माध्यम से) हैं। प्रत्येक कोर में एक भाई हाइपरथ्रेड होता है (उदाहरण के लिए कोर = 0 में CPU 0,16 होता है।

हम हाइपरथ्रेड को इस तरह सत्यापित कर सकते हैं:

$ cat /sys/devices/system/cpu/cpu0/topology/thread_siblings_list  
0,16

कैश मेमोरी पदानुक्रम है:

CPU 0 --> L1D_0|L1I_0 -> L2_0 -> L3_0  
          ^                      ^
CPU 16 ---|                      |     
                                 |         
CPU 1 --> L1D_1|L1I_1 -> L2_1 ---> 
          ^    
CPU 17 ---|   
...    

lscpu -p आसान प्रोग्राम पार्सिंग के लिए एक सीएसवी प्रारूप आउटपुट देता है।

$ 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,4,0,0,,4,4,4,0
...

2

यहां एक अजगर आधारित दृष्टिकोण है - यह जरूरत पड़ने पर इसे निष्क्रिय करने के तरीके भी बताता है।

import re    

total_logical_cpus = 0
total_physical_cpus = 0
total_cores = 0

logical_cpus = {}
physical_cpus = {}
cores = {}

hyperthreading = False

for line in open('/proc/cpuinfo').readlines():
    if re.match('processor', line):
        cpu = int(line.split()[2])

        if cpu not in logical_cpus:
            logical_cpus[cpu] = []
            total_logical_cpus += 1

    if re.match('physical id', line):
        phys_id = int(line.split()[3])

        if phys_id not in physical_cpus:
            physical_cpus[phys_id] = []
            total_physical_cpus += 1

    if re.match('core id', line):
        core = int(line.split()[3])

        if core not in cores:
            cores[core] = []
            total_cores += 1

        cores[core].append(cpu)

if (total_cores * total_physical_cpus) * 2 == total_logical_cpus:
    hyperthreading = True

print("  This system has %d physical CPUs" % total_physical_cpus)
print("  This system has %d cores per physical CPU" % total_cores)
print("  This system has %d total cores" % (total_cores * total_physical_cpus))
print("  This system has %d logical CPUs" % total_logical_cpus)

if hyperthreading:
    print("  HT detected, if you want to disable it:")
    print("  Edit your grub config and add 'noht'")
    print("  -OR- disable hyperthreading in the BIOS")
    print("  -OR- try the following to offline those CPUs:")

    for c in cores:
        for p, val in enumerate(cores[c]):
            if p > 0:
                print("    echo 0 > /sys/devices/system/cpu/cpu%d/online" % (val))

हाइपरथ्रेडिंग को अक्षम करने का सुझाव उप-इष्टतम है - हाइपरथ्रेडिंग को अक्षम करने का सीधा तरीका है echo off > /sys/devices/system/cpu/smt/control(बायोस में इसे बंद करने के अलावा)। प्रत्यक्ष जाँच के लिए ऑस्कर का उत्तर भी देखें ।
अधिकतम

1

लॉट्स ऑफ़ कैविएट और क्या-अगर यहाँ के उत्तर में ... ऐसा लगता है कि उत्तर इतना स्पष्ट नहीं है। lscpuइसका गोटा है, जो किसी भी "काउंट कोर और लॉजिकल प्रोसेसर पर लागू होता है, फिर" उत्तर की तुलना करें। क्योंकि आप तार्किक प्रोसेसर को एक साधारण इको कमांड के साथ बंद कर सकते हैं (... यह एक बड़े उद्यम वातावरण में महत्वपूर्ण हो सकता है जहां आप टर्बो मोड पर निर्भर हैं, उदाहरण के लिए)।

यहाँ मेरी कोशिश है; प्रेरणा के लिए @scottbb को धन्यवाद:

printf "HT is "; egrep -q [:punct:] /sys/devices/system/cpu/cpu0/topology/thread_siblings_list && echo on || echo off 

मेरे डेल एक्सॉन-आधारित मशीनों पर, जब एचटी चालू होता है, तो सिबलिंग सूची में एक अल्पविराम शामिल होता है। मेरे लैपटॉप पर, इसमें एक हाइफ़न (i5-3210m प्रोसेसर) शामिल है। इसलिए मैं विराम चिह्न के लिए egrep'ing हूं।

विचार? आलोचनाओं?

अनुरोधकर्ता ने पर्ल के लिए कहा, इसलिए यहां आप जाएं:

perl -ane 'chomp; print "Hyperthreading is "; if (/\D/) { print "ON\n" } else { print "OFF\n" }' < /sys/devices/system/cpu/cpu0/topology/thread_siblings_list

मैं बस इस्तेमाल करूंगा grep -q [-.]क्योंकि यह टाइप करने के लिए कम है। FWIW, मैंने कई Xeons / i5 / i7's (मोबाइल वेरिएंट सहित) की जाँच की है और उनमें से किसी में भी हाइफ़न नहीं है thread_siblings_list। यह सिर्फ cpu0 की जांच करने के लिए पर्याप्त नहीं है - इस प्रकार, ऐसा कुछ अधिक मजबूत होगा grep -q , /sys/devices/system/cpu/cpu*/topology/thread_siblings_list:। हालांकि, बस एक grep 1 /sys/devices/system/cpu/smt/active -qबिंदु से भी अधिक है - सीएफ। ऑस्कर का जवाब
maxschlepzig

1

यह जांचने का सबसे आसान तरीका है कि एसएमटी (एचटी के लिए सामान्य, जो सिर्फ इंटेल ब्रांडिंग है) सक्रिय है बस करें:

cat /sys/devices/system/cpu/smt/active

आपको निष्क्रिय के लिए 0 या सक्रिय के लिए 1 देता है

आप इसे रनटाइम पर वास्तव में चालू या बंद कर सकते हैं:

echo [on|off] > /sys/devices/system/cpu/smt/control

Catting /sys/devices/system/cpu/smt/controlहै भी संभव और पैदावार on|off|forceoff|notsupported|notimplemented
मैक्सक्लेपज़िग

0

बेहतर है कि आप lscpu की जाँच करें, जहाँ आप "थ्रेड (ओं) को प्रति कोर: 1" देख सकते हैं, जिसका अर्थ है प्रति 1 कोर में केवल एक धागा।

    # lscpu
    Architecture:          x86_64
    CPU op-mode(s):        32-bit, 64-bit
    Byte Order:            Little Endian

CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    1
Core(s) per socket:    4
Socket(s):             2
NUMA node(s):          2
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 63
Model name:            Intel(R) Xeon(R) CPU E5-2623 v3 @ 3.00GHz
Stepping:              2
CPU MHz:               1200.000
BogoMIPS:              5992.82
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              10240K
NUMA node0 CPU(s):     0,1,4,5
NUMA node1 CPU(s):     2,3,6,7

0

स्टीफ़निया ने पहले ही उल्लेख किया है lscpu। मैं उसमें थोड़ा और जोड़ना चाहता था।

मेरे AMD एपिक प्रोसेसर पर, जब भी एक ऑफ़लाइन तार्किक कोर होता है, lscpuएक नई अतिरिक्त लाइन प्रदर्शित करता है जिसे कहा जाता हैOff-line CPU(s) list:

# echo 0 > /sys/devices/system/cpu/cpu9/online
# echo 0 > /sys/devices/system/cpu/cpu16/online
# 
#lscpu
CPU(s):                64
On-line CPU(s) list:   0-8,10-15,17-63
Off-line CPU(s) list:  9,16
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.