हालाँकि, मैंने हाल ही में देखा कि इसकी एक खामी है: "ondemand" I / O ऑपरेशन के कारण CPU लोड को "निष्क्रिय" मानता है। इसका क्या मतलब है? इसका मतलब यह है कि जब प्रोसेसर को I / O संचालन के साथ लोड किया जाता है, तो प्रोसेसर की आवृत्ति अक्सर कम स्तर पर रहती है, जो समस्याओं को पैदा करता है यदि आपका सिस्टम iowait के साथ कुख्यात लिनक्स बग से ग्रस्त है।
इस अटपटे व्यवहार से निपटने के दो तरीके हैं।
पहला विकल्प प्रोसेसर के बिजली-बचत मोड को अक्षम करना है। उदाहरण के लिए, एक स्क्रिप्ट को ठीक करके जिसमें यह शामिल है। यह "ondemand" के बहुत तार्किक नाम के तहत छुपाता है और
/etc/init.d
में स्थित है। यदि आप इस फ़ाइल में लाइन को ठीक करते हैं
echo -n ondemand > $CPUFREQ
पर
echo -n performance > $CPUFREQ
, तो प्रोसेसर लगातार अधिकतम आवृत्ति पर काम करेगा।
दूसरा विकल्प "ondemand" मोड को सक्षम करना है जिसमें यह iowait की अनदेखी नहीं करेगा। यह
/sys/devices/system/cpu/cpufreq/ondemand/io_is_busy
में विकल्प द्वारा नियंत्रित किया
/sys/devices/system/cpu/cpufreq/ondemand/io_is_busy
। ऐसा करने के लिए, मैंने एक छोटी सी init स्क्रिप्ट लिखी:
#! /bin/sh ### BEGIN INIT INFO # Provides: io-is-busy # Required-Start: $ondemand # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: # Short-Description: makes "ondemand" frequency governor to respect iowait load ### END INIT INFO case "$1" in start) start-stop-daemon --start --background --exec /etc/init.d/io-is-busy -- background ;; background) sleep 65 # waiting till ondemand finish its' work echo 1 > /sys/devices/system/cpu/cpufreq/ondemand/io_is_busy ;; restart|reload|force-reload) echo "Error: argument '$1' not supported" >&2 exit 3 ;; stop) echo 0 > /sys/devices/system/cpu/cpufreq/ondemand/io_is_busy ;; *) echo "Usage: $0 start|stop" >&2 exit 3 ;; esac
उसके बाद, स्क्रिप्ट को
/etc/init.d/io-is-busy
फ़ाइल में सहेजा जाता है, निष्पादन योग्य बनाया जाता है, और सिस्टम में कमांड
sudo update-rc.d io-is-busy defaults 99 99
साथ पंजीकृत किया
sudo update-rc.d io-is-busy defaults 99 99
।
वह सब है। अब बढ़ते प्रोसेसर लोड I / O संचालन के साथ, आवृत्ति स्वचालित रूप से अधिकतम हो जाती है, जैसा कि मैं चाहता था।