परिचय
यह एक दिलचस्प सवाल है। व्यक्तिगत रूप से मेरे लिए महीनों में सबसे दिलचस्प में से एक। ओपी की तरह मेरे पुराने BIOS (आविष्कार 2012, अद्यतन 2016 या इसी तरह) में हाइपर थ्रेडिंग को अक्षम करने का कोई विकल्प नहीं है।
Intel Skylake और Kaby Lake में हाइपर-थ्रेडिंग बग:
Intel Skylake या Kaby Lake प्रोसेसर का उपयोग करने वाले किसी व्यक्ति को कुछ महीने पहले हाइपर थ्रेडिंग के बारे में बग रिपोर्ट पढ़नी चाहिए। यह यूके रजिस्टर कहानी बताती है कि कैसे डेबियन डेवलपर्स ने देखा कि कैसे हाइपर थ्रेडिंग मशीन को क्रैश और भ्रष्ट कर सकती है।
पिछले साल की तुलना में उबंटू में पूछे गए स्काईलेक के साथ कई समस्याएं हैं और एक आश्चर्य है कि हाइपर थ्रेडिंग बग के कारण कौन-कौन सी समस्याएं हो सकती हैं।
यह उत्तर तीन भागों में विभाजित है:
- हाइपर-थ्रेडिंग बंद / चालू होने पर सीपीयू का प्रदर्शन
- बैश स्क्रिप्ट को हाइपर-थ्रेडिंग को चालू / बंद करने के लिए स्वचालित करने के लिए
- अगर शुरू होने से पहले हाइपर थ्रेडिंग को बंद कर दिया जाए तो कॉनकी क्रैश हो जाता है
हाइपर-थ्रेडिंग बंद / चालू होने पर सीपीयू का प्रदर्शन
नीचे आप सीपीयू उपयोग देख सकते हैं जब हाइपर-थ्रेडिंग बंद हो जाती है और सीपीयू तनाव परीक्षण किया जाता है। लगभग 10 सेकंड बाद उसी स्क्रिप्ट को हाइपर थ्रेडिंग के साथ दोहराया जाता है। अंत में 10 सेकंड बाद स्क्रिप्ट को हाइपर-थ्रेडिंग के साथ चलाया जाता है:
प्रदर्शन को दो खंडों में विभाजित किया गया है:
set-hyper-threading
पैरामीटर 0 (ऑफ) और फिर 1 (ऑन) के साथ स्क्रिप्ट को लागू करने वाले बाएं आधे टर्मिनल विंडो पर।
- सही आधे
conky
पर सीपीयू 1 से 8 के सीपीयू प्रतिशत उपयोग को प्रदर्शित करता है।
पहली स्क्रिप्ट रन हाइपर थ्रेडिंग बंद
पहली बार स्क्रिप्ट चलाने पर CPU नंबर 2, 4, 6 और 8 (Conky के अनुसार) 3%, 2%, 2% और 2% पर जमे हुए हैं। तनाव परीक्षण चलने पर सीपीयू नंबर 1, 3, 5 और 7 स्पाइक 100% है।
सीपीयू टोपोलॉजी को हाइपर-थ्रेडिंग के साथ प्रदर्शित किया जाता है और केवल चार कोर रिपोर्ट किए गए हैं:
/sys/devices/system/cpu/cpu0/topology/core_id:0
/sys/devices/system/cpu/cpu2/topology/core_id:1
/sys/devices/system/cpu/cpu4/topology/core_id:2
/sys/devices/system/cpu/cpu6/topology/core_id:3
दूसरी स्क्रिप्ट हाइपर थ्रेडिंग पर चलती है
दूसरी बार जब स्क्रिप्ट को चलाया जाता है तो हाइपर-थ्रेडिंग चालू हो जाती है और सभी सीपीयू नंबर 1-8 स्पाइक से 100% हो जाते हैं जबकि स्ट्रेस टेस्ट चलाया जाता है।
सीपीयू टोपोलॉजी को हाइपर-थ्रेडिंग के साथ प्रदर्शित किया जाता है और केवल चार कोर प्लस और चार वर्चुअल कोर की सूचना दी जाती है:
/sys/devices/system/cpu/cpu0/topology/core_id:0
/sys/devices/system/cpu/cpu1/topology/core_id:0
/sys/devices/system/cpu/cpu2/topology/core_id:1
/sys/devices/system/cpu/cpu3/topology/core_id:1
/sys/devices/system/cpu/cpu4/topology/core_id:2
/sys/devices/system/cpu/cpu5/topology/core_id:2
/sys/devices/system/cpu/cpu6/topology/core_id:3
/sys/devices/system/cpu/cpu7/topology/core_id:3
तीसरी स्क्रिप्ट हाइपर थ्रेडिंग बंद
ध्यान दें कि दूसरी स्क्रिप्ट के समाप्त होने के बाद सीपीयू 2, 4, 6 और 8 4%, 2%, 3%, 4% पर निष्क्रिय हो रहे हैं। यह महत्वपूर्ण है क्योंकि तीसरे परीक्षण में हाइपर-थ्रेडिंग बंद करने से उन सीपीयू प्रतिशत में 4%, 2%, 3%, 4% के बजाय 3%, 2%, 2% और 2% पहले परीक्षण से जमे हुए दिखाई देते हैं।
इसलिए हाइपर-थ्रेडिंग को बंद करने से लगता है कि वर्तमान स्थिति में वर्चुअल सीपीयू को फ्रीज कर दिया गया है।
यदि आप हाइपर-थ्रेडिंग चालू करते हैं या स्क्रिप्ट बंद कर देते हैं, तब भी ध्यान दें "हाइपर थ्रेडिंग समर्थित"।
बैश स्क्रिप्ट को हाइपर-थ्रेडिंग को चालू / बंद करने के लिए स्वचालित करने के लिए
नीचे दी गई स्क्रिप्ट को देखते समय ध्यान रखें कि कॉनकी 1 से 8 तक के सीपीयू की संख्या बताती है लेकिन लिनक्स 0 से 7 तक के सीपीयू की संख्या बताता है।
#!/bin/bash
# NAME: set-hyper-threading
# PATH: /usr/local/bin
# DESC: Turn Hyper threading off or on.
# DATE: Aug. 5, 2017.
# NOTE: Written Part of testing for Ubuntu answer:
# /ubuntu/942728/disable-hyper-threading-in-ubuntu/942843#942843
# PARM: 1="0" turn off hyper threading, "1" turn it on.
if [[ $# -ne 1 ]]; then
echo 'One argument required. 0 to turn off hyper-threading or'
echo '1 to turn hyper-threading back on'
exit 1
fi
echo $1 > /sys/devices/system/cpu/cpu1/online
echo $1 > /sys/devices/system/cpu/cpu3/online
echo $1 > /sys/devices/system/cpu/cpu5/online
echo $1 > /sys/devices/system/cpu/cpu7/online
grep "" /sys/devices/system/cpu/cpu*/topology/core_id
grep -q '^flags.*[[:space:]]ht[[:space:]]' /proc/cpuinfo && \
echo "Hyper-threading is supported"
grep -E 'model|stepping' /proc/cpuinfo | sort -u
stress --cpu 8 --io 1 --vm 1 --vm-bytes 128M --timeout 10s
नोट: कार्यक्रम stress
सभी डेबियन प्रणालियों में बनाया गया है जो उबंटू एक व्युत्पन्न है। इसलिए आपको उबंटू में इस स्क्रिप्ट को चलाने के लिए किसी भी पैकेज को डाउनलोड और इंस्टॉल करने की आवश्यकता नहीं है।
यदि आपके पास एक डुअल कोर सीपीयू है तो आपको #
सीपीयू नंबर 5 और 7 को नियंत्रित करने वाली लाइनों को हटाना (या टिप्पणी करना ) चाहिए।
सीपीयू टोपोलॉजी प्रदर्शित करने वाली बैश लाइन के लिए हाय-एंजेल को श्रेय grep "" /sys/devices/system/cpu/cpu*/topology/core_id
।
अगर शुरू होने से पहले हाइपर थ्रेडिंग को बंद कर दिया जाए तो कॉनकी क्रैश हो जाता है
सीपीयू 2, 4, 6, 8 से लेकर सबसे कम प्रतिशत उपयोग संभव है मैंने बूट अप के दौरान हाइपर-थ्रेडिंग को बंद करने की कोशिश की। मैंने यह करने के लिए इस स्क्रिप्ट का उपयोग किया:
# NAME: /etc/cron.d/turn-off-hyper-threading
# DATE: Auguust 5, 1017
# DESC: This turns off CPU 1, 3, 5 & 7
# NOTE: Part of testing for Ubuntu answer:
# /ubuntu/942728/disable-hyper-threading-in-ubuntu/942843#942843
# BUGS: Conky crashes with Segmentation Fault when CPU 2,4,6 & 8 (as conky calls them)
# are off-line.
#
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
#
# @reboot root echo 0 > /sys/devices/system/cpu/cpu1/online
# @reboot root echo 0 > /sys/devices/system/cpu/cpu3/online
# @reboot root echo 0 > /sys/devices/system/cpu/cpu5/online
# @reboot root echo 0 > /sys/devices/system/cpu/cpu7/online
हालाँकि conky
हाइपर-थ्रेडिंग चालू होने पर विभाजन दोष के साथ क्रैश हो जाता है। जैसे कि मुझे @reboot
स्क्रिप्ट में चार पंक्तियों पर टिप्पणी करनी थी ।
सीपीयू प्रतिशत उपयोग और लोड फैक्टर प्रदर्शित करने के लिए कॉनकी कोड
यदि आप Conky में एक समान प्रदर्शन स्थापित करने में रुचि रखते हैं तो प्रासंगिक कोड स्निपेट है:
${color orange}${voffset 2}${hr 1}
${color2}${voffset 5}Intel® i-7 3630QM 3.4 GHz: ${color1}@ ${color green}${freq} MHz
${color}${goto 13}CPU 1 ${goto 81}${color green}${cpu cpu1}% ${goto 131}${color3}${cpubar cpu1 18}
${color}${goto 13}CPU 2 ${goto 81}${color green}${cpu cpu2}% ${goto 131}${color3}${cpubar cpu2 18}
${color}${goto 13}CPU 3 ${goto 81}${color green}${cpu cpu3}% ${goto 131}${color3}${cpubar cpu3 18}
${color}${goto 13}CPU 4 ${goto 81}${color green}${cpu cpu4}% ${goto 131}${color3}${cpubar cpu4 18}
${color}${goto 13}CPU 5 ${goto 81}${color green}${cpu cpu5}% ${goto 131}${color3}${cpubar cpu5 18}
${color}${goto 13}CPU 6 ${goto 81}${color green}${cpu cpu6}% ${goto 131}${color3}${cpubar cpu6 18}
${color}${goto 13}CPU 7 ${goto 81}${color green}${cpu cpu7}% ${goto 131}${color3}${cpubar cpu7 18}
${color}${goto 13}CPU 8 ${goto 81}${color green}${cpu cpu8}% ${goto 131}${color3}${cpubar cpu8 18}
${color1}All CPU ${color green}${cpu}% ${goto 131}${color1}Temp: ${color green}${hwmon 2 temp 1}°C ${goto 250}${color1}Up: ${color green}$uptime
${color green}$running_processes ${color1}running of ${color green}$processes ${color1}loaded processes.
Load Avg. 1-5-15 minutes: ${alignr}${color green}${execpi .001 (awk '{printf "%s/", $1}' /proc/loadavg; grep -c processor /proc/cpuinfo;) | bc -l | cut -c1-4} ${execpi .001 (awk '{printf "%s/", $2}' /proc/loadavg; grep -c processor /proc/cpuinfo;) | bc -l | cut -c1-4} ${execpi .001 (awk '{printf "%s/", $3}' /proc/loadavg; grep -c processor /proc/cpuinfo;) | bc -l | cut -c1-4}
${color1}NVIDIA ${color}-GPU ${color green}${nvidia gpufreq} Mhz ${color}-Memory ${color green}${nvidia memfreq} Mhz
${color1}GT650M ${color}-Temp ${color green}${nvidia temp}°C ${color}-Threshold ${color green}${nvidia threshold}°C
${color orange}${voffset 2}${hr 1}
नोट: उपरोक्त एनवीडिया कोड का कभी परीक्षण नहीं किया गया क्योंकि मुझे अब तक उबंटू के तहत काम करने वाली एनवीडिया जीपीयू नहीं मिली है। किसी भी साल अब जल्द ही :)