পার্ল স্ক্রিপ্টটি পরীক্ষা করে লিনাক্স মেশিনে হাইপারথ্রেডিং সক্ষম করা আছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?
আমি নিম্নলিখিত উপায়ে চেষ্টা করছি:
dmidecode -t processor | grep HTT
আমি সঠিক পথে থাকলে আমাকে জানান।
পার্ল স্ক্রিপ্টটি পরীক্ষা করে লিনাক্স মেশিনে হাইপারথ্রেডিং সক্ষম করা আছে কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?
আমি নিম্নলিখিত উপায়ে চেষ্টা করছি:
dmidecode -t processor | grep HTT
আমি সঠিক পথে থাকলে আমাকে জানান।
উত্তর:
জুলাই 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
শব্দটির সীমানা মেলে এবং এমন ক্ষেত্রে মিথ্যা ইতিবাচকতা এড়াতে সহায়তা করে যেখানে "এইচটি" অন্য পতাকার অংশ))
lscpu
চেক করার উপায়।
আমি সর্বদা নিম্নলিখিতটি ব্যবহার করেছি এবং প্রতি থ্রেড (গুলি) প্রতি লক্ষ্য করেছি: '।
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
echo 0 > /sys/devices/system/cpu/cpu31/online
, এখন lscpu রিপোর্ট Thread(s) per core: 1
। খারাপ lscpu
! মনে করুন আমি আর এটি ব্যবহার করব না।
লজিকাল প্রসেসরের সংখ্যা যদি আপনার এইচটি থাকে এমন কোরের সংখ্যার দ্বিগুণ হয়। ডিকোড / প্রোক / সিপুইনফোর নিম্নলিখিত স্ক্রিপ্ট ব্যবহার করুন :
#!/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
।
উপরের উদাহরণগুলি দেখায় যে সিপিইউ এইচটি সক্ষম কিনা, তবে এটি ব্যবহৃত হচ্ছে না। শেষ পদ্ধতিটি কাজ করে তবে ডুয়াল সকেট সার্ভার নয় এবং ভিএমগুলি পরীক্ষা করা হয়েছে 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
। আরও দেখুন অস্কার এর উত্তর
আপনি এই আদেশের সাহায্যে সিপিইউর এইচটি সামর্থ্য পরীক্ষা করতে পারেন
# 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
ht
, তারা সিপিইউ ফ্ল্যাগগুলিতে বিজ্ঞাপন দেবে ।
physical id
মনে হয় সকেট / চিপের প্রতিনিধিত্ব করে। core id
একই শারীরিক কোর বাতলান বলে মনে হয়
এই এক লাইনারটি আমার জন্য কৌশলটি করছে বলে মনে হচ্ছে (মূল অধিকারগুলির প্রয়োজন):
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`);'
dmidecode
বিশ্বাসযোগ্য না বলে মনে করি ।
lscpu
সর্বদা নির্ভরযোগ্য হবে না। আমি স্কটবিবির উত্তর পছন্দ করি।
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
আপনি যদি পড়েন তবে /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) আমি ধরে নিই যে সমাধানটি বেশ তুচ্ছ ওয়ান-লাইনার।
লিনাক্স এ এটি ভাল কাজ করে:
$ 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
...
এখানে অজগর ভিত্তিক পদ্ধতি রয়েছে - এটি প্রয়োজনে এটি নিষ্ক্রিয় করার উপায়ও পরামর্শ দেয়।
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
( বায়োজে এটি বন্ধ করার পাশাপাশি)। সরাসরি চেক করার জন্য অস্কারের উত্তরও দেখুন ।
লোটের সতর্কতা এবং উত্তরগুলি এখানে কী আছে ... মনে হচ্ছে উত্তরটি এতটা সুস্পষ্ট নয়। 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
বিন্দু আরও বেশি - সিএফ। অস্কারের উত্তর
এসএমটি (এইচটি-র জন্য জেনেরিক, যা কেবলমাত্র ইন্টেল ব্র্যান্ডিং) সক্রিয় রয়েছে কিনা তা যাচাই করার সহজ উপায়:
cat /sys/devices/system/cpu/smt/active
নিষ্ক্রিয়তার জন্য আপনাকে 0 দেয় বা সক্রিয় করার জন্য 1 দেয়
আপনি এটির সাথে রানটাইমে আসলে এটি চালু বা বন্ধ করতে পারেন:
echo [on|off] > /sys/devices/system/cpu/smt/control
/sys/devices/system/cpu/smt/control
হয় সম্ভব এবং উৎপাদনের on|off|forceoff|notsupported|notimplemented
।
আরও ভাল আপনি 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
স্টিফেনিয়া ইতিমধ্যে উল্লেখ করেছেন 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
dmidecode
আপনি রুট হতে হবে।