लिनक्स पर जेबीओडी प्रदर्शन के लिए एसएएस बहुपथ में सुधार


10

मैं लिनक्स के साथ कुछ सन हार्डवेयर पर स्टोरेज सेटअप को ऑप्टिमाइज़ करने की कोशिश कर रहा हूँ। किसी भी विचार की बहुत सराहना की जाएगी।

हमारे पास निम्नलिखित हार्डवेयर हैं:

  • सन ब्लेड X6270
  • 2 * LSISAS1068E SAS नियंत्रकों
  • 2 * सूर्य J4400 JBODs 1 टीबी डिस्क के साथ (24 डिस्क प्रति JBOD)
  • फेडोरा कोर 12
  • एफसी 13 से 2.6.33 रिलीज कर्नेल (एफसी 12 से नवीनतम 2.6.31 कर्नेल के साथ भी प्रयास किया गया, वही परिणाम)

एसएएस हार्डवेयर के लिए डेटाशीट यहां दी गई है:

http://www.sun.com/storage/storage_networking/hba/sas/PCIe.pdf

यह PCI एक्सप्रेस 1.0a, 8x लेन का उपयोग कर रहा है। 250 एमबी / सेकंड प्रति लेन की बैंडविड्थ के साथ, हमें 2000 एमबी / सेकंड प्रति एसएएस कंट्रोलर करने में सक्षम होना चाहिए।

प्रत्येक नियंत्रक प्रति पोर्ट 3 जीबी / सेक कर सकता है और इसमें दो 4 पोर्ट PHY हैं। हम एक नियंत्रक से एक JBOD के लिए दोनों PHYs कनेक्ट करते हैं। तो JBOD और कंट्रोलर के बीच में हमारे पास 2 PHY * 4 SAS पोर्ट * 3 Gb / sec = 24 Gb / sec of बैंडविड्थ है, जो PCI एक्सप्रेस बैंडविड्थ से अधिक है।

लेखन कैशिंग सक्षम होने और बड़े लिखने के दौरान, प्रत्येक डिस्क लगभग 80 एमबी / सेकंड (डिस्क की शुरुआत के पास) को बनाए रख सकती है। 24 डिस्क के साथ, इसका मतलब है कि हमें जेबीओडी के अनुसार 1920 एमबी / सेकंड करने में सक्षम होना चाहिए।

बहुपथ {
  rr_min_io 100
  यूआईडी ०
  path_grouping_policy मल्टीबस
  फेलबैक मैनुअल
  path_selector "राउंड-रॉबिन 0"
  rr_weight प्राथमिकताएँ
  उर्फ सोमालियास
  no_path_retry कतार
  मोड 0644
  गिद ०
  wwp के रूप में
}

मैंने rr_min_io के लिए 50, 100, 1000 के मूल्यों की कोशिश की, लेकिन इससे बहुत फर्क नहीं पड़ता।

Rr_min_io के अलग-अलग होने के साथ-साथ मैंने dd को शुरू करने के बीच कुछ देरी को जोड़ने की कोशिश की, ताकि एक ही समय में एक ही PHY पर लिखने से सभी को रोका जा सके, लेकिन इससे कोई फ़र्क नहीं पड़ा, इसलिए मुझे लगता है कि I / O का ठीक से प्रसार नहीं हो रहा है।

/ Proc / interrupts के अनुसार, SAS नियंत्रक एक "IR-IO-APIC-fasteoi" रुकावट योजना का उपयोग कर रहे हैं। किसी कारण से मशीन में केवल कोर # 0 इन इंटरप्ट को संभाल रहा है। मैं प्रत्येक एसएएस नियंत्रक के लिए व्यवधान को संभालने के लिए एक अलग कोर निर्दिष्ट करके प्रदर्शन को थोड़ा सुधार सकता हूं:

गूंज 2> / proc / irq / 24 / smp_affinity
इको 4> / proc / irq / 26 / smp_affinity

डिस्क पर लिखने के लिए dd का उपयोग करने से "फ़ंक्शन कॉल इंटरप्ट" उत्पन्न होता है (कोई भी विचार नहीं है कि ये क्या हैं), जो कि कोर # 4 द्वारा संभाला जाता है, इसलिए मैं अन्य प्रक्रियाओं को भी इस कोर से दूर रखता हूं।

मैं 48 dd (प्रत्येक डिस्क के लिए एक) चलाता हूं, उन्हें कोर को असाइन करने से रोकता हूं ताकि इस तरह से व्यवधान न हो:

कार्यपत्र -c somecore dd if = / dev / zero of = / dev / mapper / mpathx oflag = direct bs = 128M

oflag = डायरेक्ट किसी भी तरह के बफर कैश को शामिल होने से रोकता है।

मेरी कोई भी कोर अधिकतम नहीं लगती। इंटरप्ट्स से निपटने वाले कोर ज्यादातर निष्क्रिय होते हैं और अन्य सभी कोर I / O पर इंतजार कर रहे हैं क्योंकि एक उम्मीद करेगा।

Cpu0: 0.0% us, 1.0% sy, 0.0% ni, 91.2% id, 7.5% wa, 0.0% hi, 0.2% si, 0.0% st
Cpu1: 0.0% us, 0.8% sy, 0.0% ni, 93.0% id, 0.2% wa, 0.0% hi, 6.0% si, 0.0% st
Cpu2: 0.0% us, 0.6% sy, 0.0% ni, 94.4% id, 0.1% wa, 0.0% hi, 4.8% si, 0.0% st
Cpu3: 0.0% us, 7.5% sy, 0.0% ni, 36.3% id, 56.1% wa, 0.0% hi, 0.0% si, 0.0% st
Cpu4: 0.0% us, 1.3% sy, 0.0% ni, 85.7% id, 4.9% wa, 0.0% hi, 8.1% si, 0.0% st
Cpu5: 0.1% us, 5.5% sy, 0.0% ni, 36.2% id, 58.3% wa, 0.0% hi, 0.0% si, 0.0% st
Cpu6: 0.0% us, 5.0% sy, 0.0% ni, 36.3% id, 58.7% wa, 0.0% hi, 0.0% si, 0.0% st
Cpu7: 0.0% us, 5.1% sy, 0.0% ni, 36.3% id, 58.5% wa, 0.0% hi, 0.0% si, 0.0% st
Cpu8: 0.1% us, 8.3% sy, 0.0% ni, 27.2% id, 64.4% wa, 0.0% hi, 0.0% si, 0.0% st
Cpu9: 0.1% us, 7.9% sy, 0.0% ni, 36.2% id, 55.8% wa, 0.0% hi, 0.0% si, 0.0% st
Cpu10: 0.0% us, 7.8% sy, 0.0% ni, 36.2% id, 56.0% wa, 0.0% hi, 0.0% si, 0.0% st
Cpu11: 0.0% us, 7.3% sy, 0.0% ni, 36.3% id, 56.4% wa, 0.0% hi, 0.0% si, 0.0% st
Cpu12: 0.0% us, 5.6% sy, 0.0% ni, 33.1% id, 61.2% wa, 0.0% hi, 0.0% si, 0.0% st
Cpu13: 0.1% us, 5.3% sy, 0.0% ni, 36.1% id, 58.5% wa, 0.0% hi, 0.0% si, 0.0% st
Cpu14: 0.0% us, 4.9% sy, 0.0% ni, 36.4% id, 58.7% wa, 0.0% hi, 0.0% si, 0.0% st
Cpu15: 0.1% us, 5.4% sy, 0.0% ni, 36.5% id, 58.1% wa, 0.0% hi, 0.0% si, 0.0% st

इस सब को देखते हुए, "dstat 10" को चलाने के द्वारा रिपोर्ट की गई थ्रूपुट 2200-2300 एमबी / सेकंड की सीमा में है।

ऊपर दिए गए गणित को देखते हुए मुझे 2 * 1920 ~ = 3600+ एमबी / सेकंड की सीमा में कुछ की उम्मीद होगी।

किसी को भी मेरे लापता बैंडविड्थ चला गया है, जहां किसी भी विचार है?

धन्यवाद!


क्या LSI SAS कंट्रोलर्स का कैश राइट-थ्रू सेट होता है? (बड़े अनुक्रमिक कार्यभार के लिए राइट-बैक धीमा होगा)। Dd के लिए एक छोटे bs के साथ भी परीक्षण करना चाह सकते हैं, जैसे bs = 1M।
ब्रायन

जवाबों:


1

अच्छा, अच्छी तरह से तैयार सवाल :)

मैं खुद एक स्पीड'फीड-मैन हूं और मुझे लगता है कि आप ईमानदार होने के लिए पैसे पर हैं। मैं आपके थ्रूपुट को देखने की अपेक्षा आधे से कम था, लेकिन मुझे लगता है कि आपको मिला है कि मामूली, और अपेक्षित अक्षमताओं में बिल्ड-अप है। उदाहरण के लिए, पीसीआई बस के लिए हर समय 100% प्राप्त करना बहुत कठिन है, कुल मिलाकर 90% कम दर पर। इस घबराहट को देखते हुए इसका मतलब यह भी होगा कि PHYs को हर समय 100% 'फीड' नहीं किया जाएगा, इसलिए आप वहाँ थोड़ा खो देते हैं, उसी तरह कैश, डिस्क, गैर-कोलड्रॉप्ड इंटरप्ट, IO शेड्यूलिंग: मूल रूप से। यह मामूली अक्षमता समय की अक्षमता का मामूली समय है ... और इसी तरह, यह 5-10% से अधिक होने की उम्मीद अक्षमताओं को अपने दम पर समाप्त करता है। मैंने HP DL सर्वर के साथ W2K3 का उपयोग करके और फिर NLB के साथ बात करते हुए इस तरह की चीज़ देखी है ' कई एनआईसी पर एड - निराशाजनक लेकिन समझ में आता है। वैसे भी मेरा 2 सी है, क्षमा करें यह बहुत सकारात्मक नहीं है।

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