अधिकतम थ्रूपुट के लिए ट्यूनिंग लिनक्स डिस्क कैशिंग व्यवहार


12

मैं यहां एक अधिकतम थ्रूपुट के मुद्दे पर चल रहा हूं और कुछ सलाह की जरूरत है जिस पर मेरे घुटनों को ट्यून करना है। हम बैकअप वितरण के लिए एक 10Gbit फाइलरवर चला रहे हैं। यह LSI MegaRAID कंट्रोलर पर दो डिस्क S-ATA2 सेटअप है। सर्वर को 24gig मेमोरी भी मिली।

हमें अपने अंतिम अपलोड किए गए बैकअप को अधिकतम थ्रूपुट के साथ मिरर करने की आवश्यकता है।

हमारे "हॉट" बैकअप के लिए RAID0 हमें लगभग 260 एमबी / सेक राइट और 275 एमबी / सेकंड रीड देता है। 20GB आकार के साथ एक परीक्षण किया गया tmpfs हमें 1GB / sec के आसपास देता है। इस तरह के थ्रूपुट की हमें जरूरत है।

अब मैं लिनक्स की वर्चुअल मेमोरी सबसिस्टम को आखिरी अपलोड की गई फाइलों को डिस्क में लिखने के बिना मेमोरी में यथासंभव लंबे समय तक कैश करने के लिए ट्यून कर सकता हूं (या इससे भी बेहतर: डिस्क पर लिखना और उन्हें मेमोरी में रखना)?

मैं निम्नलिखित sysctls को सेटअप करता हूं, लेकिन वे हमें वह थ्रूपुट नहीं देते जिसकी हम अपेक्षा करते हैं:

# VM pressure fixes
vm.swappiness = 20
vm.dirty_ratio = 70
vm.dirty_background_ratio = 30
vm.dirty_writeback_centisecs = 60000

इस सिद्धांत को हमें I / O को कैशिंग करने के लिए 16GB देना चाहिए और इसके लिखे जाने तक कुछ मिनट तक प्रतीक्षा करनी चाहिए। फिर भी जब मैं सर्वर को बेंचमार्क करता हूं तो मुझे लेखन पर कोई प्रभाव नहीं पड़ता है, थ्रूपुट नहीं बढ़ता है।

मदद या सलाह की जरूरत है।


क्या यह संभव नहीं होगा कि जल्द से जल्द लिखना शुरू किया जाए? अन्यथा यह अधिकतम बफर आकार तक पहुंचता है और अचानक रुक जाता है। यदि यह सब साथ लिख रहा था तो यह आपको अधिक समय देता है।
ज़ैन लिंक्स

मेरे पास 20 जीबी मेमोरी सिर्फ बफ़र्स के लिए है, क्योंकि मेरे एप्लिकेशन (बेस लाइनक्स + वीटस्पैड) 4 जीबी (कुल 24 जीबी) के तहत उपयोग करते हैं। मेरे बैकअप 20GB unter हैं। अगर मैं उन्हें बफर में लिख सकता हूं और फिर बैकअप चलाने के बाद क्रमिक रूप से डिस्क पर लिख दिया जाता है, तो इससे मेरे बैकअप स्रोत (वर्चुअल सर्वर) का डाउनटाइम काफी कम हो जाएगा। पुनश्च: सर्वर बाद में रुक सकता है, कोई बात नहीं। इसे ठीक होने में 30 मिनट का समय लगा :)
पीटर मेयर

ऐसा लगता है कि आप नेटवर्क पर डेटा को स्थानांतरित करने के लिए जो भी एप्लिकेशन का उपयोग कर रहे हैं, वह इसे डिस्क पर सिंक कर रहा है। आप इसे ऐसा नहीं करना चाहेंगे ताकि डेटा केवल कैश में बैठ सके, हालांकि मैं सवाल करता हूं कि आप बहुत सारे डेटा को इस तरह से फोड़ने में सक्षम होना चाहते हैं जैसे कि डिस्क की तुलना में तेजी से हो सकता है। यह कहीं न कहीं एक डिजाइन दोष की ओर इशारा करता है।
psusi

यह दोष जैसा लगता है: आपके बैकअप समाधान को सर्वर को पूरे समय बंद रखने की आवश्यकता नहीं होनी चाहिए।
psusi

1
@PeterMeyer: यदि आपके पास बहुत अधिक रैम है, तो अभी भी लिखने के लिए इंतजार करना एक गलती है। केवल समय जो किसी भी तरह से समझ में आता है यदि आप डिस्क पर पहुंचने से पहले फ़ाइलों (अस्थायी फ़ाइल की तरह) को संपादित या हटाने जा रहे हैं। एक बैकअप ऐसा नहीं करता है। आप जितनी जल्दी हो सके पृष्ठभूमि लिखना शुरू करना चाहते हैं। अपने बैकग्राउंड_रैस्ट को 1 या 2 पर सेट करें
Zan Lynx

जवाबों:


6

आपके द्वारा सेट किए गए चर को देखकर, ऐसा लगता है कि आप ज्यादातर लेखन प्रदर्शन से संबंधित हैं और बिजली के नुकसान के कारण संभावित डेटा के नुकसान की परवाह नहीं करते हैं।

आपको केवल आलसी राइट्स और अतुल्यकालिक लेखन कार्यों के साथ राइटबैक कैश का उपयोग करने का विकल्प मिलेगा। सिंक्रोनस राइट ऑपरेशन के लिए डिस्क पर कमिटिंग की आवश्यकता होती है और यह आलसी-लिखित नहीं होगा - कभी भी। आपका फ़ाइल सिस्टम बार-बार पेज फ्लश और सिंक्रोनस लिखता है (आमतौर पर जर्नलिंग के कारण, विशेष रूप से डेटा = जर्नल मोड में ext3 के साथ)। इसके अतिरिक्त, यहां तक ​​कि "पृष्ठभूमि" पेज फ्लश अनकैप्ड रीड्स और सिंक्रोनस राइट्स के साथ हस्तक्षेप करेगा , इस प्रकार उन्हें धीमा कर देगा।

सामान्य तौर पर, आपको यह देखने के लिए कुछ मीट्रिक लेनी चाहिए कि क्या हो रहा है - क्या आप अपनी प्रतिलिपि प्रक्रिया को "D" स्थिति में डालते हैं जो I / O कार्य के लिए pdflush द्वारा किए जाने की प्रतीक्षा कर रहा है? क्या आप अपने डिस्क पर भारी तुल्यकालिक लेखन गतिविधि देखते हैं?

यदि अन्य सभी विफल हो जाते हैं, तो आप एक स्पष्ट tmpfs फाइल सिस्टम सेट करने का विकल्प चुन सकते हैं, जहाँ आप अपने बैकअप की प्रतिलिपि बनाते हैं और इस तथ्य के बाद अपने डिस्क के साथ डेटा को सिंक्रनाइज़ करते हैं - यहां तक ​​कि स्वचालित रूप से inotify का उपयोग करते हुए

पढ़ने के लिए कैशिंग चीजें काफी सरल हैं - फ़ॉर्केटूलस fadviseउपयोगिता है जिसमें --willneedफ़ाइल की सामग्री को बफर कैश में लोड करने के लिए कर्नेल को सलाह देने के लिए पैरामीटर है।

संपादित करें:

vm.dirty_ratio = 70

इस सिद्धांत को हमें I / O को कैशिंग करने के लिए 16GB देना चाहिए और इसके लिखे जाने तक कुछ मिनट तक प्रतीक्षा करनी चाहिए।

इससे आपके परीक्षण परिदृश्य पर बहुत प्रभाव नहीं पड़ेगा, लेकिन आपकी समझ में गलत धारणा है। गंदा_प्रमाण पैरामीटर आपके सिस्टम की कुल मेमोरी का प्रतिशत नहीं है, बल्कि आपके सिस्टम की मुफ्त मेमोरी का है।

ट्यूनिंग के बारे में अधिक भारी जानकारी के साथ राइट-हैवी लोड के लिए एक लेख है ।


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

3

या बस अधिक डिस्क प्राप्त करें ... आपके पास आवश्यक ड्राइव सरणी कॉन्फ़िगरेशन आपके लिए आवश्यक समर्थन नहीं करता है। यह एक ऐसा मामला है जहां आपकी वास्तविक जरूरतों को पूरा करने के लिए समाधान को पुन: निर्धारित किया जाना चाहिए। मैं समझता हूं कि यह केवल बैकअप है, लेकिन यह एक गुदगुदी फिक्स से बचने के लिए समझ में आता है।


माना। वहाँ कोई रास्ता नहीं SATA की एक जोड़ी है ( SATA ? गंभीरता से?) ड्राइव 275MB / एस बनाए रखने, और हम भी मात्र IOPS आप उन लोगों से मिल जाएगा के बारे में बात नहीं कर रहे।
एडाप्ट्र

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

पूरी तरह से सही है। मैं वर्चुअल मशीन छवियों (कंप्यूट नोड्स के लिए बहुत छोटे वाले) को सिंक कर रहा हूं जो सिंक करते समय नीचे हैं। ऐप टार की तरह काम करता है | ssh लेकिन ftp का उपयोग करते हुए। और अच्छी तरह से, सिमुलेशन चलाने की जरूरत है ... :)
पीटर मेयर

1
इससे कोई फर्क नहीं पड़ता कि SATA नस्ल वे क्या हैं। 7200RPM गैर-उद्यम डिस्क केवल थ्रूपुट या विलंबता की गारंटी नहीं दे सकती है।
एडेप्टर

1
@adaptr, एक बैकअप अनुक्रमिक लिखने वाला है।
Psusi

1

मेमोरी कैश का उपयोग डेटा हानि में हो सकता है जैसे कि कुछ डेटा गलत हो जाता है जो मेमोरी में होते हैं और डिस्क को सहेजे नहीं जाते हैं।

उस ने कहा, फाइलसिस्टम स्तर पर किए जाने वाले ट्यूनिंग हैं।

उदाहरण के लिए, यदि आप ext4 का उपयोग कर रहे थे, तो आप माउंट विकल्प आज़मा सकते हैं:

बाधा = 0

वह: "jbd कोड में लिखने के अवरोधों के उपयोग को अक्षम करता है। बाधाओं को लिखें, जर्नल कमिट्स के उचित ऑन-डिस्क ऑर्डर को लागू करता है, जिससे अस्थिर डिस्क लिखने के कैश को कुछ प्रदर्शन पेनल्टी पर उपयोग करने के लिए सुरक्षित बना दिया जाता है। यदि आपके डिस्क एक तरह से बैटरी-समर्थित हैं। या अन्य, बाधाएं अक्षम करने से सुरक्षित रूप से प्रदर्शन में सुधार हो सकता है। माउंट विकल्प "बाधा" और "नॉबरियर" का उपयोग अन्य ext4 माउंट विकल्पों के साथ स्थिरता के लिए बाधाओं को सक्षम या अक्षम करने के लिए भी किया जा सकता है। "

और अधिक: http://www.mjmwired.net/kernel/Documentation/filesystems/ext4.txt


मैं एक भारी ट्यून XFS का उपयोग कर रहा हूँ । अधिक जिस पर ऊपर टिप्पणी में इसके ट्यून के संबंध में :)
पीटर मेयर

फाइलसिस्टम mkfs.xfs -l lazy-count = 1, version = 2, size = 256m -i attr = 2 -d sunit = 512, swidth = 1024 के साथ बनाया गया था और इसके साथ आरोहित किया गया है: rw, noobime, logbufs = 8 logbsize = 256 k, osyncisdsync, delaylog, attr2, nobarrier, allocsize = 256k
पीटर मेयर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.