लिनक्स पर सॉफ्टवेयर RAID और LVM का उपयोग करते समय, कौन से IO शेड्यूलर और रीडहेड सेटिंग्स को सम्मानित किया जाता है?


28

कई परतों (भौतिक ड्राइव -> एमडी -> डीएम -> एलवीएम) के मामले में, शेड्यूलर्स, रीडहेड सेटिंग्स और अन्य डिस्क सेटिंग्स कैसे बातचीत करते हैं?

कल्पना करें कि आपके पास mdadm के साथ बनाए गए सॉफ़्टवेयर RAID डिवाइस (/ dev / md0) के सभी भाग (/ dev / sda - / dev / sdd) हैं। प्रत्येक डिवाइस (भौतिक डिस्क और / dev / md0 सहित) की अपनी सेटिंग आईओ अनुसूचक ( ऐसा बदला ) और रीडहेड ( ब्लॉकदेव का उपयोग करके बदला हुआ ) के लिए अपनी सेटिंग है । जब आप डीएम (क्रिप्टो) और एलवीएम जैसी चीजों में फेंकते हैं तो आप अपनी सेटिंग्स के साथ और भी परतें जोड़ते हैं।

उदाहरण के लिए, यदि भौतिक डिवाइस में 128 ब्लॉक से आगे रीड है और RAID में 64 ब्लॉक का रीडहेड है, जिसे मैं / dev / md0 से रीड करते समय सम्मानित किया जाता है? क्या md ड्राइवर 64 ब्लॉक को पढ़ने का प्रयास करता है जिसे भौतिक डिवाइस ड्राइवर फिर 128 ब्लॉक के रीड में बदल देता है? या क्या RAID रीडहेड "पास-थ्रू" अंतर्निहित डिवाइस पर आता है, जिसके परिणामस्वरूप 64 ब्लॉक पढ़ा जाता है?

शेड्यूलर्स के लिए एक ही तरह का प्रश्न है? क्या मुझे IO अनुसूचियों की कई परतों के बारे में चिंता करनी है और वे कैसे बातचीत करते हैं, या / dev / md0 प्रभावी रूप से अंतर्निहित अनुसूचियों को ओवरराइड करता है?

इस प्रश्न का उत्तर देने के मेरे प्रयासों में, मैंने शेड्यूलर्स और टूल्स पर कुछ दिलचस्प डेटा खोदा है, जो इसे समझने में मदद कर सकते हैं:

जवाबों:


7

यदि आप md0 से रीड करते हैं तो md0 के लिए रीडहेड का उपयोग किया जाता है। यदि आपने sda से रीड किया है जो md0 का एक घटक है तो यह sda सेटिंग का उपयोग करेगा। डिवाइस मैपर सिर्फ एक आई / ओ को कई रीड्स में विभाजित करता है और RAID करने के लिए लिखता है, लेकिन यह ब्लॉक कैश लेयर के नीचे है जहां रीडहेड होता है। भंडारण स्टैक इस तरह दिखता है:

filesystem - जब आप O_DIRECT के साथ खोलते हैं तो कैश को बायपास करता है

ब्लॉक कैश - रीडहेड, कैश, शेड्यूलर लिखें

डिवाइस-मैपर - डीएम, एलवीएम, सॉफ्टवेयर RAID, स्नैपशॉट, आदि।

एसडी - डिस्क ड्राइवर

SCSI - त्रुटि हैंडलिंग, डिवाइस रूटिंग

हार्डवेयर ड्राइवर - scsi कार्ड, FC कार्ड, ईथरनेट

ध्यान दें कि जब आप करते हैं

dd if=/dev/sda of=foo

आप एक फाइल के रूप में एसडीए पढ़ रहे हैं, इसलिए आप ब्लॉक कैश से गुजर रहे हैं। डिस्क पर सीधे जाने के लिए, करें

dd if=/dev/sda of=foo iflag=direct

I / O एलेवेटर शेड्यूलर्स के लिए, वे केवल डिस्क ड्राइवर (एसडी) पर मौजूद हैं। / Sys / block / md या / sys / block / dm के अंतर्गत कोई कतार निर्देशिका नहीं है। आप केवल एक बार डिस्क एलेवेटर सॉर्ट के माध्यम से जाते हैं।


2
/sys/block/md0/queue/schedulerमेरे सिस्टम पर एक है , लेकिन वहाँ एकमात्र विकल्प है none
पीटर आइसेनट्राट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.