दो हार्ड ड्राइव: एक ही चश्मा, अलग गति। कॉन्फ़िगरेशन समस्या को खोजने की आवश्यकता है


4

मेरे पास दो नोड्स हैं (प्रत्येक 3 समर्पित डेटा ड्राइव के साथ) जो काफी भिन्न लेखन गति दिखा रहे हैं। उनका 'hdparm' आउटपुट समान दिखता है और उनका 'hdparm -t -T' आउटपुट तुलनीय है, लेकिन एक माउंटेड फाइल सिस्टम पर 'dd' कमांड चलाने से काफी अलग राइट स्पीड मिलती है। रीड गति का परीक्षण करने के लिए 'dd' का उपयोग करने से फिर से समान परिणाम मिलते हैं।

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

मैं जाँच करने के लिए मापदंडों के विचारों की तलाश कर रहा हूँ या चलाने के लिए अन्य परीक्षण जो मुझे प्रदर्शन की विसंगति को सुलझाने में मदद कर सकते हैं। ऐसा लगता है कि यह ओएस / एफएस स्तर पर है, लेकिन मुझे यकीन नहीं है कि क्या देखना है। दोनों माउंटेड फाइल सिस्टम EXT4 हैं, जिसमें noatime और user_xattr सक्षम हैं।

तेज़ सर्वर:

hdparm -t -T उत्पादन:

/dev/sdb1:
 Timing cached reads:   2138 MB in  2.00 seconds = 1070.08 MB/sec
 Timing buffered disk reads:  232 MB in  3.02 seconds =  76.84 MB/sec

एक 4GB परीक्षण फ़ाइल बाहर लेखन

$ dd bs=4K if=/dev/zero of=/mnt/vol1/test.file count=1M
1048576+0 records in
1048576+0 records out
4294967296 bytes (4.3 GB) copied, 40.1102 s, 107 MB/s
0.20user 10.91system 0:40.14elapsed 27%CPU (0avgtext+0avgdata 3472maxresident)k
16inputs+8388608outputs (1major+263minor)pagefaults 0swaps

उस फ़ाइल को डिस्क से वापस पढ़ना (और / dev / null के लिए)

$ dd bs=4K of=/dev/null if=/mnt/vol1/test.file count=1M
1048576+0 records in
1048576+0 records out
4294967296 bytes (4.3 GB) copied, 53.3914 s, 80.4 MB/s
0.19user 5.80system 0:53.53elapsed 11%CPU (0avgtext+0avgdata 3488maxresident)k
8389872inputs+0outputs (2major+264minor)pagefaults 0swaps

धीमा नोड:

hdparm -t -T उत्पादन

/dev/sdc1:
 Timing cached reads:   1982 MB in  2.00 seconds = 991.27 MB/sec
 Timing buffered disk reads:  224 MB in  3.02 seconds =  74.16 MB/sec

$ dd bs=4K if=/dev/zero of=/mnt/vol1/test.file count=1M
1048576+0 records in
1048576+0 records out
4294967296 bytes (4.3 GB) copied, 98.1583 s, 43.8 MB/s
0.35user 17.58system 1:38.17elapsed 18%CPU (0avgtext+0avgdata 3456maxresident)k
8inputs+8388608outputs (0major+263minor)pagefaults 0swaps


$ dd bs=4k of=/dev/null if=/mnt/vol1/test.file count=1M
1048576+0 records in
1048576+0 records out
4294967296 bytes (4.3 GB) copied, 54.7789 s, 78.4 MB/s
0.25user 10.84system 0:54.92elapsed 20%CPU (0avgtext+0avgdata 3488maxresident)k
8389864inputs+0outputs (2major+263minor)pagefaults 0swaps

ddकमांड का उपयोग करके फिर से चलाएं time, ताकि हम सीपीयू के उपयोग को देख सकें। इसके अलावा, क्या दो नोड्स यथार्थवादी परिस्थितियों में या केवल कृत्रिम परीक्षण स्थितियों के तहत अलग-अलग लिखने की गति दिखा रहे हैं? (दो फाइलें ड्राइव पर अलग-अलग भौतिक स्थानों पर हो सकती हैं।) ड्राइव मेक / मॉडल क्या है?
डेविड श्वार्ट्ज

दोनों ड्राइव बहुत खाली हैं, इसलिए उन्हें प्लेटर के समान भागों का उपयोग करना चाहिए। राइट्स कृत्रिम परिस्थितियों में हैं, लेकिन वास्तविक दुनिया की परिस्थितियों में समान व्यवहार देखा जाता है (हम इन नोड्स पर वितरित फ़ाइल सिस्टम की कुछ बेंचमार्किंग कर रहे हैं)।
बक

timeअनुरोध के अनुसार आउटपुट जोड़ा गया
बक

इसके अलावा, अगर मैं dd512 बाइट लिखता हूं, तो 4K लिखते हैं, गति समान है।
बक

जवाबों:


1

प्रयत्न, कोशिश

hdparm -i -I /dev/sda

दोनों ड्राइव्स के लिए और आउटपुट को अलग करने के लिए, यह आपको दिखाना चाहिए कि क्या कोई dma या लुकहेड सेटिंग है जो दोनों के लिए अलग है।

आपके डिस्ट्रो के आधार पर, यह सुनिश्चित करने के लिए कि वे समान हैं, HDParm सेटिंग लगाने के लिए एक जगह होनी चाहिए।

मैं केबलों की दोहरी जांच भी करूंगा। यह सिर्फ एक ड्राइव हो सकता है बस खराब भी है, आप स्मार्ट ईसीसी दरों और इस तरह की जांच करना चाह सकते हैं।

/usr/sbin/smartctl -A -H /dev/sda
/usr/sbin/smartctl -a /dev/sda

क्या मैं अपने ड्राइव पर स्मार्ट की जांच करने के लिए उपयोग करता हूं।


0
  1. शायद एक डिस्क खराब है। त्रुटियों के लिए जाँच करें। (यह भी देखने के लिए आउटपुट की जांच करें कि क्या वे वास्तव में समान हैं: मॉडल, फ़र्मवेयर, आकार और सेक्टर आकार)

    smartctl -a / dev / sdb smartctl -a / dev / sdc

    यदि आपके पास त्रुटियां हैं, तो एक छोटा परीक्षण चलाएं (2 मिनट लगते हैं):

    smartctl -t short / dev / sdb

    यदि परीक्षण बिना किसी त्रुटि के गुजरता है, तो "शॉर्ट" के बजाय "लंबे" के साथ फिर से चलाएं (घंटे लगते हैं)।

    और फिर जब यह हो जाता है, तो फिर से "-ए" के साथ जांचें, और उन्हें स्थानांतरित करने के लिए उस क्षेत्र में अपनी डिस्क पर शून्य लिखें (यह डेटा को नष्ट कर देता है! आप जो = डालते हैं, उसके बारे में बहुत सावधान रहें क्योंकि वही है जो ओवरराइट किया गया है शून्य के साथ कच्चे स्तर)।

    जैसे। यदि आपके सेक्टर का आकार 512 है और LBA 555 खराब है, तो इस कमांड को टाइप करें (डेटा को नष्ट कर देता है!)

    dd if = / dev / zero of = / dev / sdb bs = 512 गिनती = 1 तलाश = 555

    मैं एक उच्च गिनती करूँगा, इसलिए आपको परीक्षण और शून्य लिखने की ज़रूरत नहीं है, क्योंकि आमतौर पर बुरे क्षेत्र एक-दूसरे के बगल में होते हैं। (अधिक डेटा नष्ट कर देता है!)

    dd if = / dev / zero of = / dev / sdb bs = 512 काउंट = 500 सीक = 555

  2. हो सकता है कि आपका संरेखण गलत हो। सुनिश्चित करें कि सभी विभाजन 63 के बाद या उसके बाद शुरू होते हैं और यदि आपके तार्किक क्षेत्र का आकार आपके भौतिक क्षेत्र के आकार से छोटा है, तो सुनिश्चित करें कि आपका संरेखण भौतिक / तार्किक द्वारा विभाज्य है। यह लिखने की गति को बहुत प्रभावित करना चाहिए, लेकिन पढ़ने की गति को बहुत अधिक नहीं बदलना / बिल्कुल नहीं।

    जैसे। यदि भौतिक 4096 है और तार्किक 512 है, तो आपका स्टार्ट सेक्टर 8 (4096/512) से विभाज्य होना चाहिए। और कुछ डिस्क पर, शुरुआत 63 से बहुत अधिक होनी चाहिए। उन डिस्क पर, मैं पहले विभाजन के शुरू होने के रूप में 252 का उपयोग करता हूं।

    और अगर आप SSD का उपयोग कर रहे हैं, तो आपको erase block को भी संरेखित करना होगा। संरेखित करने के लिए एक सुरक्षित संख्या 129024 का गुणक है (जो पुराने डिस्क पर 63 आवश्यकता को पूरा करता है, 4096 बाइट सेक्टर [अधिकांश सीगेट और डब्लूडी ग्रीन डिस्क के रूप में उन्नत प्रारूप], अधिकांश एसएसडी पर 1024 एमबी और दुर्लभ एसएसडी पर 20 एमबी। )

    SSDs के साथ, यदि वे धीमी गति से लगते हैं, तो आपको उन्हें उपयोग करने से पहले विक्रेता द्वारा दिए गए उपकरण के साथ मिटा देना चाहिए, या TRIM का उपयोग करना चाहिए।

  3. उचित बेंचमार्किंग का उपयोग करें।

    जब तक आप conv = fdatasync या किसी अन्य विधि का उपयोग नहीं करते हैं, तब तक आप dd के साथ परीक्षण नहीं लिख सकते। डेविड श्वार्ट्ज ने "समय dd ..." का उपयोग करने का सुझाव दिया, लेकिन अगर आप conv = fdatasync का उपयोग करते हैं, तो यह आपको स्वयं को पुन: परिकलित करने की आवश्यकता के बिना dd में सही समय और गति बताएगा। यदि आपके पास बहुत सारी रैम है या कैश लिखते हैं, तो आप अपने रैम प्लस डिस्क को माप रहे हैं यदि आप एक विकल्प जैसे कि conv = fdatasync का उपयोग नहीं करते हैं। http://romanrm.ru/en/dd-benchmark

    जैसे।

    dd bs = 4K if = / dev / zero of = / mnt / vol1 / test.file count = 1M conv = fdatasync

  4. उचित बेंचमार्किंग का उपयोग करें। (भाग 2)

    कई फ़ाइल सिस्टम या डिस्क शून्य लिखते समय बहुत अलग तरीके से प्रदर्शन करेंगे। आपको सर्वोत्तम परिणामों के लिए यादृच्छिक फ़ाइलों का उपयोग करने की आवश्यकता है।

    जैसे।

    राम की पहली प्रति

    cp /somewhere/with/big/files/bigfile.iso / dev / shm

    चालू परीक्षण

    dd bs = 4K अगर = / dev / shm / bigfile.iso of = / mnt / vol1 / test.file count = 1M conv = fdatasync

    या

    यादृच्छिक फ़ाइल तैयार करें

    dd if = / dev / random = of / dev / shm / randfile bs = 1M count = 500

    चालू परीक्षण

    dd bs = 4K if = / dev / shm / randfile of = / mnt / vol1 / test.file count = 1M conv = fdatasync

  5. इसके अलावा, यदि आपके डिस्क वास्तव में समान नहीं हैं, या अलग फाइल सिस्टम हैं, तो वे 4k ब्लॉक आकार के साथ बहुत अलग तरीके से प्रदर्शन करेंगे। इसके अलावा 128k और 1M का परीक्षण करें।

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