अंतर्निहित डिवाइस की तुलना में DM मल्टीपाथ डिवाइस के लिए उच्च प्रतीक्षा समय क्यों है?


20

हमारे पास हिताची HNAS 3080 स्टोरेज से जुड़ा एक CentOS 6.4 आधारित सर्वर है और कर्नेल को फाइल-सिस्टम को रीड-ओनली मोड में देखा है:

16 मई 07:31:03 GNS3-SRV-CMP-001 कर्नेल: [1259725.675814] EXT3-fs (dm-1): त्रुटि: रिमाउंटिंग फाइलसिस्टम रीड-ओनली

यह कई I / O त्रुटियों के बाद हुआ और डिवाइस के सभी पथ कथित तौर पर नीचे जा रहे हैं:

16 मई 07:31:03 GNS3-SRV-CMP-001 बहुपथ: mpatha: शेष सक्रिय पथ: 0

मैं सर लॉग में देख रहा हूं और कुछ बहुत बड़े (2 सेकंड) इंतजार के समय देख सकता हूं:

07:40:00       dev8-0     17.91    112.04     98.03     11.73      0.00      0.20      0.07      0.12
07:40:00      dev8-16      0.23      1.85      0.00      8.00      0.00      3.71      3.71      0.09
07:40:00      dev8-32     91.50   8338.76   5292.93    148.98      8.38     91.60      9.76     89.35
07:40:00     dev252-0     91.27   8336.91   5292.93    149.34     17.79    194.88      9.79     89.38
07:40:00     dev252-1    674.80   8168.16   5292.93     19.95   1473.53   2183.60      1.32     88.98

07: 30: 00-07: 40: 00 के बीच की अवधि उस समय की होती है जब फाइल सिस्टम केवल पढ़ने योग्य हो जाता है। हालांकि, सामान्य परिस्थितियों में भी, एक दोहराया अवलोकन यह है कि अंतर्निहित उपकरणों के लिए प्रतीक्षा समय मल्टीपाथ डिवाइस की तुलना में बहुत कम है। उदाहरण के लिए:

00:00:00          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
00:10:00       dev8-0     19.27    129.41     78.61     10.80      0.01      0.27      0.16      0.32
00:10:00      dev8-16      0.23      1.80      0.00      8.00      0.00      0.86      0.84      0.02
00:10:00      dev8-32     94.88  10285.16   3363.48    143.86      3.39     35.76      6.83     64.82
00:10:00     dev252-0     94.65  10283.34   3363.48    144.18      3.64     38.47      6.86     64.89
00:10:00     dev252-1    435.06  10087.12   3363.48     30.92    118.42    272.21      1.47     64.12

dev8-0 स्थानीय डिस्क होती है, जबकि dev8-16 ( /dev/sdb) और dev8-32 ( /dev/sdc) dev252-0 ( ) के लिए अंतर्निहित हैं /dev/mapper/mpatha। dev252-1 ( /dev/mapper/mpathap1) एक एकल विभाजन है जो मल्टीपाथ डिवाइस के पूरे हिस्से को फैलाता है। यहाँ से उत्पादन है multipath -ll:

mpatha (2521501cbffffffffe96773b50ec30020) dm-0 BlueArc,NAS Platform
size=10T features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=enabled
| `- 9:0:0:0 sdc 8:32 active ready running
`-+- policy='round-robin 0' prio=1 status=active
  `- 8:0:0:0 sdb 8:16 active ready running

क्यों के लिए इंतजार समय चाहिए /dev/mapper/mpathap1की तुलना में इतना अधिक हो /dev/mapper/mpathaया यहां तक कि /dev/sdbया /dev/sdc?


1
यह उल्लेखनीय है कि जाहिरा तौर पर बहुत सारे अनुरोध विलय के रास्ते से हो /dev/mapper/mpathap1रहे हैं /dev/mapper/mpatha। यह वह परत भी है जहां ज्यादातर awaitसमय जोड़ा जाता है। आप देख सकते हैं कि लिफ्ट में किया जाता है /sys/block/mpathap1/queue/schedulerऔर /sys/block/mpatha/queue/scheduler, संभवतः के लिए यह स्विचिंग deadlineया noopतुलना के लिए?
वबबिट

मैं / हे अनुसूचक के लिए mpatha( /sys/block/dm-0/queue/scheduler) है noopऔर उस के लिए mpathap1( /sys/block/dm-1/queue/scheduler) है none
पीडीपी

4
मुझे दृढ़ता से संदेह है कि देरी के लिए अनुसूचक की कतार / विलय एल्गोरिथ्म जिम्मेदार है। मैं बिना किसी समय-सीमा के अंतर्निहित उपकरणों के cfq को स्वैप करूंगा, यह देखने के लिए कि क्या यह कुछ बदलता है। यह संभावना आपके सभी समस्याओं के मुद्दे से संबंधित नहीं होगी, हालांकि।
1946 में वाबबिट

2
एफडब्ल्यूआईडब्ल्यू, मैंने अन्य प्रकार के डिवाइस मैपर उपकरणों पर एक ही तरह का व्यवहार देखा है - विशेष रूप से एनएसएस पूल के साथ । मर्ज-सक्षम लिखते हैं dmडिवाइस पर एक उच्च प्रतीक्षा (और लंबी कतार) अंतर्निहित भौतिक डिवाइस की तुलना में होती है जबकि पढ़े गए अनुरोध और बिना किसी विलय के लिखते हैं मुख्य रूप से अप्रभावित हैं। मुझे अभी तक नहीं पता है कि यह केवल एक प्रस्तुति त्रुटि है जिस तरह से प्रतीक्षा की गणना की जाती है या कतारबद्ध / विलय एल्गोरिदम की प्रकृति के कारण वास्तव में लंबे समय तक प्रतिक्रिया समय है।
वबबिट

1
में से एक Systemtap आईओ स्क्रिप्ट संभवतः क्या चल रहा है में अतिरिक्त जानकारी के साथ आप प्रदान कर सकते हैं। io_submit.stp, ioblktime.stp और biolatency-nd.stp शुरू करने के लिए अच्छी जगहें हो सकती हैं।
कासंद्री

जवाबों:


2

जैसा कि उपयोगकर्ता-वैबिट बताता है, अनुरोध-विलय चल रहा है। आप देख सकते हैं कि कॉलम में एवरग्रीक-एसज़, औसत अनुरोध आकार - जो एक महत्वपूर्ण वृद्धि दर्शाता है।

अब 'प्रतीक्षा' कतार में बिताया गया समय है और साथ ही उन अनुरोधों को पूरा करने में लगने वाला समय। यदि एक छोटा सा अनुरोध, चलो इसे 'x' कहते हैं, को अन्य अनुरोधों के एक जोड़े के साथ मिलाया जाता है (y और z, x के बाद जारी किया जाता है), फिर x होगा

  • कतार में y के साथ विलय होने की प्रतीक्षा करें
  • कतार में रुको z के साथ विलय कर दिया जाएगा
  • (x, y, z) पूरा होने की प्रतीक्षा करें

यह स्पष्ट रूप से प्रतीक्षित आँकड़ा पर नकारात्मक प्रभाव डालेगा, इसका कारण यह है कि प्रतीक्षारत तरीके की गणना की जाती है, वास्तव में अपने आप में एक समस्या का संकेत दिए बिना।

अब आइए / देव / sdb (dev8-16) पर एक नज़र डालते हैं। क्या आप जानते हैं कि आप उस रास्ते का उपयोग नहीं कर रहे हैं? आपके मल्टीपथ कॉन्फिग में दो प्राथमिकता समूह हैं, एक है

स्थिति = सक्षम

और पर है

स्थिति = सक्रिय

आपके पास शायद है

path_grouping_policy विफलता

आपके कॉन्फ़िगरेशन में (जो डिफ़ॉल्ट है)।

यदि आप दोनों रास्तों के नीचे होने पर IO त्रुटियों को रोकना चाहते हैं, तो आप कोशिश कर सकते हैं:

        सुविधाएँ "1 कतार_लिफ़_नो_पाथ"
अपने बहुपथ पर

अब असली सवाल यह है कि दोनों रास्ते नीचे क्यों जाते हैं?

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