লিনাক্সের মধ্যে থেকে হাইপারথ্রেডিং অক্ষম করুন (BIOS এ অ্যাক্সেস নেই)


26

আমার কাছে এমন একটি সিস্টেম রয়েছে যা একটি দূরবর্তী সুবিধায় আর্থিক বাণিজ্য অ্যাপ্লিকেশন চালাচ্ছে। আইএলও / ডিআরএসি-তে আমার অ্যাক্সেস নেই তবে হাইপারথ্রেডিং অক্ষম করা দরকার। সিস্টেমটি ইন্টেল ওয়েস্টমিয়ার 3.33GHz X5680 হেক্স-কোর সিপিইউগুলি চালায়। আমি রিবুট করতে পারি, তবে এটি নিশ্চিত করতে চাই যে কর্মক্ষমতা সমস্যার কারণে সিস্টেম হাইপারথ্রেডিং সক্ষম করে না। লিনাক্সের মধ্যে থেকে এটি করার কি কোনও পরিষ্কার উপায় আছে?

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

দেখুন: https://bugzilla.redhat.com/show_bug.cgi?id=440321#c9

উত্তর:


21

আপনি চাইলে রানটাইমে এটি করতে পারেন। আমি এখানে বর্ণিত একটি দুর্দান্ত সমাধান পেয়েছি: http://www.absolutelytech.com/2011/08/01/how-to-disable-cpu-cores-in-linux/

পদক্ষেপ 1: আপনি যে লিনাক্স সিপিইউগুলি স্যুইচ অফ করতে চান তা সনাক্ত করুন:

cat /proc/cpuinfo

একই "কোর আইডি" রয়েছে এমন সিপিইউগুলির সন্ধান করুন, আপনি প্রতিটি জুটির একটিতে স্যুইচ অফ করতে চান।

পদক্ষেপ 2: হাইপারথ্রেডিং সিপিইউগুলি স্যুইচ করুন (আমার ক্ষেত্রে লিনাক্স দ্বারা দেখা মোট 8 "সিপিইউ" এর শেষ চারটি)

echo 0 > /sys/devices/system/cpu/cpu4/online
echo 0 > /sys/devices/system/cpu/cpu5/online
echo 0 > /sys/devices/system/cpu/cpu6/online
echo 0 > /sys/devices/system/cpu/cpu7/online

সিস্টেম শুরুর ঠিক পরে আপনি নিজে চালিত একটি স্ক্রিপ্ট সেটআপ করতে পারেন।


1
এটি কাজ করে প্রায় হিসাবে আমি প্রত্যাশিত। ভার্চুয়াল কোরগুলি অক্ষম করা আছে, এখন যখন আমি একটি সিপিইউ-গ্রাহক থ্রেড কার্যকর করি তখন এটি শারীরিক কোরকে 100% দ্বারা লোড করে। তবে sysbench --num-threads=1 --test=cpu runবিভিন্ন নাম-থ্রেড এবং এইচটি চালু এবং বন্ধ ব্যবহার করে বলা হয়েছে যে অনেক থ্রেড থাকলে এইচটি নিষ্ক্রিয় করা সুগন্ধি হ্রাস করে এবং এমনকি একটি মাত্র থ্রেড থাকলেও এইচটি বন্ধ করে লাভ নেই। সুতরাং আমি এটি এটি যেমন রাখার পরামর্শ দিই: এটি সর্বোত্তম।
সের্গেই পি। ওরফে আজুর

আপনি কি জানবেন যে তাদের আবার চালু করার আদেশটি কী? আপনার উত্তরের শুরুতে লিঙ্কটি মারা গেছে ~ ধন্যবাদ!
ব্যবহারকারী 189035

@ ব্যবহারকারী 189035: echo 1পরিবর্তে echo 0তাদের আবার চালু করা উচিত।
পিটার

@ সার্জিপি.কাএজুরে, আমি মনে করি একটি আর্থিক পরিষেবা অ্যাপ্লিকেশন, এইচটি বন্ধ করার মূল কারণটি পারফরম্যান্স নয়, তবে সুরক্ষা।
সাইমন রিখটার

@ সিমোনরিচটার এই প্রশ্নটি মূলত লেখা হয়েছিল, আসলে এটি ছিল পারফরম্যান্স। এসএমটি / এইচটি সেই যুগের সিপিইউতে কিছু কাজের চাপে প্রায় ভাল ছিল না। মেল্টডাউন / স্পেক্টর জিনিস এবং আরও সাম্প্রতিক ফোরশেডোর আক্রমণগুলি বহু বছর পরে ঘটেছিল।
মাইকেল হ্যাম্পটন

14

মেশিন স্টার্টআপে হাইপারথ্রেডিং অক্ষম করার জন্য একটি স্ক্রিপ্ট ...

হাইপারথ্রেডিং অক্ষম করতে আমি মেশিন /etc/rc.local এ একটি স্ক্রিপ্ট অন্তর্ভুক্ত করি। এটি পরিচ্ছন্নভাবে পরিষ্কার নয়, তবে সিপিইউ আর্কিটেকচারের থেকে পৃথক, এটি ইনস্টল করা সহজ এবং আধুনিক লিনাক্স বিতরণে কাজ করা উচিত।

nano /etc/rc.local

    # place this near the end before the "exit 0"

    for CPU in /sys/devices/system/cpu/cpu[0-9]*; do
        CPUID=$(basename $CPU)
        echo "CPU: $CPUID";
        if test -e $CPU/online; then
                echo "1" > $CPU/online; 
        fi;
        COREID="$(cat $CPU/topology/core_id)";
        eval "COREENABLE=\"\${core${COREID}enable}\"";
        if ${COREENABLE:-true}; then        
                echo "${CPU} core=${CORE} -> enable"
                eval "core${COREID}enable='false'";
        else
                echo "$CPU core=${CORE} -> disable"; 
                echo "0" > "$CPU/online"; 
        fi; 
    done;    

এটি কিভাবে কাজ করে?

লিনাক্স কার্নেলের তথ্য এবং নিয়ন্ত্রণগুলি আধুনিক লিনাক্স বিতরণে / sys ডিরেক্টরিতে ফাইল হিসাবে অ্যাক্সেস করা যায়। উদাহরণ স্বরূপ:

/ sys / ডিভাইস / সিস্টেম / সিপিইউ / সিপিইউ 3 তে লজিক্যাল সিপিইউ 3 এর জন্য কার্নেল সংক্রান্ত তথ্য এবং নিয়ন্ত্রণ রয়েছে।

বিড়াল / সিএস / ডিভাইস / সিস্টেম / সিপিইউ / সিপিইউ 3 / টপোলজি / কোর_আইডি এই লজিক্যাল সিপিইউয়ের মূল সংখ্যাটি প্রদর্শন করবে।

প্রতিধ্বনি "0"> / sys / ডিভাইস / সিস্টেম / সিপিইউ / সিপিইউ 3 / অনলাইন লজিকাল সিপিইউ 3 অক্ষম করতে দেয়।

কেন এটি কাজ করে?

আমি ঠিক জানি না কেন ... তবে হাইপারথ্রেডিং বন্ধ হয়ে যাওয়ার সাথে সিস্টেমটি আরও প্রতিক্রিয়াশীল হয়ে উঠেছে (আমার আই 5 নোটবুক এবং 60+ কোরের সাথে বিশাল জিয়ান সার্ভারে)। আমি অনুমান করি যে প্রতি-সিপিইউ ক্যাশে, প্রতি-সিপিইউ মেমরি বরাদ্দ, সিপিইউ শিডিয়ুলার বরাদ্দ এবং প্রক্রিয়া অগ্রাধিকারগুলি জটিল পুনরাবৃত্তির সাথে করতে হবে। আমি মনে করি হাইপারথ্রেডিংয়ের সুবিধাগুলি সিপিইউ শিডিয়ুলার তৈরির জটিলতার দ্বারা ওজন বেশি যারা এটি কীভাবে ব্যবহার করতে জানে।

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

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

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

এছাড়াও, এটি অনুমানের কাজ।

আমার ধারণাটি আরও ভাল, তবে তা নাও পারে।


আমি মনে করি আমার স্ক্রিপ্টলেটটি অনুসরণ করা একটু সহজ।
পল এম

9

সত্যিকারের পুরানো কার্নেলগুলির জন্য (লিনাক্স ২..9.৯ বা আরও), বুট-এর কার্নেলে নোহ্যাট প্যারামিটার যুক্ত করুন ।

কমপক্ষে লিনাক্স ২.6.১৮ থেকে এই কার্নেল কমান্ড-লাইন বিকল্পটি সরানো হয়েছে


Http://www.faqs.org/docs/Linux-HOWTO/BootPrompt-HOWTO.html থেকে :

The `noht' Argument

This will disable hyper-threading on intel processors that have this feature. 

যদি লিলো আপনার /etc/lilo.conf সম্পাদনা করে (এবং পরে লিলো চালান) বা গ্রুব ব্যবহার করে থাকেন তবে আপনার /boot/grub/menu.lst সম্পাদনা করুন।


এটি কি কার্যত বিআইওএস-এ এইচটি অক্ষম করার সমতুল্য?
ew white

আমি নিশ্চিত তা জানি না, তবে হ্যাঁ, আমি আশা করব যে নোহোট এটি BIOS এ অক্ষম করার সমতুল্য হবে।
রিমস

2
এটি একটি জেন্টো সিস্টেম। আমি nohtগ্রাব কার্নেল কমান্ড লাইনে প্রবেশের চেষ্টা করেছি । সিস্টেমটি nohtআদেশটি সম্মান করে নি । আরএইচইএল-র জন্যও। দেখুন: bugzilla.redhat.com/show_bug.cgi?id=440321#c9
ইয়েওয়াইট

1
এটি অন্তত লিনাক্স 2.6.18 থেকে অপ্রচলিতnohtকার্নেল বিকল্প সরানো হয়েছে। এটি দুর্ভাগ্যজনক, কারণ লিনাক্স কিছু এইচওএল পারফ-কাউন্টার ত্রুটি (বিজে 122, বিভি 98, এইচএসডি 29) কেবলমাত্র এইচটি চালু থাকলেই শুরু করে, এবং থ্রিম্রাফগুলি এমনকি লোড হওয়ার আগেই এটি ঘটে।
পিটার

9

আপনি এইচটি জোড়ায় দ্বিতীয় কোর বন্ধ করতে প্রতিটি কোরের জন্য "থ্রেড_সিবলিংস_লিস্ট" ব্যবহার করতে পারেন।

নিম্নলিখিত কমান্ড পাইপলাইনটি হ্যাকি, অপ্টিমাইজড নয়, এবং এটি বুঝতে সহজতর করার জন্য আশা করা হচ্ছে।

cat /sys/devices/system/cpu/cpu*/topology/thread_siblings_list | \
awk -F, '{print $2}' | \
sort -n | \
uniq | \
( while read X ; do echo $X ; echo 0 > /sys/devices/system/cpu/cpu$X/online ; done )

সুতরাং, সমস্ত থ্রেড ভাইবোনের তালিকা নিন, প্রতিটি জোড়ের জন্য দ্বিতীয় সিপিইউ এক্সট্রাক্ট করুন, একটি অনন্য তালিকা পাবেন এবং তারপরে সেগুলি বন্ধ করুন।

এটা কোনো কিছু হলো?

যদি আমি উপরের চালনার পরে "ক্যাট / প্রোক / সিপুইনফো" করি, তবে কোর সংখ্যা অর্ধেক হবে।


এটি একটি দুর্দান্ত উত্তর। আমি আমার কাজের জন্য কাজ অনুসরণ এটি পরিবর্তন ছিল: echo 0 > /sys/devices/system/cpu/cpu$X/onlineহয়েecho 0 | sudo tee /sys/devices/system/cpu/cpu$X/online
carbocation

5

আরও নতুন কার্নেলগুলি একযোগে বহু বহুগঠনের (এসএমটি) নিয়ন্ত্রণ সরবরাহ করে।

আপনি এসএমটি-র স্থিতি দিয়ে পরীক্ষা করতে পারেন;

cat /sys/devices/system/cpu/smt/active

দিয়ে রাষ্ট্র পরিবর্তন করুন

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

বিকল্পগুলি হ'ল;

  • উপর
  • বন্ধ
  • forceoff

আমরা এটি লিনাক্স কার্নেল ৪.৪.০ দিয়ে পরীক্ষা করেছি


হাই নিক এবং সাইটে আপনাকে স্বাগতম। পরীক্ষাগুলি (এবং সংস্করণ) সম্পর্কিত তথ্যটি বেশ মূল্যবান।
kubanczyk

দুর্দান্ত, উবুন্টু 16.04.6 এলটিএস
এল্ডার

4

লুকাসের উত্তরটি দুর্দান্ত তবে সত্যই এইচটি অক্ষম করার পক্ষে কাজ করে না কারণ এইচটি ভাইবোনদের সনাক্তকরণের জন্য মূল আইডি পরিবেশন করতে পারে না। পরিবর্তে এই স্ক্রিপ্টটি কাজ করে:

#!/bin/bash
for CPU in /sys/devices/system/cpu/cpu[0-9]*; do
    CPUID=`basename $CPU | cut -b4-`
    echo -en "CPU: $CPUID\t"
    [ -e $CPU/online ] && echo "1" > $CPU/online
    THREAD1=`cat $CPU/topology/thread_siblings_list | cut -f1 -d,`
    if [ $CPUID = $THREAD1 ]; then
        echo "-> enable"
        [ -e $CPU/online ] && echo "1" > $CPU/online
    else
        echo "-> disable"
        echo "0" > $CPU/online
    fi
done

আপনার স্ক্রিপ্ট আমার এক প্রকরণ। আমাদের একাধিক সিপিইউ থাকলে কী হবে তা আমাদের খতিয়ে দেখতে হবে, কেবলমাত্র নিশ্চিত হতে।
পল এম

@ পলম ঠিক সেখানেই আমি এটি পরীক্ষা করেছি এবং এটি আমার উদ্দেশ্যে ব্যবহার করেছি: 2 সকেট হ্যাসওয়েল সিস্টেম।
আন্তন

0

আইএলও / ড্র্যাকে উঠতে না পারলে আমাকে অপেক্ষা করতে হয়েছিল। কার্নেল বুট প্যারামিটারগুলি বর্তমান লিনাক্স বিতরণে কাজ করে না।


0

লাইবস্বিওস-বিন প্যাকেজে (দেবিয়ান, উবুন্টু ইত্যাদি) আপনার বাইনারি রয়েছে কমসটোকেনএ্যাকটিভ এবং অ্যাক্টিভেটকোমোস টোকেন। টোকেন তালিকার সাথে একসাথে আপনি এর পরে এরকম কিছু চেষ্টা করতে পারেন:

# isCmosTokenActive 0x00d1 # CPU_Hyperthreading_Enable
[...] Type 0x00d1  Location 0x46 AND(fe) OR(0)  BITFIELD: 1
# isCmosTokenActive 0x00d2 # CPU_Hyperthreading_Disable
[....] Type 0x00d2  Location 0x46 AND(fe) OR(1)  BITFIELD: 0

তারপরে সিপিইউ_হাইপারথ্রেডিং_ডিয়েবল টোকনটি সক্রিয় করুন:

# activateCmosToken 0x00d2 # CPU_Hyperthreading_Disable
[...] Type 0x00d2  Location 0x46 AND(fe) OR(1)  BITFIELD: 1

যাচাই করুন:

# isCmosTokenActive 0x00d1 # CPU_Hyperthreading_Enable
[...] Type 0x00d1  Location 0x46 AND(fe) OR(0)  BITFIELD: 0
# isCmosTokenActive 0x00d2 # CPU_Hyperthreading_Disable
[...] Type 0x00d2  Location 0x46 AND(fe) OR(1)  BITFIELD: 1

এখন, বড় প্রশ্ন হ'ল এটি কার্যকর করার জন্য আপনার কেবল একটি রিবুট প্রয়োজন, বা যদি একটি পূর্ণ বিদ্যুত চক্র প্রয়োজন হয় whether এটি ব্যবহার করে দেখুন এবং দেখুন কিভাবে!


0

পল এম এখানে সরবরাহিত তথ্যের ভিত্তিতে , আমি এটি "স্ক্রিপ্ট" করব:

fgrep , /sys/devices/system/cpu/cpu*/topology/thread_siblings_list |
cut -d, -f2 | sort -u |
sudo xargs -rI, sh -c 'echo 0 > /sys/devices/system/cpu/cpu,/online'

অবশ্যই এটি হাইপার-থ্রেডিং বন্ধ করে দিচ্ছে না যেমনটি বিআইওএসের সাথে টিঙ্কারিং করবে , মূলত এটি কেবল কার্নেল টাস্ক শিডিয়ুলারকে কিছু কোর ব্যবহার না করার জন্য বলে কারণ আমরা জানি যে তারা নকল।

পূর্ববর্তী /procবা /sysউপ-সিস্টেমের উপর ভিত্তি করে এটি অনুমান করা সফ্টওয়্যারগুলি এখনও এই রান-টাইম পরিবর্তনের কারণে সাব-অনুকূল হতে পারে বা এমনকি ব্যর্থ হতে পারে যাতে এর পুনরায় আরম্ভের প্রয়োজন হতে পারে। উদাহরণস্বরূপ, আমি লক্ষ করেছি irqbalanceযে এই পরিস্থিতিতে ব্যর্থ হওয়ার প্রবণতা ছিল।


0

এইচটি অক্ষম করুন:

echo 0 |sudo tee /sys/devices/system/cpu/cpu{4..7}/online

এইচটি সক্ষম করুন:

echo 1 |sudo tee /sys/devices/system/cpu/cpu{4..7}/online

দ্রষ্টব্য: এটি আসলে হাইপারথ্রেডিং অক্ষম করে না তবে তারা প্রায় একই ফলাফল প্রাপ্ত "জাল" কোর অক্ষম করে।


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

যেহেতু 0 টি বন্ধ এবং 1 মানে, তাই আমি বুঝতে সহজ হয়েছিল যে প্রথমটি 4 টি কোর (হাইপারথ্রেডিং সহ কোনও কোয়ান্ডোকোরের নকল 8 এর) থেকে স্যুইচ করা হয়েছে এবং দ্বিতীয়টি তাদের আবার স্যুইচ করে ... আপনার যদি দ্বিপল থাকে তবে মূল এই সংখ্যাগুলি অবশ্যই {4.4} এর পরিবর্তে .7 4.7} you আপনি যদি অক্টাকোর ব্যবহার করেন তবে এটি অবশ্যই {8..15 be হতে হবে
জিব্রি

0

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

ব্যবহৃত thread_siblings সক্ষম জন্য একটি কী / অক্ষম হিসাবে মান (hyperthreaded CPU- র সাধারণ):

for i in /sys/devices/system/cpu/cpu[0-9]* 
do echo "$(cat $i/topology/thread_siblings) $i" 
done | 
awk '{v = (a[$1] ? 0 : 1); a[$1] = 1; print "echo " v " > " $2 "/online"}' | 
sudo sh 

সঠিক যাচাই করতে w / o চূড়ান্ত sudo sh কমান্ডটি ব্যবহার করে দেখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.