उबंटू में हाइपर थ्रेडिंग को अक्षम करें


15

मैं ubuntu 16.04 सर्वर चला रहा हूं। जब lscpu कमांड का उपयोग किया जाता है तो मैं देख सकता हूं कि प्रचार थ्रेडिंग सक्षम है।

मैं इसे निष्क्रिय करना चाहता हूं। मैं ubuntu मंचों और यहाँ और यहाँ के माध्यम से चला गया ।

ये अच्छी चर्चाएं हैं कि हाइपर थ्रेडिंग अच्छा क्यों नहीं हो सकता है। लेकिन इसे बंद करने का कोई निश्चित समाधान नहीं है।

क्या कोई हाइपरथ्रेडिंग को अक्षम करने के लिए कोई कदम दे सकता है? धन्यवाद ।


3
क्या आपने इसे BIOS में अक्षम करने का प्रयास किया है?
edwinksl

हां,
john

जवाबों:


9

परिचय

यह एक दिलचस्प सवाल है। व्यक्तिगत रूप से मेरे लिए महीनों में सबसे दिलचस्प में से एक। ओपी की तरह मेरे पुराने BIOS (आविष्कार 2012, अद्यतन 2016 या इसी तरह) में हाइपर थ्रेडिंग को अक्षम करने का कोई विकल्प नहीं है।

Intel Skylake और Kaby Lake में हाइपर-थ्रेडिंग बग:

Intel Skylake या Kaby Lake प्रोसेसर का उपयोग करने वाले किसी व्यक्ति को कुछ महीने पहले हाइपर थ्रेडिंग के बारे में बग रिपोर्ट पढ़नी चाहिए। यह यूके रजिस्टर कहानी बताती है कि कैसे डेबियन डेवलपर्स ने देखा कि कैसे हाइपर थ्रेडिंग मशीन को क्रैश और भ्रष्ट कर सकती है।

पिछले साल की तुलना में उबंटू में पूछे गए स्काईलेक के साथ कई समस्याएं हैं और एक आश्चर्य है कि हाइपर थ्रेडिंग बग के कारण कौन-कौन सी समस्याएं हो सकती हैं।

यह उत्तर तीन भागों में विभाजित है:

  • हाइपर-थ्रेडिंग बंद / चालू होने पर सीपीयू का प्रदर्शन
  • बैश स्क्रिप्ट को हाइपर-थ्रेडिंग को चालू / बंद करने के लिए स्वचालित करने के लिए
  • अगर शुरू होने से पहले हाइपर थ्रेडिंग को बंद कर दिया जाए तो कॉनकी क्रैश हो जाता है

हाइपर-थ्रेडिंग बंद / चालू होने पर सीपीयू का प्रदर्शन

नीचे आप सीपीयू उपयोग देख सकते हैं जब हाइपर-थ्रेडिंग बंद हो जाती है और सीपीयू तनाव परीक्षण किया जाता है। लगभग 10 सेकंड बाद उसी स्क्रिप्ट को हाइपर थ्रेडिंग के साथ दोहराया जाता है। अंत में 10 सेकंड बाद स्क्रिप्ट को हाइपर-थ्रेडिंग के साथ चलाया जाता है:

हाइपर थ्रेडिंग noht सेट करें

प्रदर्शन को दो खंडों में विभाजित किया गया है:

  • 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}

नोट: उपरोक्त एनवीडिया कोड का कभी परीक्षण नहीं किया गया क्योंकि मुझे अब तक उबंटू के तहत काम करने वाली एनवीडिया जीपीयू नहीं मिली है। किसी भी साल अब जल्द ही :)


1
क्षमा करें, लेकिन nohtमौजूद नहीं है। मैं भी linux-4.13-rc1 स्रोतों के माध्यम से विकल्प के लिए तैयार है कि मैं कभी-कभी होता है। हालाँकि मैं निश्चित रूप से समझ सकता हूं कि आपको क्या उलझन हो सकती है: डेट बग्रेपोर्ट शिकायत करता है कि विकल्प काम नहीं करता है, और फिर इसे बंद कर दिया जाता है nextrelease, जैसे कि कुछ तय किया है। हालाँकि यदि आप टिप्पणियों को पढ़ते हैं, तो आप देखेंगे कि इसका उपयोग केवल nohtहाथ से तैयार की गई स्क्रिप्ट के लिए है जो विकल्प के लिए कर्नेल कमांड लाइन की जांच करता है, फिर /sys/फाइल सिस्टम के माध्यम से कोर अक्षम करता है । IOW nohtबेकार है।
हाय-एंजेल

@ हाय-एन्जिल यह इंगित करने के लिए धन्यवाद कि यह आवश्यक नहीं है। मैंने इसके बिना परीक्षण किया और ऑफ-लाइन कोर 2,2,5,5% (noht के साथ) से 5,5,10,10% (बिना noht) के दोगुना हो गया। मैं आज रात और परीक्षण करूँगा। मैंने कर्नेल पैरामीटर प्रलेखन खोजा और इसके लिए कोई संदर्भ नहीं मिला noht
WinEunuuchs2Unix

साइड नोट पर, अनुक्रमण करने के लिए कोई मशीन / मानव भाषा नहीं है :) 0, 1, या यहां तक ​​कि किसी विशेष संख्या (जैसा कि यह MiniZinc में है) से शुरू होने वाले सूचकांकों के साथ भ्रम को हल करने के लिए, इंडेक्स सेट के संदर्भ में सोचना बेहतर है , अर्थात a सूचकांकों के एक सेट से दूसरे सेट पर आपत्ति। इसे दूर करने से आप आसानी से नोट कर सकते हैं जब कुछ डेटा सामान के लिए प्रासंगिक, जो सूचकांकों का प्रतिनिधित्व नहीं करता है, वास्तव में थोड़ा सा चक्कर लगाने के बाद अनुक्रमण के लिए उपयोग किया जा सकता है। इसका फायदा एक मेमोरी लेआउट और अन्य सीमाओं से बाहर की अवधारणा को ध्यान में रखते हुए आता है।
हाय-एंजेल

@ हाय-एंजेल "स्टार्ट पॉजिशन" और "ऑफसेट" के बीच इसी तरह की तुलना मुझे लगता है। वैसे भी मैं पिछले दो दिनों के परीक्षण और कोडिंग के आधार पर इस उत्तर को फिर से लिखने वाला हूं ताकि हमारी टिप्पणियाँ जल्द ही अप्रचलित हो जाए ...
WinEunuuchs2Unix

6

हाल के कर्नेल मैक्सकपस कर्नेल पैरामीटर का समर्थन करते हैं

यह आपको भौतिक कोर की संख्या के लिए cpus की संख्या निर्धारित करने की अनुमति देता है। यह परिवार 6 से इंटेल सीपीयू पर एमडीएस कमजोरियों के कारण होने वाले खतरों को कम करने में मदद करने के लिए उपयोगी हो सकता है ।

किस तरह:

sudo (root) विशेषाधिकार खुले / etc / default / grub के साथ अपने पसंदीदा टेक्स्ट एडिटर के साथ।

वह रेखा ढूंढें जो GRUB_CMDLINE_LINUX_DEFAULT = से शुरू होती है

और किसी भी मौजूदा कर्नेल पैरामीटर जैसे कि सामान्य शांत छप मापदंडों (जहां n = आपके भौतिक सीपीयू की भौतिक संख्या की संख्या) के लिए मैक्सकपस = एन जोड़ें ।

उदाहरण के लिए मेरे भरोसेमंद Intel (R) Core (TM) i3-3220 CPU @ 3.30GHz के दोहरे कोर के साथ हाइपरथ्रेडिंग मैंने बूट समय पर हाइपरथ्रेडिंग बंद करने के लिए maxcpus = 2 को जोड़ा ।

फ़ाइल सहेजें और फिर कमांड जारी करें sudo update-grubऔर रिबूट करें।

आप कमांड जारी करके सफलता की पुष्टि कर सकते हैं lscpu | grep "per core"जो इस तरह से आउटपुट प्रदान करना चाहिए:

Thread(s) per core: 1

4.4.0 कर्नेल पर परीक्षण किया गया

सूत्रों का कहना है:

https://github.com/torvalds/linux/blob/master/Documentation/admin-guide/kernel-parameters.txt

https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/mds.html

/unix/145645/disabling-cpu-cores-on-quad-core-processor-on-linux


1
दिलचस्प लिंक। साझा करने के लिए धन्यवाद।
विनयुनुच्स 2 यूनिक्स

@ WinEunuuchs2Unix मेरी खुशी। हमेशा मदद के लिए उत्सुक!
एल्डर गीक

5

आप लिनक्स में हाइपरथ्रेडिंग को रूट के साथ या सुपरयुसर विशेषाधिकारों के साथ अक्षम कर सकते हैं:

# echo off > /sys/devices/system/cpu/smt/control

आप निम्न हाइपरथ्रेडिंग स्थिति प्रदर्शित कर सकते हैं :

$ cat /sys/devices/system/cpu/smt/control

यह कमांड प्रिंट करता है:

on|off|forceoff|notsupported|notimplemented

वैकल्पिक रूप से, अधिकांश BIOS फ़र्मवेयर में हाइपरथ्रेडिंग को अक्षम करने का एक विकल्प भी शामिल होता है। यदि यह BIOS में अक्षम है तो उपरोक्त बिल्ली संभावित रिटर्न देती है forceoff


आप की कोशिश की है इस बूट पर अक्षम अति सूत्रण के लिए?
एल्डर गीक

1
@ElderGeek नहीं, मैंने maxcpus=हाइपरथ्रेडिंग को अक्षम करने के लिए कर्नेल पैरामीटर की कोशिश नहीं की है । मुख्य रूप से क्योंकि मैं हाइपरथ्रेडिंग कोर के साथ इसकी बातचीत पर कोई आधिकारिक दस्तावेज नहीं पा सकता हूं। यदि आप निर्दिष्ट करते हैं तो क्या यह हमेशा हाइपरथ्रेडिंग को अक्षम करने की गारंटी है maxcpus=#real_cores? या क्या आप कुछ प्रणालियों पर अभी भी एचटी के साथ आधे वास्तविक कोर के साथ समाप्त हो सकते हैं? इसके अलावा एक maxcpus=सेटिंग अलग कोर मायने रखता मशीनों के बीच पोर्टेबल नहीं है। विभिन्न मशीनों के लिए इस पैरामीटर की विविधता को बनाए रखना थकाऊ और त्रुटिपूर्ण होगा।
मैक्सक्लेपज़िग

मेरे अनुभव में हमेशा हाइपरथ्रेडिंग को अक्षम किया गया है यदि आप मैक्सपस = # real_cores निर्दिष्ट करते हैं जो कि आपको भरोसा है कि आप का आउटपुट lscpu | grep "per core"पोर्टेबिलिटी के बारे में एक महत्वपूर्ण बिंदु है, हालांकि, कर्नेल पैरामीटर को सेट करने के लिए फ्लिप साइड पर एक बार बहुत अच्छा काम नहीं लगता है। मेरे लिए।
एल्डर गीक

2

यहाँ ht-cores की पहचान करने और उन्हें ऑनलाइन / ऑफ़लाइन टॉगल करने के लिए एक स्क्रिप्ट है।

#!/bin/bash
typeset -i core_id
typeset -i sibling_id
typeset -i state

for i in /sys/devices/system/cpu/cpu[0-9]*; do
  core_id="${i##*cpu}"
  sibling_id="-1"

  if [ -f ${i}/topology/thread_siblings_list ]; then
    sibling_id="$(cut -d',' -f1 ${i}/topology/thread_siblings_list)"
  fi

  if [ $core_id -ne $sibling_id ]; then
    state="$(<${i}/online)"
    echo -n "$((1-state))" > "${i}/online"
    echo "switched ${i}/online to $((1-state))"
  fi
done

@ WinEunuuchs2Unix , शायद आप इसे अपने उत्कृष्ट उत्तर में जोड़ सकते हैं।


मुझे सूची को ठीक से काम करने के लिए सूची को क्रमबद्ध करना था:for i in $(find /sys/devices/system/cpu/cpu[0-9]* -maxdepth 0 -type d |sort -V); do
neuhaus

2

maxcpus=nमें पैरामीटर GRUB_CMDLINE_LINUX_DEFAULT=ठीक से काम नहीं करता है। इसने मुझे 4 कोर 4 धागे के बजाय 2 कोर और 4 धागे के साथ छोड़ दिया।

मुझे एक उपाय मिला।

जोड़े mitigations=auto,nosmtको GRUB_CMDLINE_LINUX_DEFAULT=बजाय

लिनक्स 4.4.0 के साथ उबंटू 16.04 एलटीएस पर परीक्षण किया गया।

स्रोत: https://wiki.ubuntu.com/SecurityTeam/KnowledgeBase/MDS


1

हाइपरथ्रेड जोड़े के लिए कर्नेल में देखने का थोड़ा और मजबूत तरीका उन प्रणालियों के लिए आवश्यक है जहां मदरबोर्ड कई सीपीयू सॉकेट्स को होस्ट करता है क्योंकि core_id डुप्लिकेट है। यहाँ दो 8-कोर एक्सॉन चिप्स के साथ एक सिस्टम पर मेरा संस्करण है (उदाहरण के लिए Ubuntu 16.04):

$ cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list \
> | sort --unique --numeric-sort
0,16
1,17
2,18
3,19
4,20
5,21
6,22
7,23
8,24
9,25
10,26
11,27
12,28
13,29
14,30
15,31

विभिन्न उद्देश्यों के लिए, आप फाइलों में देखना चाहते हैं

/sys/devices/system/cpu/present
/sys/devices/system/cpu/online
/sys/devices/system/cpu/offline

0

यदि आपने चर्चाएं पढ़ी हैं, तो आप शायद जानते हैं कि आमतौर पर इसे अक्षम करना अनुचित है, इसलिए मैं आपको यह सीखना चाहता हूं कि आप इसे सीखना चाहते हैं।

एचटी के विचार में हर भौतिक कोर (तथाकथित वर्चुअल कोर) के लिए सीपीयू रजिस्टर के कई सेट हैं । कोई "बेहतर" वर्चुअल कोर नहीं है, वे समान हैं। इस ज्ञान के साथ सशस्त्र आप प्रत्येक भौतिक के लिए एक को छोड़कर आभासी कोर को अक्षम कर सकते हैं।

पहले आप यह जानना चाहते हैं कि वर्चुअल कोर की कौन सी /sys/फाइल फाइलसिस्टम में किस भौतिक कोर से संबंधित है । आप उस के लिए core_idफ़ाइल का उपयोग कर सकते हैं :

λ grep "" /sys/devices/system/cpu/cpu*/topology/core_id
/sys/devices/system/cpu/cpu0/topology/core_id:0
/sys/devices/system/cpu/cpu1/topology/core_id:2
/sys/devices/system/cpu/cpu2/topology/core_id:0
/sys/devices/system/cpu/cpu3/topology/core_id:2

आउटपुट से आप अनुमान लगा सकते हैं कि cpu0 + cpu2 एक भौतिक कोर में निहित है, और cpu1 + cpu3 दूसरे में। अब विशेषाधिकार बढ़ाएँ, और echoप्रत्येक जोड़े में एक को निष्क्रिय करने के लिए कमांड का उपयोग करें :

λ sudo -s
# echo 0 > /sys/devices/system/cpu/cpu1/online
# echo 0 > /sys/devices/system/cpu/cpu2/online

ध्यान दें कि cpu0 में "ऑनलाइन" फ़ाइल नहीं है और इसे अक्षम नहीं किया जा सकता है, इसलिए मैंने इसके बजाय cpu2 को अक्षम कर दिया है।


0

@ visit1985 का जवाब काम नहीं करता है, अगर थ्रेड_siblings_list में विभाजक एक अल्पविराम नहीं है (जो कि, उदाहरण के लिए, मेरे AMD Ryzen सिस्टम पर मामला है)।

यहाँ हाइपर-थ्रेडिंग को बंद करने के लिए एक स्क्रिप्ट है जो किसी भी विभाजक के साथ काम करती है:

#!/bin/bash

for cpu in /sys/devices/system/cpu/cpu[1-9]*; do
    if [ -e "$cpu/topology/thread_siblings_list" ]; then
        sibling=$(awk -F '[^0-9]' '{ print $2 }' $cpu/topology/thread_siblings_list)
        if [ ! -z $sibling ]; then
            echo 0 > "/sys/devices/system/cpu/cpu$sibling/online"
        fi
    fi
done

और यहाँ हाइपर-थ्रेडिंग चालू करने के लिए एक है:

#!/bin/bash

for cpu in /sys/devices/system/cpu/cpu[1-9]*; do
    echo 1 > "$cpu/online"
done

क्या यह विधि आपके Ryzen CPU पर काम करती है?
एल्डर गीक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.