BFQ शेड्यूलर को कैसे सक्षम और उपयोग करें?


16

मैंने उबंटू (उबंटू कर्नेल अपडेट यूटिलिटी https://doc.ubuntu-fr.org/ubuntu_kernel_upgrad_utility ) का उपयोग करके उबंटू 17.04 पर लिनक्स कर्नेल संस्करण 4.12 स्थापित किया ।

बात यह है कि जब मैं उपलब्ध I / O अनुसूचियों की जांच करता हूं, तो मुझे BFQ और न ही Kyber I / O अनुसूचकिका नहीं मिल सकती है:

cat /sys/class/block/sda/queue/scheduler
> noop deadline [cfq]

तो इस लिनक्स संस्करण में नए अनुसूचियों में से एक का उपयोग कैसे करें?

जवाबों:


22

मैं उबंटू में नहीं हूं, लेकिन फेडोरा में मैंने जो किया वह आपकी मदद कर सकता है।

BFQ एक blk-mq (मल्टी-क्यू ब्लॉक IO क्यूइंग मैकेनिज्म) शेड्यूलर है, इसलिए आपको बूट समय पर blk-mq को सक्षम करने की आवश्यकता है, अपने / etc / default / grub फ़ाइल को एडिट करें और scsi_mod.use_blk_mq=1अपने में जोड़ें GRUB_CMDLINE_LINUX, यह मेरी ग्रब फ़ाइल है, जैसे एक उदाहरण:

GRUB_TIMEOUT=3
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=false
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="quiet vt.global_cursor_default=0 scsi_mod.use_blk_mq=1"
GRUB_DISABLE_RECOVERY="true"

उसके बाद, आपको अपना ग्रब अपडेट करना होगा। फेडोरा पर हमें उपयोग करना होगा sudo grub2-mkconfig -o /path/to/grub.cfg, जो बूट विधि के आधार पर भिन्न होता है । उबंटू पर, आप बस चला सकते हैं:

sudo update-grub

रिबूट, और अगर आपको यह मिलता है:

cat /sys/block/sda/queue/scheduler
[mq-deadline] none

संभवतः आपके कर्नेल को बीएफक्यू के साथ एक मॉड्यूल के रूप में संकलित किया गया था , और यह किबर के लिए भी मामला हो सकता है।

sudo modprobe bfq
sudo cat /sys/block/sda/queue/scheduler
[mq-deadline] bfq none

आप इसे एक /etc/modules-load.d/bfq.confफ़ाइल युक्त जोड़कर बूट समय पर जोड़ सकते हैं bfq

यह नोट करना महत्वपूर्ण है कि blk_mq को सक्षम करना गैर blk_mq अनुसूचियों का उपयोग करना असंभव है, इसलिए आप बिना cfq और गैर mq समय सीमा खो देंगे

जाहिरा तौर पर blk_mq शेड्यूलिंग सिस्टम ग्रब में एलेवेटर झंडे का समर्थन नहीं कर रहा है, इसके बजाय udv नियमों का उपयोग किया जा सकता है, एक अधिक दानेदार नियंत्रण की पेशकश के साथ।

बनाएँ /etc/udev/rules.d/60-scheduler.rulesअगर यह मौजूद नहीं था और जोड़ें:

ACTION=="add|change", KERNEL=="sd*[!0-9]|sr*", ATTR{queue/scheduler}="bfq"

जैसा कि यहां बताया गया है कि यदि आवश्यक हो तो आप विशेषता का उपयोग करके udev नियमों में घूर्णी (HDD) और गैर-घूर्णी (SSD) उपकरणों के बीच अंतर कर सकते हैं ATTR{queue/rotational}। ज्ञात हो कि Paolo Valente, BFQ डेवलपर, ने LinuxCon यूरोप में बताया कि BFQ कम विलंबता गारंटी के मामले में noopया deadlineशेड्यूलर्स की तुलना में बेहतर विकल्प हो सकता है , जो SSD के लिए भी इसका उपयोग करने के लिए एक अच्छी सलाह देता है।

पाओलो की तुलना: https://www.youtube.com/watch?v=1cjZeaCXIyM&feature=youtu.be

इसे सहेजें, और पुनः लोड करें और ट्रिगर करें udev rules:

sudo udevadm control --reload
sudo udevadm trigger

3
मैं सिर्फ यह नोट करना चाहता हूं: लिनक्स <4.15 वाले कंप्यूटर पर ऐसा न करें कि आप सस्पेंड-टू-राम करने में सक्षम होने की उम्मीद करते हैं; <4.15 सभी IO को फिर से शुरू करने के लिए लटकाएंगे क्योंकि उनके पास "सुरक्षित SCSI क्वाइज़िंग" फ़िक्स की कमी है।
इवान कोज़िक

आपको कर्नेल 4.14 पर भी समस्या हो सकती है जहाँ कुछ सिस्टम पर कर्नेल को लोड करने की शुरुआत में blk-mq को सक्षम करने से "कर्ल" सही लगता है (यह पूर्ण स्टॉप पैनिक नहीं है, कर्नेल के अंदर एक अशक्त मात्र)। आप इसे याद कर सकते हैं यदि आप इसे नहीं ढूंढ रहे हैं, लेकिन यदि आप पागल हैं तो यह संकेत हो सकता है कि कुछ टूट गया है।
सी.आर.

1
मैं थोड़ा और सटीक udv नियम का उपयोग करने का सुझाव दूंगा। जब मैंने यहां दिखाया गया एक प्रयास किया, तो udv ने कुछ उपकरणों के लिए अनुसूचक को सेट करने की कोशिश की जिनके नाम उस पैटर्न से मेल खाते हैं, लेकिन SCSI ब्लॉक डिवाइस नहीं हैं जो BFQ अनुसूचक का उपयोग कर सकते हैं। जिस नियम के साथ मैं समाप्त हुआ वह यह है: ACTION=="add|change", SUBSYSTEM=="block", DRIVERS=="sd|sr", ATTR{queue/scheduler}!="bfq", ATTR{queue/scheduler}="bfq"यह उपकरणों के नामों के खिलाफ मिलान से बचा जाता है, जो मिलान को अधिक सटीक बनाता है। यह विभाजन उपकरणों से मेल नहीं खाएगा क्योंकि उनके पास "कतार / शेड्यूलर" विशेषता नहीं है।
दान मोल्डिंग

3
यह भी ध्यान रखना महत्वपूर्ण है कि गुठली 4.15-4.16 एक बहुत गंभीर बग से पीड़ित है जहां BFQ का उपयोग करते समय एक ड्राइव के विभाजन योजना को अपडेट करने से पूर्ण I / O लॉक-अप हो सकता है। Cf .: lkml.org/lkml/2017/12/1/80
Glutanimate

1

महान RomuloPBenedetti उत्तर का विस्तार करने के लिए :

आप परीक्षण कर सकते हैं, अगर bfq अनुसूचक PROGRAM=="/bin/grep -E -q '(^|[[:space:]])bfq($|[[:space:]])' '$sys$devpath/queue/scheduler'"udev नियम का उपयोग करके वास्तव में किसी विशेष उपकरण पर उपलब्ध है। यह प्रभावी रूप से बदल जाएगा DRIVERS=="sd|sr"और बस आग नहीं अगर एक भूल गयाscsi_mod.use_blk_mq=1

सामान्य ज्ञान:

  • PROGRAM- यह निर्धारित करने के लिए एक कार्यक्रम निष्पादित करें कि क्या कोई मैच है; यदि प्रोग्राम सफलतापूर्वक वापस आता है तो कुंजी सही है; यदि कोई पूर्ण मार्ग नहीं दिया गया है, तो कार्यक्रम के रहने की संभावना है।
  • $sys- sysfs आरोह बिंदु ( /sys)।
  • $devpath - उपकरण का देवपथ (/ उपकरण / pci / ...)।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.