Etcd के लिए पर्याप्त प्रदर्शन के लिए fio के साथ डिस्क की जाँच कैसे करें

टिप्पणी। अनुवाद।: यह लेख आदि डेटाबेस के संचालन से संबंधित एक वास्तविक समस्या के समाधान की तलाश में आईबीएम क्लाउड इंजीनियरों द्वारा किए गए एक लघु-शोध का परिणाम है। एक समान कार्य हमारे लिए प्रासंगिक था, लेकिन लेखकों के विचारों और कार्यों की दिशा व्यापक संदर्भ में दिलचस्प हो सकती है।

Etcd के लिए पर्याप्त प्रदर्शन के लिए fio के साथ डिस्क की जाँच कैसे करें

पूरे लेख का संक्षिप्त सारांश: फियो और आदि

आदि क्लस्टर का प्रदर्शन अंतर्निहित भंडारण की गति पर अत्यधिक निर्भर है। प्रदर्शन की निगरानी के लिए, आदि विभिन्न प्रोमेथियस मेट्रिक्स निर्यात करता है। उनमें से एक है wal_fsync_duration_seconds. आदि दस्तावेज़ में यह कहते हैं, यदि इस मीट्रिक का 99वाँ प्रतिशत 10 एमएस से अधिक न हो तो भंडारण को काफी तेज़ माना जा सकता है...

यदि आप लिनक्स मशीनों पर एक आदि क्लस्टर स्थापित करने पर विचार कर रहे हैं और परीक्षण करना चाहते हैं कि क्या स्टोरेज ड्राइव (जैसे एसएसडी) पर्याप्त तेज़ हैं, तो हम एक लोकप्रिय I/O परीक्षक का उपयोग करने की सलाह देते हैं जिसे कहा जाता है FiO. बस निम्नलिखित कमांड चलाएँ (निर्देशिका test-data परीक्षण की जा रही ड्राइव के माउंटेड पार्टीशन में स्थित होना चाहिए):

fio --rw=write --ioengine=sync --fdatasync=1 --directory=test-data --size=22m --bs=2300 --name=mytest

जो कुछ बचा है वह आउटपुट को देखना और जांचना है कि क्या यह 99वें प्रतिशतक में फिट बैठता है fdatasync 10 एमएस पर. यदि ऐसा है, तो आपकी ड्राइव काफी तेज़ है। यहाँ एक उदाहरण आउटपुट है:

fsync/fdatasync/sync_file_range:
  sync (usec): min=534, max=15766, avg=1273.08, stdev=1084.70
  sync percentiles (usec):
   | 1.00th=[ 553], 5.00th=[ 578], 10.00th=[ 594], 20.00th=[ 627],
   | 30.00th=[ 709], 40.00th=[ 750], 50.00th=[ 783], 60.00th=[ 1549],
   | 70.00th=[ 1729], 80.00th=[ 1991], 90.00th=[ 2180], 95.00th=[ 2278],
   | 99.00th=[ 2376], 99.50th=[ 9634], 99.90th=[15795], 99.95th=[15795],
   | 99.99th=[15795]

कुछ नोट:

  1. उपरोक्त उदाहरण में हमने मापदंडों को समायोजित किया है --size и --bs किसी विशिष्ट मामले के लिए. से सार्थक परिणाम प्राप्त करना fio, वे मान निर्दिष्ट करें जो आपके उपयोग के मामले के लिए उपयुक्त हों। उन्हें कैसे चुनें, इस पर नीचे चर्चा की जाएगी।
  2. केवल परीक्षण के दौरान fio डिस्क सबसिस्टम को लोड करता है। वास्तविक जीवन में, यह संभव है कि अन्य प्रक्रियाएँ (संबंधित प्रक्रियाओं के अलावा)। wal_fsync_duration_seconds). इस तरह के अतिरिक्त भार में वृद्धि हो सकती है wal_fsync_duration_seconds. दूसरे शब्दों में, यदि 99वाँ प्रतिशतक परीक्षण से प्राप्त हुआ fio, केवल 10 एमएस से थोड़ा कम, इस बात की अच्छी संभावना है कि भंडारण प्रदर्शन अपर्याप्त है।
  3. परीक्षण के लिए आपको संस्करण की आवश्यकता होगी fio 3.5 से कम नहीं, क्योंकि पुराने संस्करण परिणामों को एकत्रित नहीं करते हैं fdatasync प्रतिशतक के रूप में.
  4. उपरोक्त निष्कर्ष समग्र निष्कर्ष का एक छोटा सा अंश मात्र है fio.

फियो और आदि के बारे में विवरण

वाल्स आदि के बारे में कुछ शब्द

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

इस प्रकार, हर बार जब कोई ग्राहक केवी स्टोर में एक कुंजी जोड़ता है या किसी मौजूदा कुंजी के मूल्य को अपडेट करता है, तो आदि ऑपरेशन का विवरण वाल में जोड़ता है, जो लगातार स्टोरेज में एक नियमित फ़ाइल है। आदि को 100% सुनिश्चित होना चाहिए कि आगे बढ़ने से पहले वाल प्रविष्टि वास्तव में सहेजी गई है। लिनक्स पर इसे प्राप्त करने के लिए, सिस्टम कॉल का उपयोग करना पर्याप्त नहीं है write, चूंकि भौतिक माध्यम पर लिखने की कार्रवाई में देरी हो सकती है। उदाहरण के लिए, लिनक्स कर्नेल कैश में वाल प्रविष्टि को कुछ समय के लिए मेमोरी में (जैसे पेज कैश) रख सकता है। यह सुनिश्चित करने के लिए कि डेटा मीडिया में लिखा गया है, लिखने के बाद एक सिस्टम कॉल लागू किया जाना चाहिए fdatasync - यह बिल्कुल वही है जो आदि करता है (जैसा कि निम्नलिखित आउटपुट में देखा जा सकता है strace; यहाँ 8 - वाल फ़ाइल हैंडल):

21:23:09.894875 lseek(8, 0, SEEK_CUR)   = 12808 <0.000012>
21:23:09.894911 write(8, ".20210220361223255266632$1020103026"34"rn3fo"..., 2296) = 2296 <0.000130>
21:23:09.895041 fdatasync(8)            = 0 <0.008314>

दुर्भाग्य से, लगातार भंडारण पर लिखने में कुछ समय लगता है। Fdatasync कॉल को पूरा करने में लंबा समय लगने से आदि प्रदर्शन प्रभावित हो सकता है। भंडार के लिए दस्तावेज़ में इंगित किया गया हैपर्याप्त प्रदर्शन के लिए यह आवश्यक है कि सभी कॉलों की अवधि का 99वां प्रतिशत हो fdatasync किसी फ़ाइल पर लिखते समय, WAL 10 एमएस से कम था। भंडारण से संबंधित अन्य मीट्रिक भी हैं, लेकिन यह लेख इसी पर केंद्रित होगा।

फ़ियो का उपयोग करके भंडारण का मूल्यांकन करना

आप उपयोगिता का उपयोग करके मूल्यांकन कर सकते हैं कि एक निश्चित भंडारण आदि के साथ उपयोग के लिए उपयुक्त है या नहीं FiO - एक लोकप्रिय I/O परीक्षक। ध्यान रखें कि डिस्क I/O अलग-अलग तरीकों से हो सकता है: सिंक/एसिंक, सिस्टम कॉल के कई अलग-अलग वर्ग, आदि। सिक्के का दूसरा पहलू यह है fio उपयोग करना अत्यंत कठिन। उपयोगिता में कई पैरामीटर हैं, और उनके मूल्यों के विभिन्न संयोजनों से पूरी तरह से अलग परिणाम मिलते हैं। आदि के लिए एक उचित अनुमान प्राप्त करने के लिए, आपको यह सुनिश्चित करना होगा कि फियो द्वारा उत्पन्न लेखन भार, वाल फ़ाइलों के लिए आदि के लेखन भार के जितना संभव हो उतना समान है:

  • इसका मतलब यह है कि उत्पन्न fio कार्यभार कम से कम एक फ़ाइल में क्रमिक लेखन की एक श्रृंखला होनी चाहिए, जहां प्रत्येक लेखन ऑपरेशन में एक सिस्टम कॉल शामिल होता है writeके बाद fdatasync.
  • अनुक्रमिक रिकॉर्डिंग सक्षम करने के लिए, आपको ध्वज निर्दिष्ट करना होगा --rw=write.
  • कि fio कॉल का उपयोग करके लिखा write (और अन्य सिस्टम कॉल नहीं - उदाहरण के लिए, pwrite), ध्वज का उपयोग करें --ioengine=sync.
  • अंत में, झंडा --fdatasync=1 गारंटी देता है कि प्रत्येक के पीछे write होना चाहिए fdatasync.
  • हमारे उदाहरण में दो अन्य पैरामीटर: --size и --bs - विशिष्ट उपयोग के मामले के आधार पर भिन्न हो सकता है। अगला भाग वर्णन करेगा कि उन्हें कैसे कॉन्फ़िगर किया जाए।

हमने फ़ियो क्यों चुना और हमने इसे कैसे सेट अप करना सीखा

यह नोट हमारे सामने आए एक वास्तविक मामले से आया है। हमारे पास कुबेरनेट्स v1.13 पर प्रोमेथियस पर निगरानी के साथ एक क्लस्टर था। सॉलिड स्टेट ड्राइव का उपयोग आदि v3.2.24 के लिए भंडारण के रूप में किया गया था। आदि मेट्रिक्स ने बहुत अधिक विलंबता दिखाई fdatasync, तब भी जब क्लस्टर निष्क्रिय था। हमने पाया कि ये मेट्रिक्स बहुत संदिग्ध हैं और हमें यकीन नहीं था कि वे वास्तव में क्या दर्शाते हैं। इसके अलावा, क्लस्टर में वर्चुअल मशीनें शामिल थीं, इसलिए यह बताना असंभव था कि देरी वर्चुअलाइजेशन के कारण थी या एसएसडी को दोष देना था।

इसके अतिरिक्त, हम हार्डवेयर और सॉफ़्टवेयर कॉन्फ़िगरेशन में विभिन्न परिवर्तनों को देख रहे थे, इसलिए हमें उनका मूल्यांकन करने के लिए एक तरीके की आवश्यकता थी। बेशक, प्रत्येक कॉन्फ़िगरेशन में आदि चलाना और संबंधित प्रोमेथियस मेट्रिक्स को देखना संभव होगा, लेकिन इसके लिए महत्वपूर्ण प्रयास की आवश्यकता होगी। हमें किसी विशिष्ट कॉन्फ़िगरेशन का मूल्यांकन करने के लिए एक सरल तरीके की आवश्यकता थी। हम आदि से आने वाले प्रोमेथियस मेट्रिक्स की अपनी समझ का परीक्षण करना चाहते थे।

ऐसा करने के लिए, दो समस्याओं को हल करना होगा:

  • सबसे पहले, वाल फाइलों पर लिखते समय आदि उत्पन्न होने वाला I/O लोड कैसा दिखता है? कौन से सिस्टम कॉल का उपयोग किया जाता है? राइट ब्लॉक का आकार क्या है?
  • दूसरे, मान लीजिए कि हमारे पास उपरोक्त प्रश्नों के उत्तर हैं। संबंधित लोड को कैसे पुन: उत्पन्न करें fio? आख़िरकार fio - बहुत सारे मापदंडों के साथ अत्यंत लचीली उपयोगिता (इसे सत्यापित करना आसान है, उदाहरण के लिए, यहां - लगभग। अनुवाद).

हमने समान कमांड-आधारित दृष्टिकोण का उपयोग करके दोनों समस्याओं को हल किया lsof и strace:

  • साथ lsof आप किसी प्रक्रिया द्वारा उपयोग किए गए सभी फ़ाइल डिस्क्रिप्टर, साथ ही उनके द्वारा संदर्भित फ़ाइलों को देख सकते हैं।
  • साथ strace आप पहले से चल रही प्रक्रिया का विश्लेषण कर सकते हैं या किसी प्रक्रिया को चलाकर उसका निरीक्षण कर सकते हैं। कमांड इस प्रक्रिया द्वारा की गई सभी सिस्टम कॉल और, वैकल्पिक रूप से, इसके वंशजों को प्रदर्शित करता है। उत्तरार्द्ध उन प्रक्रियाओं के लिए महत्वपूर्ण है जो फोर्किंग कर रहे हैं, और आदि ऐसी प्रक्रियाओं में से एक है।

पहला काम जो हमने किया वह था उपयोग strace कुबेरनेट्स क्लस्टर में आदि सर्वर का अध्ययन करने के लिए जब यह निष्क्रिय था।

इस प्रकार, यह पता चला कि वाल में राइट ब्लॉक बहुत सघन रूप से समूहीकृत हैं, उनमें से अधिकांश 2200-2400 बाइट्स की सीमा में हैं। यही कारण है कि इस आलेख की शुरुआत में कमांड ध्वज का उपयोग करता है --bs=2300 (bs - प्रत्येक रिकॉर्डिंग ब्लॉक के बाइट्स में आकार fio).

कृपया ध्यान दें कि आदि राइट ब्लॉक आकार संस्करण, परिनियोजन, पैरामीटर मान आदि के आधार पर भिन्न हो सकते हैं। - इससे अवधि प्रभावित होती है fdatasync. यदि आपके पास समान उपयोग का मामला है, तो विश्लेषण करें strace नवीनतम मान प्राप्त करने के लिए आपकी आदि प्रक्रियाएँ।

फिर, फ़ाइल सिस्टम के साथ आदि कैसे काम करता है इसकी स्पष्ट और व्यापक समझ प्राप्त करने के लिए, हमने इसे नीचे से चलाया strace झंडे के साथ -ffttT. इससे चाइल्ड प्रक्रियाओं को कैप्चर करना और प्रत्येक के आउटपुट को एक अलग फ़ाइल में लिखना संभव हो गया। इसके अलावा, प्रत्येक सिस्टम कॉल के प्रारंभ क्षण और अवधि के बारे में विस्तृत जानकारी प्राप्त की गई।

हमने कमांड का भी उपयोग किया lsofआउटपुट के बारे में आपकी समझ की पुष्टि करने के लिए strace किस फ़ाइल डिस्क्रिप्टर का उपयोग किस उद्देश्य के लिए किया गया था। नतीजा ये हुआ strace, ऊपर वाले के समान। सिंक्रनाइज़ेशन समय के साथ सांख्यिकीय हेरफेर ने पुष्टि की कि मीट्रिक wal_fsync_duration_seconds आदि से कॉल मेल खाता है fdatasync वाल फ़ाइल डिस्क्रिप्टर के साथ।

का उपयोग करके उत्पन्न करना fio आदि से लोड के समान कार्यभार, उपयोगिता दस्तावेज का अध्ययन किया गया और हमारे कार्य के लिए उपयुक्त मापदंडों का चयन किया गया। हमने सुनिश्चित किया कि सही सिस्टम कॉल शामिल थे और चलाकर उनकी अवधि की पुष्टि की fio से strace (जैसा कि आदि के मामले में किया गया था)।

पैरामीटर का मान निर्धारित करने पर विशेष ध्यान दिया गया --size. यह fio उपयोगिता द्वारा उत्पन्न कुल I/O लोड का प्रतिनिधित्व करता है। हमारे मामले में, यह मीडिया को लिखे गए बाइट्स की कुल संख्या है। यह कॉलों की संख्या से सीधे आनुपातिक है write (और fdatasync). एक निश्चित के लिए bs कॉल की संख्या fdatasync है size / bs.

चूँकि हम प्रतिशतक में रुचि रखते थे, इसलिए हमने यह सुनिश्चित करना चाहा कि नमूनों की संख्या सांख्यिकीय महत्व के लिए पर्याप्त बड़ी हो। और उन्होंने यह निर्णय लिया 10^4 (जो 22 एमबी के आकार के अनुरूप है) पर्याप्त होगा। छोटे पैरामीटर मान --size अधिक स्पष्ट शोर उत्पन्न किया (उदाहरण के लिए, कॉल)। fdatasync, जो सामान्य से अधिक समय लेता है और 99वें प्रतिशतक को प्रभावित करता है)।

यह आप पर निर्भर करता है

लेख बताता है कि कैसे उपयोग करें fio आप मूल्यांकन कर सकते हैं कि आदि के साथ उपयोग के लिए इच्छित मीडिया पर्याप्त तेज़ है या नहीं। अब यह आप पर निर्भर है! आप सेवा में एसएसडी-आधारित स्टोरेज के साथ वर्चुअल मशीनों का पता लगा सकते हैं आईबीएम क्लाउड.

अनुवादक से पी.एस

उपयोग के तैयार उदाहरणों के साथ fio अन्य समस्याओं के समाधान के लिए इसमें पाया जा सकता है प्रलेखन या सीधे करने के लिए परियोजना भंडार (दस्तावेज़ीकरण में उल्लिखित की तुलना में उनमें से कई अधिक हैं)।

अनुवादक से पी.पी.एस

हमारे ब्लॉग पर भी पढ़ें:

स्रोत: www.habr.com

एक टिप्पणी जोड़ें