উবুন্টুতে হাইপার থ্রেডিং অক্ষম করুন


15

আমি উবুন্টু 16.04 সার্ভার চালাচ্ছি। আমি দেখতে পাচ্ছি হাইপ থ্রেডিং সক্ষম হয়েছে যখন আমি lscpu কমান্ডটি ব্যবহার করি enabled

আমি এটি অক্ষম করতে চাই আমি উবুন্টু ফোরাম এবং এখানে এবং এখানে গিয়েছিলাম

হাইপার থ্রেডিং ভাল না-কেন হতে পারে এগুলিই ভাল আলোচনা। কীভাবে এটি বন্ধ করা যায় তার কোনও নির্দিষ্ট সমাধান নেই।

হাইপারথ্রেডিং অক্ষম করার পদক্ষেপগুলি কি কেউ দিতে পারেন? ধন্যবাদ


3
আপনি কি এটি BIOS এ অক্ষম করার চেষ্টা করেছেন?
এডউইনকস্ল

হ্যাঁ, এইচটি
জন

উত্তর:


9

ভূমিকা

এটা একটি মজার প্রশ্ন। সম্ভবত ব্যক্তিগতভাবে আমার জন্য মাসগুলির মধ্যে সবচেয়ে আকর্ষণীয় একটি। ওপির মতো আমার পুরানো বিআইওএসে হাইপার থ্রেডিং নিষ্ক্রিয় করার কোনও বিকল্প নেই (উদ্ভাবিত ২০১২, আপডেট হওয়া ২০১ 2016 বা আরও)

ইন্টেল স্কাইলেক এবং কাবি লেকে হাইপার-থ্রেডিং বাগগুলি:

ইন্টেল স্কাইলেক বা কাবি লেকের প্রসেসর ব্যবহারকারী যে কোনও ব্যক্তিকে অবশ্যই হাইপার থ্রেডিং সম্পর্কে বাগ রিপোর্টগুলি পড়তে হবে যা কয়েক মাস আগে প্রকাশিত হয়েছিল। এই ইউকে রেজিস্টার গল্পটি উচ্চারণ করে যে হাইপার থ্রেডিং কীভাবে মেশিনকে ক্র্যাশ করতে এবং কলুষিত করতে পারে তা ডেবিয়ান বিকাশকারীরা কীভাবে স্পট করেছে out

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

এই উত্তরটি তিন ভাগে বিভক্ত:

  • হাইপার-থ্রেডিং বন্ধ / চালু করা হলে সিপিইউগুলির প্রদর্শন
  • হাইপার-থ্রেডিং বন্ধ / চালু করে স্বয়ংক্রিয় করতে স্ক্রিপ্টটি বাশ করুন
  • হাইপার থ্রেডিং শুরু হওয়ার আগে বন্ধ করা থাকলে কঙ্কি ক্রাশ হয়

হাইপার-থ্রেডিং বন্ধ / চালু করা হলে সিপিইউগুলির প্রদর্শন

হাইপার-থ্রেডিং বন্ধ হয়ে গেলে এবং সিপিইউ স্ট্রেস টেস্ট করা হলে নীচে আপনি সিপিইউ ব্যবহার দেখতে পাবেন। প্রায় 10 সেকেন্ড পরে একই স্ক্রিপ্টটি হাইপার থ্রেডিং চালু হওয়ার সাথে পুনরাবৃত্তি হয়। পরিশেষে 10 সেকেন্ড পরে হাইপার-থ্রেডিং দিয়ে স্ক্রিপ্টটি আবার বন্ধ হয়ে যায়:

হাইপার থ্রেডিং সেট করুন h

প্রদর্শনটি দুটি বিভাগে বিভক্ত:

  • বাম অর্ধেক টার্মিনাল উইন্ডোটি set-hyper-threading0 (অফ) প্যারামিটার দিয়ে স্ক্রিপ্টটি চালু করে এবং তারপরে 1 (চালু) করবে।
  • ডান অর্ধে conkyসিপিইউ 1 থেকে 8 এর সিপিইউ শতাংশের ব্যবহার প্রদর্শন করে।

প্রথম স্ক্রিপ্ট হাইপার থ্রেডিং বন্ধ

স্ক্রিপ্টটি প্রথমবার চালিত হয় সিপিইউ নম্বর 2, 4, 6 এবং 8 (কনকির মতে) 3%, 2%, 2% এবং 2% হিমায়িত হয়। সিপিইউ নম্বর 1, 3, 5 এবং 7 টি 100 টি বৃদ্ধি পেয়ে স্ট্রাইক টেস্ট চালানো হয় run

হাইপার-থ্রেডিং বন্ধ করে সিপিইউ টপোলজি প্রদর্শিত হয় এবং কেবলমাত্র চারটি কোর রিপোর্ট করা হয়েছে:

/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% এ অলস হয় Note এটি গুরুত্বপূর্ণ কারণ তৃতীয় পরীক্ষায় হাইপার-থ্রেডিং বন্ধ করে দেখানো হয়েছে যে এই সিপিইউ শতাংশটি প্রথম পরীক্ষার চেয়ে 3%, 2%, 2% এবং 2% এর পরিবর্তে 4%, 2%, 3%, 4% হিমায়িত হয়েছে।

অতএব হাইপার-থ্রেডিং বন্ধ করা বর্তমান অবস্থায় ভার্চুয়াল সিপিইউগুলিকে হিমায়িত করে বলে মনে হচ্ছে।

এছাড়াও আপনি যদি হাইপার-থ্রেডিং চালু করেন বা স্ক্রিপ্টটি "হাইপার থ্রেডিং সমর্থিত" প্রদর্শন করেন তবে তা বিবেচনা করুন।


হাইপার-থ্রেডিং বন্ধ / চালু করে স্বয়ংক্রিয় করতে স্ক্রিপ্টটি বাশ করুন

নীচের স্ক্রিপ্টটি দেখার সময় মনে রাখবেন যে কঙ্কি সিপিইউগুলিকে 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স্ক্রিপ্টের চারটি লাইন মন্তব্য করতে হয়েছিল ।

সিপিইউ শতাংশ ব্যবহার এবং লোড ফ্যাক্টর প্রদর্শনের জন্য কঙ্কি কোড

আপনি যদি কঙ্কিতে অনুরূপ প্রদর্শন স্থাপন করতে আগ্রহী হন তবে এখানে প্রাসঙ্গিক কোড স্নিপেট রয়েছে:

${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বিদ্যমান নেই। এমনকি আমি মাঝে মাঝে লিনাক্স-4.13-আরসি 1 উত্সগুলির মাধ্যমে বিকল্পটির জন্য গ্রেপ্তার হয়েছি। যাইহোক আমি অবশ্যই বুঝতে পারি যে আপনাকে কী বিভ্রান্ত করতে পারে : ড্যাট বাগ্রেপোর্ট অভিযোগ করে যে বিকল্পটি কাজ করে না, এবং তারপরে এটি বন্ধ হয়ে যায় nextrelease, যেমন তারা কোনও কিছু স্থির করে। তবে আপনি যদি মন্তব্যগুলি পড়ে থাকেন তবে দেখতে পাবেন যে কেবলমাত্র nohtএকটি হস্ত-কারুকর্মী স্ক্রিপ্টের ব্যবহার হ'ল বিকল্পটির জন্য কার্নেল কমান্ড লাইনটি পরীক্ষা করে, তারপরে /sys/ফাইল সিস্টেমের মাধ্যমে কোর অক্ষম করে । আইডাব্লু nohtঅকেজো।
হাই-অ্যাঞ্জেল

@ হাই-অ্যাঞ্জেল এটি উল্লেখ করার জন্য ধন্যবাদ। আমি এটি ছাড়াই পরীক্ষা করেছি এবং অফ-লাইন কোরগুলি 2,2,5,5% (নোহোট সহ) থেকে দ্বিগুণ হয়ে 5,5,10,10% (নোহোট ছাড়াই) হয়েছে। আমি আজ রাতে আরও পরীক্ষা করব do আমি কার্নেল প্যারামিটার ডকুমেন্টেশন অনুসন্ধান করেছি এবং এর কোনও রেফারেন্স পাইনি noht
WinEunuuchs2Unix

পাশের নোটে, সূচকের কোনও মেশিন / মানব ভাষা নেই :) 0, 1 থেকে শুরু করে সূচকগুলি বা কোনও নির্দিষ্ট সংখ্যার (যেমন এটি মিনিজিংকে রয়েছে) বিভ্রান্তি সমাধানের জন্য, সূচী সেটগুলির ক্ষেত্রে বিবেচনা করা আরও ভাল , একটি সূচকগুলির একটি সেট থেকে অন্য একটি সেট থেকে অবসর। এটিকে বিমুগ্ধ করা আপনাকে সহজে নোট করতে দেয় যখন কোনও তথ্য স্টাফের সাথে প্রাসঙ্গিক কিছু, যা সূচকগুলিকে প্রতিনিধিত্ব করে না, আসলে কিছুটা প্যাঁচানোর পরে সূচীকরণের জন্য ব্যবহার করা যেতে পারে। মেমরির বিন্যাস এবং অন্যান্য সীমাবদ্ধতাগুলি আনবাউন্ডে থাকা কোনও ধারণা মাথায় রেখে সুবিধাটি আসে।
হাই-এঞ্জেল

@ হাই-অ্যাঞ্জেল "স্টার্ট পজিশন" এবং "অফসেট" এর মধ্যে আমার অনুরূপ তুলনা। যাইহোক আমি এই উত্তরটি আবার দু'দিন পরীক্ষার এবং কোডিংয়ের উপর ভিত্তি করে লিখতে চলেছি যাতে শীঘ্রই আমাদের মন্তব্যগুলি অপ্রচলিত হবে ...
WinEunuuchs2 ইউনিক্স

6

সাম্প্রতিক কার্নেলগুলি ম্যাক্সপাস কার্নেল প্যারামিটার সমর্থন করে

এটি আপনাকে শারীরিক কোরের সংখ্যায় সিপাসের সংখ্যা সেট করতে দেয়। এটি পরিবারের 6 থেকে ইন্টেল সিপিইউগুলিতে এমডিএস দুর্বলতার কারণে হুমকির হ্রাস করতে সহায়তা করতে পারে ।

কিভাবে:

sudo (রুট) সুবিধাগুলি সহ আপনার প্রিয় পাঠ্য সম্পাদকের সাথে / etc / default / grub খুলুন।

GRUB_CMDLINE_LINUX_DEFAULT = দিয়ে শুরু হওয়া লাইনটি সন্ধান করুন

এবং যে কোনও বিদ্যমান কার্নেল প্যারামিটারগুলিতে ম্যাক্সকপাস = এন যুক্ত করুন যেমন সাধারণ শান্ত স্প্ল্যাশ প্যারামিটার (যেখানে এন = আপনার সিপুতে থাকা শারীরিক কোরের সংখ্যা।

উদাহরণস্বরূপ, আমার নির্ভরযোগ্য ইন্টেল (আর) কোর (টিএম) i3-3220 সিপিইউ @ 3.30GHz ডুয়াল কোর হাইপারথ্রেডিং সহ আমি বুট সময় হাইপারথ্রেডিং বন্ধ করতে ম্যাক্সপাস = 2 যুক্ত করেছি ।

ফাইলটি সংরক্ষণ করুন এবং তারপরে কমান্ডটি sudo update-grubপুনরায় চালু করুন।

আপনি কমান্ড জারি করে সাফল্য নিশ্চিত করতে পারেন lscpu | grep "per core"যা এই জাতীয় আউটপুট সরবরাহ করতে পারে:

Thread(s) per core: 1

কার্নেল ৪.৪.০-তে পরীক্ষা করা হয়েছে

সূত্র:

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
আকর্ষণীয় লিঙ্ক। ভাগ করে নেওয়ার জন্য ধন্যবাদ.
WinEunuuchs2 ইউনিক্স

@ WinEunuuchs2 ইউনিক্স আমার আনন্দ। সর্বদা সাহায্য করতে আগ্রহী!
এল্ডার গিক

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
@ ওল্ডারগীক না, maxcpus=হাইপারথ্রেডিং অক্ষম করার জন্য আমি কার্নেল প্যারামিটার চেষ্টা করিনি । মূলত কারণ হাইপারথ্রেডিং কোরগুলির সাথে এর মিথস্ক্রিয়ায় আমি কোনও অফিসিয়াল ডকুমেন্টেশন খুঁজে পাই না। যদি আপনি উল্লেখ করেন তবে সর্বদা হাইপারথ্রেডিং অক্ষম করার নিশ্চয়তা কি maxcpus=#real_cores? অথবা আপনি কিছু সিস্টেমে এখনও এইচটিএমএল সক্ষম থাকা অর্ধেক রিয়েল-কোর দিয়ে শেষ করতে পারেন? এছাড়াও একটি maxcpus=সেটিং বিভিন্ন মূল গণনা সহ মেশিনগুলির মধ্যে পোর্টেবল নয়। বিভিন্ন মেশিনের জন্য এই পরামিতিটির বৈচিত্রগুলি বজায় রাখা ক্লান্তিকর এবং ত্রুটি-প্রবণ হবে be
ম্যাক্সচলেপজিগ

আমার অভিজ্ঞতায় সর্বদা হাইপারথ্রেডিং নিষ্ক্রিয় করা হয়েছে যদি আপনি ম্যাক্সকাস = # রিয়েল_কোর্স নির্দিষ্ট করে থাকেন তবে অবশ্যই আপনি আউটপুটকে বিশ্বাস করেন তবে lscpu | grep "per core"আপনি বহনযোগ্যতা সম্পর্কে একটি ভাইল্ড পয়েন্ট তৈরি করেন তবে, ফ্লিপ সাইডে কার্নেল প্যারামিটারটি একবার সেট করে খুব বেশি কঠিন কাজ মনে হয় না doesn't আমার কাছে.
বয়স্ক গীক

2

এইচটি-কোরগুলি সনাক্ত করতে এবং সেগুলি অনলাইনে / অফলাইনে টগল করার জন্য এখানে একটি স্ক্রিপ্ট রয়েছে।

#!/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

@ WinEunuuchs2 ইউনিক্স , সম্ভবত আপনি এটি আপনার দুর্দান্ত উত্তরে যুক্ত করতে পারেন।


এটিকে সঠিকভাবে কাজ করার জন্য তালিকাটি আমাকে সংখ্যা অনুসারে বাছাই করতে হয়েছিল:for i in $(find /sys/devices/system/cpu/cpu[0-9]* -maxdepth 0 -type d |sort -V); do
নিউহাউস

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

হাইপারথ্রেড জোড়গুলির জন্য কার্নেলটি অনুসন্ধানের আরও কিছুটা শক্তিশালী উপায় যেখানে মাদারবোর্ড একাধিক সিপিইউ সকেট হোস্ট করে কারণ কোর_আইডিটি নকল করা আছে। দুটি 8-কোর জিয়ন চিপস সহ একটি সিস্টেমে আমার সংস্করণটি এখানে রয়েছে (উদাহরণস্বরূপ উবুন্টু 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

নোট করুন যে সিপিইউ-তে "অনলাইন" ফাইল নেই এবং অক্ষম করা যায় না, তাই পরিবর্তে আমি সিপিইউ 2 অক্ষম করলাম।


0

থ্রেড_সিলিংস_লিস্টে বিভাজক কমা না হলে @ ভিজিট ১৯৮৫ এর উত্তর কাজ করে না (যা উদাহরণস্বরূপ, আমার এএমডি রাইজন সিস্টেমের ক্ষেত্রে)।

হাইপার-থ্রেডিং বন্ধ করার জন্য এখানে একটি স্ক্রিপ্ট রয়েছে যা কোনও বিভাজকের সাথে কাজ করে:

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