LVM, डिवाइस-मैपर, सॉफ़्टवेयर रेड और ब्लॉक डिवाइसेस के लिए रीडहेड सेटिंग्स - क्या जीतता है?


26

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

यदि आपके पास एक मानक ब्लॉक डिवाइस है और आप चलाते हैं sudo blockdev --reportतो आपको कुछ इस तरह मिलेगा:

RO    RA   SSZ   BSZ   StartSec            Size   Device
rw   256   512  4096          0    500107862016   /dev/sda
rw   256   512  4096       2048    399999238144   /dev/sda1
rw   256   512  1024  781252606            1024   /dev/sda2

अब, आप --setraकिसी भी विभाजन पर उस डिफ़ॉल्ट 256 को 128 में बदलने का निर्णय लेते हैं और यह पूरे ब्लॉक डिवाइस पर होता है, जैसे:

sudo blockdev --setra 128 /dev/sda1
sudo blockdev --report
RO    RA   SSZ   BSZ   StartSec            Size   Device
rw   128   512  4096          0    500107862016   /dev/sda
rw   128   512  4096       2048    399999238144   /dev/sda1
rw   128   512  1024  781252606            1024   /dev/sda2

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

RA * sector size (default = 512 bytes)

इसलिए, डिफ़ॉल्ट सेक्टर आकार के साथ मैंने जो बदलाव किए हैं, वे रीडहेड को 128k से 64k तक छोड़ देंगे। सभी अच्छी तरह से और अब तक अच्छा।

हालाँकि, क्या होता है जब हम एक सॉफ्टवेयर RAID, या LVM और डिवाइस-मैपर में जोड़ते हैं? कल्पना करें कि आपकी रिपोर्ट इस तरह दिखाई देती है:

RO    RA   SSZ   BSZ   StartSec            Size   Device
rw   256   512  4096          0     10737418240   /dev/xvda1
rw   256   512  4096          0    901875499008   /dev/xvdb
rw   256   512  4096          0    108447924224   /dev/xvdj
rw   256   512  4096          0    108447924224   /dev/xvdi
rw   256   512  4096          0    108447924224   /dev/xvdh
rw   256   512  4096          0    108447924224   /dev/xvdg
rw  4096   512  4096          0    433787502592   /dev/md0
rw  4096   512   512          0    429496729600   /dev/dm-0

इस मामले में हमारे पास mdadm द्वारा बनाए गए md0 के शीर्ष पर एक डिवाइस-मैप्ड dm-0 LVM डिवाइस है, जो वास्तव में चार डिवाइस xvdg-j पर एक RAID0 स्ट्राइप है।

दोनों md0 और dm-0 में आरए के लिए 4096 की सेटिंग्स हैं, जो ब्लॉक डिवाइस से कहीं अधिक है। तो, यहाँ कुछ प्रश्न:

  • आरए सेटिंग वर्चुअल ब्लॉक डिवाइस चेन से कैसे गुजरती है?
  • क्या dm-0 ट्रम्प सभी क्योंकि शीर्ष स्तर का ब्लॉक डिवाइस है जिसे आप वास्तव में एक्सेस कर रहे हैं?
  • चाहेंगे lvchange -rपर dm-0 डिवाइस प्रभाव पड़ता है और यहां दिखाई नहीं?

यदि यह उतना ही सरल है, जितना कि आप उपयोग कर रहे वर्चुअल ब्लॉक डिवाइस से RA सेटिंग को पास करते हैं, तो क्या इसका मतलब यह है कि dm-0 (या md0) से एक रीड 4 x 4096 RA रीड में अनुवाद करेगा? (प्रत्येक ब्लॉक डिवाइस पर एक)। यदि हां, तो इसका मतलब यह होगा कि ये सेटिंग्स ऊपर के परिदृश्य में रीडहेड के आकार में विस्फोट कर सकती हैं।

फिर यह पता लगाने के संदर्भ में कि वास्तव में रीडहेड सेटिंग क्या कर रही है:

वर्चुअल डिवाइस के लिए वास्तविक रीडहेड मान निर्धारित करने के लिए आप सेक्टर आकार के बराबर क्या उपयोग करते हैं:

  • RAID की पट्टी का आकार (md0 के लिए)?
  • कुछ अन्य सेक्टर के आकार के बराबर?
  • क्या यह विन्यास योग्य है, और कैसे?
  • क्या FS एक हिस्सा निभाता है (मैं मुख्य रूप से ext4 और XFS में दिलचस्पी रखता हूं)?
  • या, अगर इसे अभी-अभी पारित किया गया है, तो क्या यह केवल शीर्ष स्तर के डिवाइस से आरए सेटिंग वास्तविक ब्लॉक उपकरणों के सेक्टर आकार से गुणा है?

अंत में, धारी के आकार और आरए सेटिंग (उदाहरण के लिए) के बीच कोई पसंदीदा संबंध होगा? यहाँ मैं सोच रहा हूँ कि यदि स्ट्रिप सबसे छोटा तत्व है जो कि RAID डिवाइस से निकाला जा रहा है, तो आप आदर्श रूप से यह नहीं चाहेंगे कि डेटा की न्यूनतम इकाई तक सेवा के लिए 2 डिस्क एक्सेस हो और आरए बनाना चाहेगा। एकल पहुंच के साथ अनुरोध को पूरा करने के लिए पर्याप्त बड़ा।


आप किस लिनक्स वितरण का उपयोग कर रहे हैं? क्या आप हार्डवेयर या सॉफ्टवेयर छापे का उपयोग कर रहे हैं? सॉफ्टवेयर की तरह लगता है। यदि हार्डवेयर, आप किस कार्ड / चिपसेट का उपयोग कर रहे हैं, यह डिवाइस के फर्मवेयर में सेट और संग्रहीत होता है।
जेसन हंटले

इसके अलावा, आरए सेटिंग्स आपकी फाइलसिस्टम आवंटन योजना पर बहुत निर्भर करती हैं। क्या आप ext4 का उपयोग कर रहे हैं?
जेसन हंटले

मैं वास्तव में उल्लेख करता हूं कि यह सवाल में सॉफ्टवेयर RAID और LVM है, इसलिए हां - सॉफ्टवेयर। फाइलसिस्टम के संदर्भ में, मुझे XFS और ext4 के बीच के अंतर में दिलचस्पी होगी, या तो उत्तर के लिए अच्छा होगा, हालांकि
एडम सी

बेहतर प्रदर्शन के लिए एक्सएफएस को भारी रूप से ट्यून किया जा सकता है। यह इस साइट पर कुछ स्थानों पर कवर किया गया है: यहां और यहां ... लिनक्स का क्या वितरण आप उपयोग कर रहे हैं? एक कारक निभाता है क्योंकि कुछ वितरण-विशिष्ट उपकरण उपलब्ध हैं, भी।
ewwhite

यह एक प्रदर्शन सवाल नहीं है, यह अधिक विशिष्ट है - मैं सिर्फ आरए सेटिंग्स के बारे में जानना चाहता हूं और वे एलवीएम / सॉफ़्टवेयर RAID परतों के माध्यम से कैसे / के माध्यम से अनुवाद करते हैं
एडम सी

जवाबों:


11

आरए सेटिंग वर्चुअल ब्लॉक डिवाइस चेन से कैसे गुजरती है?

निर्भर करता है। मान लेते हैं कि आप Xen डोम के अंदर हैं और RA = 256 हैं। आपका / देव / xvda1 वास्तविक LV है जो कि0 के नीचे दिखाई दे रहा है / dev / dm1 है। तो आपके पास RA (domU (/ dev / xvda1)) = 256 और RA (dom0 (/ dev / dm1)) = 512 है। इसका ऐसा प्रभाव होगा कि dom0 के कर्नेल, domU के कर्नेल की तुलना में दूसरे RA के साथ / dev / dm1 तक पहुंचेगा। इतना ही आसान।

यदि हम मान लें कि देव / md0 (/ dev / sda1, / dev / sda2) सिचुएशन है तो एक और सिचुएशन होगा।

blockdev --report | grep sda
rw   **512**   512  4096          0   1500301910016   /dev/sda
rw   **512**   512  4096       2048      1072693248   /dev/sda1
rw   **512**   512  4096    2097152   1499227750400   /dev/sda2
blockdev --setra 256 /dev/sda1
blockdev --report | grep sda
rw   **256**   512  4096          0   1500301910016   /dev/sda
rw   **256**   512  4096       2048      1072693248   /dev/sda1
rw   **256**   512  4096    2097152   1499227750400   /dev/sda2

सेटिंग / देव / md0 RA प्रभावित नहीं करेगा / dev / sdX blockdevices।

rw   **256**   512  4096       2048      1072693248   /dev/sda1
rw   **256**   512  4096    2097152   1499227750400   /dev/sda2
rw   **512**   512  4096          0      1072627712   /dev/md0

इसलिए आम तौर पर मेरी राय में कर्नेल वास्तव में सेट किए गए तरीके से ब्लॉकदेविस तक पहुंचता है। एक लॉजिकल वॉल्यूम को RAID के माध्यम से एक्सेस किया जा सकता है (जो कि इसका हिस्सा है) या डेविक्मेपर डिवाइस और प्रत्येक में एक और आरए है जिसका सम्मान किया जाएगा।

तो इसका उत्तर है - आरए सेटिंग IMHO है जो कि ब्लॉकदेवीस चेन से नीचे नहीं गई है, लेकिन जो भी टॉप लेवल डिवाइस आरए सेटिंग है, उसका उपयोग घटक उपकरणों तक पहुंचने के लिए किया जाएगा

क्या dm-0 ट्रम्प सभी क्योंकि शीर्ष स्तर का ब्लॉक डिवाइस है जिसे आप वास्तव में एक्सेस कर रहे हैं?

यदि आपको "ट्रम्प ऑल" द्वारा गहरे प्रचार का मतलब है - मेरी पिछली टिप्पणी के अनुसार, मुझे लगता है कि आपके पास सिस्टम में अलग-अलग डिवाइस के लिए अलग-अलग आरए हो सकते हैं।

क्या lvchange -r का dm-0 डिवाइस पर प्रभाव पड़ेगा और यहां नहीं दिखेगा?

हां लेकिन यह एक विशेष मामला है। मान लेते हैं कि हमारे पास / dev / dm0 है जो LVM / dev / vg0 / blockdevice है। यदि तुम करो:

lvchange -r 512 /dev/vg0/blockdevice

/ dev / dm0 भी बदल जाएगा क्योंकि / dev / dm0 और / dev / vg0 / blockdevice ठीक उसी ब्लॉक डिवाइस है जब यह कर्नेल एक्सेस के लिए आता है।

लेकिन मान लेते हैं कि / dev / vg0 / blockdevice एक्सएम डोमू में / dev / dm0 और / dev / xvda1 के समान है जो इसका उपयोग कर रहा है। रा / देव / xvda1 की स्थापना प्रभावी होगी, लेकिन dom0 देखेगा कि अभी भी इसका RA है।

वर्चुअल डिवाइस के लिए वास्तविक रीडहेड मान निर्धारित करने के लिए आप सेक्टर आकार के बराबर क्या उपयोग करते हैं:

मैं आमतौर पर आरए को विभिन्न मूल्यों के साथ प्रयोग करके और एचडीपीआर के साथ परीक्षण करके खोजता हूं।

RAID की पट्टी का आकार (md0 के लिए)?

ऊपर की तरह।

क्या FS एक हिस्सा निभाता है (मैं मुख्य रूप से ext4 और XFS में दिलचस्पी रखता हूं)?

ज़रूर - यह एक बहुत बड़ा विषय है। मैं आपको यहाँ शुरू करने की सलाह देता हूं। http://archives.postgresql.org/pgsql-performance/2008-09/msg00141.php


यह बहुत ही करीब है कि मैं क्या देख रहा हूं, और मुझे क्या संदेह है - क्या आप मेरे लिए सिर्फ एक चीज को स्पष्ट कर सकते हैं: / dev / md0 (/ dev / sda1, / dev / sda2) स्थिति में मुझे पता है कि आप सेट कर सकते हैं RA मूल्यों को अलग करें, लेकिन यदि आप / dev / md0 पर माउंट / डेटा कहते हैं और इससे एक फ़ाइल पढ़ते हैं - क्या 512 RA को / dev / sda1 और / dev / sda2 से पढ़ने के लिए उपयोग किया जाता है (अर्थात 512 दोनों के लिए उपयोग किया जाता है) या प्रत्येक पर 256 का उपयोग किया जाता है? यदि पूर्व में RAID0 RA सेट होना बुद्धिमानी प्रतीत होगी: SUM (RA0 में डिवाइसेस का RA)
एडम C

1
बस अपने अनुभव से कह रहा हूँ - RA = 512 को / dev / md0 के साथ / dev / sdX डिस्क के तहत सेट करना, ठीक उसी तरह कार्य करता है जैसे कि हमने RA / 512 के साथ / dev / sdX को एक्सेस किया था, उदाहरण के लिए इसके बावजूद हम RA / 256 कर सकते हैं ब्‍लॉक ब्‍लाकदेवाइस पर सेट करना। इस मामले में 256 सेटिंग को नजरअंदाज कर दिया जाएगा (ध्यान दें कि / dev / sda एक blockdevice के रूप में बेकार है यदि यह / dev / md0 का एक हिस्सा है)। मैं कर्नेल प्रोग्रामर नहीं हूं, लेकिन यह तर्कसंगत लगता है और मेरे अभ्यास से इसकी पुष्टि होती है। अतः आश्वस्त करना। 3 धागे / देव / md0, आरए = 512 के बराबर पढ़ने वाले 3 धागे / देव / एसडी {ए, बी, सी} से पढ़ते हुए आरए = 512।
wojciechz

बहुत धन्यवाद! मैंने उत्तर में स्पष्ट करने के लिए चीजों को थोड़ा संपादित किया है। क्या मैं स्वीकार करने से पहले एक और बात पूछ सकता हूं? क्या आपके पास RA का परीक्षण करने के लिए hdparm का उपयोग करने के लिए एक उदाहरण (या लिंक एक) है? मैं खुद भी कुछ ऐसा ही करने जा रहा था, इसलिए अगर कोई अच्छा संदर्भ होता तो इससे मेरा समय बच जाता।
एडम सी

यह जटिल नहीं है, लेकिन निर्भर करता है कि आप क्या जांचना चाहते हैं। कृपया HDparm मैनुअल देखें। यदि आप डिस्क रीड (जो रीडहेड का व्युत्पन्न है) की जांच करना चाहते हैं, तो आप hdparm -t / dev / md0 जैसी कमांड जारी कर सकते हैं । परिणाम टिमिंग बफ़र डिस्क जैसे कुछ दिखाएगा : 3.02 सेकंड में 310 एमबी = 102.79 एमबी / सेकंड । अंतिम मान आमतौर पर आरए सेटिंग से बहुत प्रभावित होता है।
wojciechz

1
आह, इसलिए प्रत्यक्ष माप नहीं - समझा गया, अब स्वीकार करना - मदद के लिए धन्यवाद :)
एडम सी

4

समझाने के लिए कठिन उत्तर जानिए इसलिए मैं उदाहरण में बताऊंगा। इसके लिए कहें कि आपके पास 3 ब्लॉक डिवाइस हैं जिन्हें आप मानक क्षेत्र मानकर 4 (4 * 512 बाइट) कहने के लिए अपना आरए सेट करते हैं। यदि आप कहते हैं कि 3 डिस्क का उपयोग करके एक RAID-5 योजना का उपयोग करें, तो किसी ने पढ़ा कि यहां तक ​​कि एक अनोखी डिस्क पर एक पट्टी को छुआ, आरए को उस घटक से मिलाया जाएगा जिसे आपने शुरू में आरए डिवाइस को ब्लॉक किया था। इसलिए यदि आपका पढ़ा हुआ बिलकुल 3 डिस्क्स का स्पैन है तो आपका प्रभावी आरए 12 * 512 बाइट होगा। इसे विभिन्न स्तरों में तय किया जा सकता है, जैसे कि एमडी या एलवीएम। अंगूठे के एक नियम के रूप में, अगर मेरे ऐप को आरए से लाभ मिलता है तो मैंने इसे उच्चतम परत पर सेट किया है ताकि मैं आरए को अनावश्यक रूप से संयोजित न कर सकूं। मैं तब सेक्टर 2049 पर फाइलसिस्टम शुरू करता हूं और प्रत्येक सेक्टर को 8 से विभाज्य संख्या पर ऑफसेट करना शुरू करता हूं। हो सकता है कि आप जो पूछ रहे हैं, मैं उस पर से हट जाऊं लेकिन यह मेरा 2 ystem है।


तो, आप कह रहे हैं कि जो भी आरए सेटिंग शीर्ष स्तर के डिवाइस पर है, वह बस नीचे पारित हो जाएगी। इसलिए, यदि आपने LVM -> 2 x RAID -> 4 x भौतिक डिस्क का उपयोग किया है और आपके पास 4 का RA है, तो क्योंकि 8 भौतिक उपकरण हैं, आप 32 के प्रभावी RA के साथ समाप्त होते हैं। आप कैसे ट्विक करेंगे। RAID का हिस्सा / धारी का आकार उस परिदृश्य में कुशल होना चाहिए - मुझे लगता है कि आप चाहते हैं कि आरए एक पूरी पट्टी को कवर करे ताकि आपको दो बार एक्सेस न करना पड़े?
एडम सी

BTW, अगर मुझे यह अधिकार मिल रहा है, तो जिस परिदृश्य का मैं वर्णन करता हूं, मुझे लगता है कि मैं चाहता हूं कि RAID0 के चंक / स्ट्रिप को एक्स होना चाहिए, जहां एक्स = आरए * 512bytes। इसलिए, अगर मेरे पास 64k (mdadm डिफ़ॉल्ट) का एक हिस्सा / पट्टी है, तो न्यूनतम आरए मुझे उपयोग करना चाहिए क्योंकि मुझे एक शॉट में पूरी पट्टी मिलती है।
एडम सी

0

वह स्पष्टीकरण के लिए है। मैंने आपको सही साबित करने के लिए एक RAID और LVM सेटअप के साथ कुछ परीक्षण किए:

https://fatalfailure.wordpress.com/2017/05/13/where-to-set-readahead-lvm-raid-devices-device-mapper-block-devices

वह जो मायने रखता है वह वह है जिसका ओएस उपयोग कर रहा है

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