SSD, ลบขนาดบล็อก & LVM: PV บนอุปกรณ์ดิบ, การจัดแนว


15

ฉันต้องการติดตั้ง SSD ใหม่และใช้อุปกรณ์ทั้งหมดเป็น PV สำหรับ LVM - กล่าวอีกนัยหนึ่ง: ฉันไม่ได้วางแผนที่จะใส่พาร์ติชันเดียวในอุปกรณ์นี้ ดังนั้นการจัดแนวพาร์ติชันบนบล็อกการลบจึงไม่จำเป็น

คำถาม (s)

มีขนาดเพียงพอหรือไม่ที่จะตั้ง--dataalignmentเป็นขนาดบล็อกลบเมื่อpvcreateไอเอ็นจีและ--physicalextentsizeเป็นขนาดบล็อกลบหลายอันเมื่อvgcreateไอเอ็นจี?

ดังนั้นสมมติว่า SSD ของฉันมีขนาดบล็อกการลบ 1024k มันก็โอเค

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

มีอะไรอีกที่ต้องคำนึงถึง?

สมมติว่าฉันใส่ ext4-filesystems ลงใน LVs ใน VG นี้จะเป็นการดีหรือไม่ที่จะจัดเรียง ext4-extents ให้เป็นขนาด LVM-PE ใช่ไหม? ดังนั้น ext4-extents ควรมีขนาดเท่ากันหรือหลายเท่าของ LVM-PE-size?

ขอบคุณสำหรับการชี้แจงใด ๆ !

คำตอบ:


9

ใช่ฉันได้ตรวจสอบเค้าโครงบนดิสก์ทั้งหมดของ MBR / PBR / GPT / MD / LVM และมาถึงข้อสรุปเดียวกัน

สำหรับกรณีของคุณ (LVM บนดิสก์ดิบ) หาก LVM-PE (ขอบเขตทางกายภาพ) สอดคล้องกับ 1MB ด้วย pvcreate คุณสามารถมั่นใจได้ว่าการจัดสรรข้อมูลที่ละเอียดกว่านี้ทั้งหมดจะได้รับการจัดตำแหน่งตราบใดที่คุณคงขนาดการจัดสรรไว้ที่ (1MB * N) .

เนื่องจากทั้ง "vgcreate -s" และ "lvcreate -L" จัดการกับขนาดที่ไม่มีหน่วยเป็นค่า MB โดยค่าเริ่มต้นคุณอาจไม่จำเป็นต้องใส่ใจมากเกี่ยวกับการจัดตำแหน่งเมื่อคุณทำ pvcreate อย่างถูกต้อง เพียงตรวจสอบให้แน่ใจว่าไม่ได้กำหนดขนาดเป็น% / PE (สำหรับ lvcreate -l) และ B (ไบต์) / S (512B - เซ็กเตอร์เท่ากับ 512B ใน LVM) / K (KB) (สำหรับ vgcreate -s และ lvcreate -L)

=== เพิ่มเพื่อความกระจ่าง ===

ในขณะที่ SSD อาจมีขนาดบล็อกการลบ 1024KB เป็นอุปกรณ์ทั้งหมด แต่ขนาดบล็อกการลบ / หน้า rw ของชิปแฟลชภายในแต่ละขนาดน่าจะเป็นประมาณ 32KB-128KB / 512B-8KB

แม้ว่าสิ่งนี้จะขึ้นอยู่กับคอนโทรลเลอร์ของ SSD แต่ละตัว แต่การปรับ I / O เนื่องจากวงจรการอ่าน - แก้ไข - การเขียนพิเศษอาจไม่เกิดขึ้นตราบใดที่คุณให้การเขียนของคุณอยู่ในแนวเดียวกันเพื่อลบขนาดบล็อกของชิปภายในแต่ละตัว ตัวอย่าง. เป็นเพียงคุณต้องการให้คำขอเขียนครั้งเดียวมีขนาดใหญ่พอ (= ลบขนาดบล็อกของอุปกรณ์ SSD-as-a-a-whole) ดังนั้นคุณสามารถคาดหวังประสิทธิภาพที่ดีขึ้นโดยการขับเคลื่อนชิป / ช่องภายในทั้งหมดอย่างมีประสิทธิภาพ

ความเข้าใจของฉันคือการจัดตำแหน่ง 1024KB เป็นเพียงมาตรการความปลอดภัยเนื่องจากฟังก์ชั่นชิปคอนโทรลเลอร์แตกต่างกันไปตามผู้ขายและข้อมูลจำเพาะของชิปแฟลชเปลี่ยนแปลงอย่างรวดเร็ว เป็นเรื่องสำคัญที่จะต้องมีการร้องขอการเขียนระดับระบบปฏิบัติการในชุดข้อมูลขนาดใหญ่ (1024KB ในกรณีนี้)

ตอนนี้ต้องบอกว่าการทำ mkfs (8) บน LVM block ที่มีขนาด 1MB จะทำให้การจัดตำแหน่ง 1MB สำหรับ data / metadata ระดับระบบไฟล์ลดลง ระบบไฟล์ส่วนใหญ่สนใจที่จะทำการจัดเรียง 4KB เท่านั้นดังนั้นจึงอาจไม่เหมาะสำหรับ SSD (แต่ IIRC, fs ล่าสุดเช่น btrfs พยายามรักษาการจัดตำแหน่ง 64KB + เมื่อจัดสรรบล็อกที่ต่อเนื่องภายใน) แต่ fs จำนวนมากมีคุณสมบัติในการบันเดิลการเขียน (เช่น: การกำหนดค่าแบบแถบขนาด) เพื่อให้ได้ประสิทธิภาพจาก RAID ดังนั้นจึงสามารถใช้เพื่อทำการร้องขอการเขียนไปยัง SSD ที่ใกล้เคียงที่สุด

ฉันต้องการคืนคำแถลงของฉันด้วยข้อมูลจริง แต่ก็ยากที่จะพิสูจน์ว่าคอนโทรลเลอร์ SSD ของวันนี้ฉลาดมากและจะไม่แสดงประสิทธิภาพที่ลดลงเมื่อขนาดการจัดตำแหน่งและขนาดการเขียนเป็น "ใหญ่พอ" เพียงตรวจสอบให้แน่ใจว่าไม่ได้อยู่ในแนวที่ไม่เหมาะสม (หลีกเลี่ยง <4KB การกำหนดสิทธิ์โดยรวม) และไม่เล็กเกินไป (1024KB นั้นใหญ่พอ)

นอกจากนี้หากคุณสนใจเกี่ยวกับการลงโทษ IO ให้ตรวจสอบอีกครั้งโดยปิดการใช้งานแคชอุปกรณ์และการเปรียบเทียบด้วยการทดสอบซิงค์อ่านและเขียนใหม่


6

เพื่อความเข้าใจของฉันเริ่มต้นที่ดีพอ ฉันไม่คิดว่าคุณต้องกังวลเกี่ยวกับตัวเลือก --dataalignment เนื่องจาก LVM จะพยายามจัดเรียงทุกอย่างตามค่า sysfs ที่ส่งออกโดยอัตโนมัติดูตัวเลือก "data_alignment_detection" ใน lvm.conf:

# 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

นอกจากนี้ไม่จำเป็นต้องระบุ physicalextentsize เพื่อ vgcreate เนื่องจากค่าเริ่มต้นมีอยู่แล้ว 4MB

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.