SSD, Erase Block Size & LVM: PV on raw device, Alignment


15

मैं एक नया एसएसडी स्थापित करना चाहता हूं और एलवीएम के लिए पीवी के रूप में पूरे उपकरण का उपयोग करना चाहता हूं - दूसरे शब्दों में: मैं इस डिवाइस पर एक भी विभाजन लगाने की योजना नहीं करता हूं। इसलिए इरेज़ ब्लॉक पर विभाजन को संरेखित करने की आवश्यकता नहीं है।

प्रशन)

क्या यह आईएनजी --dataalignmentब्लॉक आकार के लिए सेट करने के लिए पर्याप्त है जब pvcreateआईएनजी और आईएनजी ब्लॉक आकार के --physicalextentsizeएक से अधिक जब vgcreateआईएनजी करने के लिए?

इसलिए, मेरे SSD को 1024k का इरेज़ ब्लॉक आकार माना जाता है, क्या यह ठीक है

  • pvcreate --dataalignment 1024k /dev/ssd
  • vgcreate --physicalextentsize $(( x * 1024 ))k ...

किसी और चीज को ध्यान में रखना?

मान लें कि मैं इस वीजी में LV4 पर ext4-filesystems डालूँगा, तो ext4-extents को LVM-PE-size, सही में संरेखित करना एक अच्छा विचार होगा? तो ext4-extents LVM-PE-size के समान या एक से अधिक आकार के होने चाहिए?

किसी भी स्पष्टीकरण के लिए धन्यवाद!

जवाबों:


9

हां, मैंने एमबीआर / पीबीआर / जीपीटी / एमडी / एलवीएम के सभी डिस्क-डिस्क लेआउट की भी जांच की, और उसी निष्कर्ष पर पहुंचा।

आपके मामले के लिए (कच्ची डिस्क पर LVM), अगर LVM-PE (भौतिक सीमा) 1MB-pvcreate के साथ संरेखित है, तो आप सुनिश्चित कर सकते हैं कि जब तक आप आवंटन आकार (1MB * N) रखते हैं, तब तक सभी फ़ॉथर डेटा आवंटन गठबंधन किए जाएंगे। ।

चूंकि "vgcreate -s" और "lvcreate -L" दोनों ही डिफ़ॉल्ट रूप से MB-मान के रूप में आकार-रहित-इकाई को संभालते हैं, इसलिए आपको अपने pvcreate को ठीक से करने के बाद संरेखण के बारे में अधिक ध्यान रखने की आवश्यकता नहीं है। बस सुनिश्चित करें कि% / PEs (lvcreate -l के लिए) और B (बाइट) / S (512B - सेक्टर हमेशा LVM में 512B है) / K (KB) (vgcreate -s और lvcreate -L के लिए) को आकार न दें।

=== स्पष्टीकरण के लिए जोड़ा गया ===

बस एक फॉलोअप के रूप में, जबकि SSD में एक पूरे डिवाइस के रूप में 1024KB ब्लॉक आकार हो सकता है, प्रत्येक आंतरिक फ्लैश चिप का erase ब्लॉक आकार / आरडब्ल्यू पृष्ठ का आकार संभवतः लगभग 32KB-128KB / 512B-8KB है।

यद्यपि यह प्रत्येक SSD के नियंत्रक पर निर्भर करता है, अतिरिक्त पठन-संशोधित-लेखन चक्र के कारण I / O दंड संभवत: तब तक नहीं होगा जब तक आप प्रत्येक आंतरिक चिप के ब्लॉक आकार को मिटाने के लिए अपने लेखन को संरेखित रखते हैं, जो कि ऊपर 32KB-128KB है उदाहरण। यह सिर्फ इतना है कि आप चाहते हैं कि एकल लेखन अनुरोध काफी बड़ा हो (= SSD-as-a-the-device का ब्लॉक आकार मिटाएं), इसलिए आप सभी आंतरिक चिप्स / चैनलों को कुशलतापूर्वक चलाकर बेहतर प्रदर्शन की उम्मीद कर सकते हैं।

मेरी समझ यह है कि 1024KB- संरेखण केवल एक सुरक्षा उपाय है, क्योंकि नियंत्रक चिप फ़ंक्शन एक विक्रेता द्वारा भिन्न होता है, और फ्लैश चिप की कल्पना तेजी से बदलती है। ओएस-स्तर के लिखने का अनुरोध एक बड़े बंडल (इस मामले में 1024KB) में किया जाना अधिक महत्वपूर्ण है।

अब, कहा जा रहा है कि, 1 एमबी-संरेखित LVM ब्लॉक पर mkfs (8) करने से फाइल-स्तरीय डेटा / मेटाडेटा के लिए लगभग 1MB-संरेखण टूट जाएगा। अधिकांश फाइलसिस्टम केवल 4KB- संरेखण करने की परवाह करते हैं, इसलिए यह शायद SSDs के लिए एकदम सही नहीं है (लेकिन, IIRC, हाल ही में btrfs की तरह fs, आंतरिक आकस्मिक ब्लॉक आवंटित करते समय 64KB + संरेखण रखने की कोशिश करता है)। लेकिन कई fs में RAID से प्रदर्शन प्राप्त करने के लिए राइट (पूर्व: स्ट्राइप-साइज़ कॉन्फ़िगरेशन) को बंडल करने की सुविधा होती है, ताकि इसका उपयोग SSD के पास-इष्टतम करने के लिए लिखने का अनुरोध करने के लिए किया जा सके।

मैं वास्तव में वास्तविक डेटा के साथ अपने बयान को वापस करना चाहता हूं, लेकिन यह साबित करना बहुत मुश्किल था कि आज का एसएसडी नियंत्रक इतना बुद्धिमान है, और दोनों के संरेखण आकार और लेखन आकार एक बार बहुत बड़ा प्रदर्शन नहीं दिखाएगा "आकार काफी बड़ा है"। बस यह सुनिश्चित करें कि यह बीमार नहीं है (हर कीमत पर <4KB-aligment से बचें) और बहुत छोटा नहीं है (1024KB काफी छोटा है)।

इसके अलावा, अगर आप वास्तव में IO पेनल्टी के बारे में परवाह करते हैं, तो डिवाइस कैश को अक्षम करके दोहराएं और सिंक-एड रीड-राइट-रीराइट टेस्ट के साथ बेंचमार्किंग करें।


6

मेरी समझ से, पहले से ही चूक काफी अच्छी हैं। मुझे नहीं लगता कि आपको इस बारे में चिंता करने की ज़रूरत है - डेटा असाइनमेंट विकल्प के रूप में LVM स्वचालित रूप से sysfs निर्यात मूल्यों के आधार पर सब कुछ संरेखित करने का प्रयास करेगा, lvm.conf में "data_alignment_detection" विकल्प देखें:

# By default, the start of a PV's data area will be a multiple of
# the 'minimum_io_size' or 'optimal_io_size' exposed in sysfs.
# - minimum_io_size - the smallest request the device can perform
#   w/o incurring a read-modify-write penalty (e.g. MD's chunk size)
# - optimal_io_size - the device's preferred unit of receiving I/O
#   (e.g. MD's stripe width)
# minimum_io_size is used if optimal_io_size is undefined (0).
# If md_chunk_alignment is enabled, that detects the optimal_io_size.
# This setting takes precedence over md_chunk_alignment.
# 1 enables; 0 disables.
data_alignment_detection = 1

इसके अलावा, vgcreate के लिए एक फिजियोथेरेप्यूट को निर्दिष्ट करना आवश्यक नहीं है क्योंकि डिफ़ॉल्ट पहले से ही 4 एमबी है।

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