হাইপারথ্রেডিং সক্ষম করা আছে কিনা তা পরীক্ষা করছেন?


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শব্দটির সীমানা মেলে এবং এমন ক্ষেত্রে মিথ্যা ইতিবাচকতা এড়াতে সহায়তা করে যেখানে "এইচটি" অন্য পতাকার অংশ))


19
এটি কেবল আপনাকে প্রসেসর এইচটি সক্ষম কিনা তা নয়, এইচটি আসলে ব্যবহার করা হচ্ছে না তা নয়।
রিকার্ডো মুরি

3
এইচটিটি ক্ষেত্রটি নির্দেশ করে না যে প্রসেসরটি আসলে তার কোরগুলিতে হাইপারথ্রেডিং করছে। / ভাইস / সিপুইনফো
সিলভার মুন

@ রৌপ্য-চাঁদ আপনি ব্যাখ্যা করতে পারেন? dmidecode এসএমবিআইওএস পড়ে এবং প্রসেসরের দক্ষতাগুলি বলা উচিত। হাইপার-থ্রেডিং ও / এস দ্বারা ব্যবহৃত বা ব্যবহৃত হয়েছে কিনা তা তা জানায় না। তবে এটি নিয়ে ইতিমধ্যে মন্তব্য করা হয়েছে। আরও দেখুন নিলস উত্তর
xebeche

1
@xebeche এ আমার সিস্টেম dmidecode আউটপুট "HTT (মাল্টি-থ্রেডিং)" দেখায় তবে আমার প্রসেসরটি "কোর 2 কোয়াড Q8400" যা হাইপারথ্রেডিং নেই। ইন্টেল স্পেসিফিকেশন পরীক্ষা করুন।
সিলভার মুন

1
রিকার্ডো থেকে +1; আমি এইচটি-সক্ষম সক্ষম সার্ভারে এইচটি অক্ষম করেছি এবং আমি এটি "এইচটিটি" প্রিন্ট করতে দেখছি। 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
ওএমজি আপনি নিজের উত্তর পেতে শেল কমান্ড ব্যবহার করেছেন ?! এটি এত পুরানো স্কুল -1। পাইথনের একটি দুর্দান্ত স্ক্রিপ্ট কি ??? আপনার লিখতে কেবল একটি বিকেল লাগবে। যেহেতু এটি পাইথন নয়, অন্য -১। তবে ব্রিভিটির জন্য +3।
মাইক এস

@ মাইকে এস প্রচুর বিদ্রূপ করা হয়েছে কিন্তু ... lscpu এর আউটপুট সঠিক হয় না, যখন বলুন যে, কেবলমাত্র 1 হাইপার-থ্রেডেড কোর 4 কোরের সিপিইউতে নেমে আসে (এটি সম্পূর্ণ বৈধ দৃশ্যে)। কারণ এরপরে এটি প্রতি "থ্রেড (গুলি) প্রতি কোর: 1" প্রতিবেদন করবে যদিও 3 টি কোর আসলে হাইপারথ্রেডেড (মোট 7 টি থ্রেড)।
সিড্রিক মার্টিন

@ সিড্রিক মার্টিন আপনি লক্ষ্য করেছেন। :-) ... ওওও! ভাল ধরা ... আমি এটা করেছি! একটি দ্বৈত 8-কোর মেশিন নিয়েছে (ডেল আর 620 / E5-2667 ভি 2 সিপিইউ) ... এটি 32 সিপিইউ রিপোর্ট করেছে ... সম্পাদিত echo 0 > /sys/devices/system/cpu/cpu31/online, এখন lscpu রিপোর্ট Thread(s) per core: 1। খারাপ lscpu! মনে করুন আমি আর এটি ব্যবহার করব না।
মাইক এস

3
@ মাইক এস আপনি এখনও lscpu ব্যবহার করতে পারেন , তবে আমার ধারনা ঠিক সেই লাইনটি নয়। "Lscpu -e -a" ব্যবহার করে, প্রতিটি থ্রেডকে সঠিকভাবে তালিকাভুক্ত করে এবং এটি সক্রিয় কিনা তা বলুন। এটি কেবলমাত্র যে প্রতিটি প্রতি থ্রেড (গুলি) আপনি যখন প্রতিটি কোরকে আলাদাভাবে থ্রেড সক্ষম / অক্ষম করতে পারবেন তখন তেমন কোনও তাত্পর্যপূর্ণ হয় না।
সিড্রিক মার্টিন 21

18

লজিকাল প্রসেসরের সংখ্যা যদি আপনার এইচটি থাকে এমন কোরের সংখ্যার দ্বিগুণ হয়। ডিকোড / প্রোক / সিপুইনফোর নিম্নলিখিত স্ক্রিপ্ট ব্যবহার করুন :

#!/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 আরও বেশি কোর থাকতে পারে?
টম্বার্ট

@ টমবার্ট বর্তমানে এইচটি হ'ল ফ্যাক্টর 2 2. আমি ভাবতে পারি এটি ভবিষ্যতে আরও হতে পারে। একটি কোর শারীরিক হিসাবে চিহ্নিত করা হয়। সকেট প্রতি করের সংখ্যা ভাইবোনদের কাছ থেকে নেওয়া যেতে পারে।
নীল

যদি আপনার কাছে 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 ভিএম, উবুন্টু এবং ওপেনফিলার (আরপিথ) দিয়ে পরীক্ষা করেছি


আপনার স্ক্রিপ্টটি কেবল পড়ার মাধ্যমে আরও সরল করা যেতে পারে /sys/devices/system/cpu/smt/control। আরও দেখুন অস্কার এর উত্তর
maxschlepzig

6

আপনি এই আদেশের সাহায্যে সিপিইউর এইচটি সামর্থ্য পরীক্ষা করতে পারেন

# grep ht /proc/cpuinfo

নিম্নলিখিত কমান্ডের সাহায্যে আপনি কার্নেলের দ্বারা প্রদর্শিত শারীরিক এবং লজিকিল সিপিইউ তালিকাভুক্ত করতে পারেন:

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

এটি একটি একক-কোর এইচটি সক্ষম সিপিইউতে এই আউটপুট দেয়:

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, তারা সিপিইউ ফ্ল্যাগগুলিতে বিজ্ঞাপন দেবে ।
রিকার্ডো মুরি

@ রিকার্ডোমুরি যতদূর আমি জানি, এইচটি অক্ষম থাকলে, এইচটি ফ্ল্যাগটি / প্রোক / সিপুইনফোতে উপস্থিত হয় না
কোরেন

6
আমি নিশ্চিত যে এটি না। আমার এইচটি-সক্ষম এবং এইচটি-অক্ষম সার্ভার উভয়ই রয়েছে এবং এগুলির সমস্তই এইচটি পতাকা প্রদর্শন করে।
রিকার্ডো মুরি

2
আপনার কাছে 4 টি কোরের সাথে একটি জিওন প্রসেসর থাকলে এটি একটি ফিজিক্যাল আইডি এবং চারটি প্রসেসর হিসাবে প্রদর্শিত হবে। সুতরাং হাইপারহ্যাড্রেডিং ছাড়াই আপনার প্রতি শারীরিক আইডিতে একাধিক প্রসেসর থাকতে পারে।
Andomar

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
আমি এইচটি একটি ইন্টেল ভিত্তিক এইচটি সক্ষম সিস্টেম চালু করেছি, তবুও থিম কাউন্টটি ডিমিডিকোডের সাথে ফিরে কোর গুনের দ্বিগুণ। দেখে মনে হচ্ছে এটি সিপিইউ এইচটি সক্ষম কিনা তা এইচটি সক্ষম হয়েছে কিনা তা নয়।
দিমিত্রি চুবারভ

@ দিমিত্রি অদ্ভুত হাইপারথ্রেডিং অক্ষম করে আমি এইচটি-সক্ষম সার্ভারে (দুটি ইনটেল সিওন ই 5-2670 ভি 3 এর রয়েছে) এটি চালিয়েছি এবং কোর এবং থ্রেডের গণনা একই ছিল। আচরণের পার্থক্যের কারণ কী হবে তা আমি নিশ্চিত নই। আমাকে আরও খতিয়ে দেখতে হবে
বিলি

আমি মাত্র দুটি এক্স 56৮০ প্রসেসরের সাথে হাইপারথ্রেডিং বন্ধ করে একটি ডেল আর 10১০ এ এটি চালিয়েছি, এবং থ্রেডের গণনাটি মূল গণনা দ্বিগুণ। স্টেফানিয়ার উত্তর (lscpu) কাজ করে বলে মনে হচ্ছে। আমি আইডিআরসি ডাবল চেক করেছি (ডেলের লাইট-আউট, ব্যান্ড প্রসেসরের বাইরে [যারা জানেন না তাদের জন্য)) এবং এটি বলে যে হাইপারথ্রেডিং বন্ধ রয়েছে। সুতরাং আমি dmidecodeবিশ্বাসযোগ্য না বলে মনে করি ।
মাইক এস

আমি একটি ডেল 1950 পরীক্ষা করেছি (x5460 সিপিইউ, কোনও হাইপারথ্রেডিং সম্ভব নয়) এবং lscpu সঠিক ছিল। এছাড়াও একটি ডেল আর -620 (E5-2690 [v1, আমি বিশ্বাস করি]) এবং এটি সঠিক ছিল।
মাইক এস

তবে উপরের উত্তরগুলির মধ্যে একটিতে সিড্রিক মার্টিনের মন্তব্য দেখায় যে 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

এই ফলাফলটি নির্দেশ করে যে এইচটি siblings(12) cpu cores(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 সর্বদা উপলব্ধ থাকবে, তারপরে সিপিইউ 0 এর thread_sibling_listপ্রোফফ ফাইলটি একাধিক নোডের জন্য পরীক্ষা করা, বা কমা, বা এমনকি আরও কিছু সন্ধান করা 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  

উপরের উদাহরণে, আমাদের কাছে দুটি NUMA সকেট রয়েছে (SOCKET = 1 বা 2)। আমাদের কাছে 16 টি শারীরিক কোর রয়েছে (কোরি = 0 থেকে 15)। প্রতিটি সিআরই-এর একটি ভাইবোন হাইপারথ্রেড থাকে (উদাহরণস্বরূপ CORE = 0 এ সিপিইউ 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এর গ্যাচা রয়েছে, যা কোনও "গণনা কোর এবং লজিকাল প্রসেসরের ক্ষেত্রে প্রযোজ্য, তারপরে" তুলনা করুন। কারণ আপনি সাধারণ ইকো কমান্ড দিয়ে লজিকাল প্রসেসরগুলি বন্ধ করতে পারেন (... উদাহরণস্বরূপ, আপনি টার্বো মোডের উপর নির্ভরশীল এমন একটি বৃহত এন্টারপ্রাইজ পরিবেশে এটি জটিল হতে পারে)।

এখানে আমার চেষ্টা; অনুপ্রেরণার জন্য @ স্কটবিবকে ধন্যবাদ:

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

আমার ডেল জিয়ন-ভিত্তিক মেশিনে, এইচটি চালু থাকা অবস্থায় ভাইবোন তালিকায় একটি কমা অন্তর্ভুক্ত থাকে। আমার ল্যাপটপে এটিতে হাইফেন (i5-3210 মি প্রসেসর) অন্তর্ভুক্ত রয়েছে। সুতরাং আমি বিরামচিহ্নের জন্য উদ্বিগ্ন।

থটস? সমালোচনা?

অনুরোধকারী পার্লের জন্য জিজ্ঞাসা করেছিল, তাই আপনি এখানে যান:

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 [-.]টাইপ করা কম হওয়ায় আমি কেবল ব্যবহার করব । এফডাব্লুআইডাব্লু, আমি বেশ কয়েকটি জিওন / আই 5 / আই 7 এর (মোবাইল ভেরিয়েন্টগুলি সহ) পরীক্ষা করে দেখেছি এবং তাদের কোনওটিরই হাইফেন নেই thread_siblings_list। এটা তোলে যথেষ্ট নয় শুধু cpu0 চেক করতে - এভাবে ভালো কিছু আরো জোরালো হবে: grep -q , /sys/devices/system/cpu/cpu*/topology/thread_siblings_list। যাইহোক, মাত্র একটি grep 1 /sys/devices/system/cpu/smt/active -qবিন্দু আরও বেশি - সিএফ। অস্কারের উত্তর
ম্যাক্সচলেপজিগ

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 কোর প্রতি মাত্র একটি থ্রেড।

    # 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। আমি এটিতে আরও কিছু যোগ করতে চেয়েছিলাম।

আমার এএমডি ইপিক প্রসেসরে, যখনই কোনও অফলাইন লজিকাল কোর থাকে, তখন 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.