การตั้งค่า Readahead สำหรับ LVM, Device-Mapper, Software Raid และ Block Devices - อะไรชนะ?


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

ตอนนี้คุณตัดสินใจที่จะเปลี่ยนค่าเริ่มต้น 256 เป็น 128 โดยใช้--setraกับพาร์ติชันใด ๆ และมันเกิดขึ้นกับอุปกรณ์บล็อกทั้งหมดเช่น:

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 และอุปกรณ์นั้นสมเหตุสมผลสำหรับฉันโดยทั่วไปแล้ว:

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

ในกรณีนี้เรามีอุปกรณ์ dm-0 LVM ที่แมปอุปกรณ์อยู่ด้านบนของ md0 ที่สร้างโดย mdadm ซึ่งอันที่จริงแล้ว RAID0 เป็นแถบในอุปกรณ์ทั้งสี่ xvdg-j

ทั้ง md0 และ dm-0 มีการตั้งค่า 4096 สำหรับ RA ซึ่งสูงกว่าอุปกรณ์บล็อกมาก ดังนั้นบางคำถามที่นี่:

  • การตั้งค่า RA จะถูกส่งผ่านโซ่อุปกรณ์บล็อกเสมือนอย่างไร
  • dm-0 เป็นคนที่กล้าหาญทั้งหมดเพราะนั่นเป็นอุปกรณ์บล็อกระดับบนสุดที่คุณเข้าถึงหรือไม่?
  • จะlvchange -rมีผลกระทบกับอุปกรณ์ dm-0 และไม่แสดงที่นี่หรือไม่

ถ้ามันง่ายเหมือนการตั้งค่า RA จากอุปกรณ์บล็อกเสมือนที่คุณใช้จะถูกส่งต่อนั่นหมายความว่าการอ่านจาก dm-0 (หรือ md0) จะแปลเป็น 4 x 4096 RA อ่านหรือไม่ (หนึ่งรายการในแต่ละอุปกรณ์บล็อก) ถ้าเป็นเช่นนั้นนั่นหมายความว่าการตั้งค่าเหล่านี้จะขยายขนาดของหัวอ่านในสถานการณ์ข้างต้น

จากนั้นในแง่ของการหาสิ่งที่การตั้งค่าหัวอ่านกำลังทำอยู่:

คุณใช้อะไรเท่ากับขนาดเซกเตอร์ด้านบนเพื่อกำหนดค่า readahead จริงสำหรับอุปกรณ์เสมือน:

  • ขนาดแถบของ RAID (สำหรับ md0)?
  • ขนาดอื่น ๆ ที่เทียบเท่าขนาด?
  • มันสามารถกำหนดค่าได้และอย่างไร
  • FS มีส่วนร่วมหรือไม่ (ฉันสนใจ ext4 และ XFS เป็นหลัก)
  • หรือถ้ามันเพิ่งผ่านไปมันเป็นเพียงการตั้งค่า RA จากอุปกรณ์ระดับบนสุดคูณด้วยขนาดเซกเตอร์ของอุปกรณ์บล็อกจริงหรือไม่?

ในที่สุดจะมีความสัมพันธ์ที่ต้องการระหว่างขนาดแถบและการตั้งค่า RA (ตัวอย่าง) หรือไม่ ที่นี่ฉันคิดว่าถ้าแถบเป็นองค์ประกอบที่เล็กที่สุดที่จะถูกดึงออกจากอุปกรณ์ RAID คุณคงไม่ต้องการที่จะต้องมีดิสก์ 2 ตัวในการเข้าถึงบริการที่หน่วยข้อมูลขั้นต่ำและต้องการทำให้ RA มีขนาดใหญ่พอที่จะตอบสนองคำขอได้ด้วยการเข้าถึงเพียงครั้งเดียว


คุณใช้ลีนุกซ์รุ่นใด? คุณใช้การจู่โจมฮาร์ดแวร์หรือซอฟต์แวร์หรือไม่? ดูเหมือนว่าซอฟต์แวร์ หากฮาร์ดแวร์การ์ด / ชิปเซ็ตใดที่คุณใช้งานอยู่จะถูกตั้งค่าและเก็บไว้ในเฟิร์มแวร์ของอุปกรณ์
Jason Huntley

นอกจากนี้การตั้งค่า RA ขึ้นอยู่กับแผนการจัดสรรระบบไฟล์ของคุณเป็นอย่างมาก คุณใช้ ext4 หรือไม่
Jason Huntley

ฉันพูดถึงว่ามันเป็นซอฟต์แวร์ RAID และ LVM ในคำถามดังนั้นใช่ - ซอฟต์แวร์ ในแง่ของระบบไฟล์ฉันจะสนใจในความแตกต่างระหว่าง XFS และ ext4 ที่นี่คำตอบสำหรับทั้งสองอาจเป็นสิ่งที่ดี
Adam C

XFS สามารถปรับได้อย่างหนักเพื่อประสิทธิภาพที่ดีขึ้น ที่กล่าวถึงในไม่กี่แห่งบนเว็บไซต์นี้: ที่นี่และที่นี่ ... คุณใช้ลีนุกซ์รุ่นใด? นั่นเป็นปัจจัยเพราะมีเครื่องมือเฉพาะสำหรับการแจกจ่ายบางอย่างเช่นกัน
ewwhite

นี่ไม่ใช่คำถามเกี่ยวกับประสิทธิภาพมีความเฉพาะเจาะจงมากขึ้น - ฉันแค่ต้องการทราบเกี่ยวกับการตั้งค่า RA และวิธีที่พวกเขาแปลผ่าน / โต้ตอบกับเลเยอร์ RAID LVM / ซอฟต์แวร์
Adam C

คำตอบ:


11

การตั้งค่า RA จะถูกส่งผ่านโซ่อุปกรณ์บล็อกเสมือนอย่างไร

มันขึ้นอยู่กับ. สมมติว่าคุณอยู่ใน Xen domU และมี RA = 256 / dev / xvda1 ของคุณเป็น LV จริงใน dom0 ที่มองเห็นได้ภายใต้ / dev / dm1 ดังนั้นคุณมี RA (domU (/ dev / xvda1)) = 256 และ RA (dom0 (/ dev / dm1)) = 512 มันจะมีผลเช่นนั้นที่เคอร์เนล dom0 จะเข้าถึง / dev / dm1 กับ RA อีกกว่าเคอร์เนลของ domU เรียบง่ายเหมือนที่

การจัดเรียงอื่นจะเกิดขึ้นถ้าเราสมมติว่าการจัดสรร / dev / 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

การตั้งค่า / dev / 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 (ซึ่งเป็นส่วนหนึ่งของ) หรืออุปกรณ์ devicemapper และแต่ละตัวมี RA อื่นที่จะได้รับการเคารพ

ดังนั้นคำตอบคือ - การตั้งค่า RA คือ IMHO ไม่ได้ส่งผ่านอุปกรณ์โซ่ blockdevice แต่สิ่งที่การตั้งค่า RA อุปกรณ์ระดับบนสุดจะใช้ในการเข้าถึงอุปกรณ์ที่เป็นส่วนประกอบ

dm-0 เป็นคนที่กล้าหาญทั้งหมดเพราะนั่นเป็นอุปกรณ์บล็อกระดับบนสุดที่คุณเข้าถึงหรือไม่?

หากคุณหมายถึงการเผยแพร่อย่างลึกซึ้งโดย "ทรัมป์ทั้งหมด" - ตามความคิดเห็นก่อนหน้าของฉันฉันคิดว่าคุณอาจมี RA ที่แตกต่างกันสำหรับอุปกรณ์ที่แตกต่างกันในระบบ

lvchange -r จะมีผลกระทบกับอุปกรณ์ dm-0 หรือไม่และจะไม่ปรากฏที่นี่

ใช่ แต่นี่เป็นกรณีพิเศษ สมมติว่าเรามี / dev / dm0 ซึ่งเป็น LVM's / dev / vg0 / blockdevice ถ้าคุณทำ:

lvchange -r 512 /dev/vg0/blockdevice

/ dev / dm0 ก็จะเปลี่ยนเพราะ / dev / dm0 และ / dev / vg0 / blockdevice เป็นอุปกรณ์บล็อกเดียวกันเมื่อมาถึงการเข้าถึงเคอร์เนล

แต่สมมติว่า / dev / vg0 / blockdevice เหมือนกับ / dev / dm0 และ / dev / xvda1 ใน Xen domU ที่ใช้มัน การตั้งค่า RA ของ / dev / xvda1 จะมีผล แต่ dom0 จะเห็นว่ายังมี RA อยู่

คุณใช้อะไรเท่ากับขนาดเซกเตอร์ด้านบนเพื่อกำหนดค่า readahead จริงสำหรับอุปกรณ์เสมือน:

ฉันมักจะค้นพบ RA โดยการทดสอบกับค่าที่ต่างกันและทดสอบด้วย hdparm

ขนาดแถบของ RAID (สำหรับ md0)?

เช่นเดียวกับข้างต้น

FS มีส่วนร่วมหรือไม่ (ฉันสนใจ ext4 และ XFS เป็นหลัก)

แน่นอน - นี่เป็นหัวข้อที่ใหญ่มาก ฉันขอแนะนำให้คุณเริ่มต้นที่นี่http://archives.postgresql.org/pgsql-performance/2008-09/msg00141.php


นี่ใกล้กับสิ่งที่ฉันกำลังมองหาและสิ่งที่ฉันสงสัย - คุณช่วยเคลียร์สิ่งหนึ่งให้ฉันได้ไหม: ในสถานการณ์ / dev / md0 (/ dev / sda1, / dev / sda2) ฉันรู้ว่าคุณสามารถตั้งค่าได้ แยกค่า RA แต่ถ้าคุณพูด mount / data บน / dev / md0 และอ่านไฟล์จากมัน - 512 RA จะถูกใช้สำหรับการอ่านจาก / dev / sda1 และ / dev / sda2 หรือไม่เช่น 512 ใช้ทั้งคู่หรือไม่ จะใช้ 256 ในแต่ละ? หากก่อนหน้านี้ควรมีการตั้งค่า RAID0 RA เป็น: SUM (RA ของอุปกรณ์ใน RAID0)
Adam C

1
เพิ่งบอกจากประสบการณ์ของฉัน - การตั้งค่า RA = 512 บน / dev / md0 กับดิสก์ / dev / sdX ภายใต้ทำหน้าที่เหมือนกับที่เราเข้าถึง / dev / sdX ด้วย RA = 512 แม้จะมีตัวอย่างเช่นเราสามารถมี RA = 256 การตั้งค่าบนอุปกรณ์ด้านล่างบล็อก การตั้งค่า 256 จะถูกละเว้นในกรณีนี้ (โปรดทราบว่า / dev / sda ไร้ประโยชน์เหมือน blockdevice หากเป็นส่วนหนึ่งของ / dev / md0) ฉันไม่ได้เป็นโปรแกรมเมอร์เคอร์เนล แต่ดูเหมือนว่ามีเหตุผลและดูเหมือนว่าจะได้รับการยืนยันจากการปฏิบัติของฉัน ดังนั้นการสันนิษฐาน 3 เธรดที่อ่านจาก / dev / md0, RA = 512 เท่ากับ 3 เธรดที่อ่านจาก / dev / sd {a, b, c} พร้อม RA = 512
wojciechz

เยี่ยมมากขอบคุณ! ฉันได้แก้ไขสิ่งต่าง ๆ เล็กน้อยเพื่อให้ชัดเจนขึ้นในคำตอบ ฉันขออีกสิ่งหนึ่งก่อนที่จะยอมรับได้ไหม คุณมีตัวอย่าง (หรือเชื่อมโยงไปยังหนึ่ง) สำหรับการใช้ hdparm เพื่อทดสอบ RA หรือไม่? ฉันจะทำสิ่งที่คล้ายตัวเองดังนั้นถ้ามีการอ้างอิงที่ดีมันจะช่วยฉันประหยัดเวลา
Adam C

มันไม่ซับซ้อน แต่ขึ้นอยู่กับสิ่งที่คุณต้องการตรวจสอบ โปรดดูคู่มือ hdparm หากคุณต้องการที่จะตรวจสอบดิสก์อ่าน (ซึ่งเป็นอนุพันธ์ของ readahead ก) คุณสามารถออกคำสั่งเช่นhdparm -t / ผลจะแสดงสิ่งที่ต้องการกำหนดเวลาบัฟเฟอร์ดิสก์อ่าน: 310 MB ใน 3.02 วินาที = 102.79 MB โดยทั่วไปค่าสุดท้ายจะได้รับผลกระทบอย่างมากจากการตั้งค่า RA
wojciechz

1
อาจึงไม่ได้เป็นวัดโดยตรง - เข้าใจยอมรับตอนนี้ - ขอบคุณสำหรับความช่วยเหลือ :)
อดัม C

4

รู้คำตอบที่ยากขึ้นเพื่ออธิบายดังนั้นฉันจะทำเช่นนั้นในตัวอย่าง พูดเพื่อประโยชน์ของคุณคุณมี 3 บล็อคอุปกรณ์และคุณตั้งค่า RA ของคุณให้บอกว่า 4 (4 * 512 ไบต์) โดยสมมติว่าเป็นภาคมาตรฐาน ถ้าคุณจะบอกว่าใช้รูปแบบ RAID-5 โดยใช้ดิสก์ 3 แผ่นการอ่านใด ๆ ที่แม้แต่แตะแถบบนดิสก์ที่ไม่ซ้ำกันก็จะรวม RA ด้วยปัจจัยที่คุณได้ตั้งค่าอุปกรณ์บล็อก RA เป็นครั้งแรก ดังนั้นหากการอ่านของคุณครอบคลุม 3 ดิสก์ทั้งหมดดังนั้น RA ที่มีประสิทธิภาพของคุณจะเป็น 12 * 512 ไบต์ สิ่งนี้สามารถทบต้นได้ด้วยการตัดสิน RA ในระดับต่างๆเช่น MD หรือ LVM ตามกฎทั่วไปแล้วหากแอพของฉันได้รับประโยชน์จาก RA ฉันตั้งค่าไว้ที่เลเยอร์สูงสุดเท่าที่จะเป็นไปได้ จากนั้นฉันก็เริ่มระบบแฟ้มในเซกเตอร์ 2049 และชดเชยแต่ละเซกเตอร์เริ่มด้วยจำนวนหารด้วย 8 ฉันอาจจะออกไปในสิ่งที่คุณถาม แต่นี่คือ 2 my ของฉัน


ดังนั้นคุณกำลังบอกว่าสิ่งที่การตั้งค่า RA อยู่ในอุปกรณ์ระดับบนสุดมันจะถูกส่งผ่านลงมา ดังนั้นถ้าคุณใช้ LVM -> 2 x RAID -> ดิสก์ทางกายภาพ 4 x และคุณมี RA เป็น 4 ดังนั้นถ้ามีอุปกรณ์ทางกายภาพ 8 ตัวคุณจะจบลงด้วย RA ที่มีประสิทธิภาพ 32 คุณจะปรับแต่งอย่างไร ขนาด chunk / strip ของ RAID จะมีประสิทธิภาพในสถานการณ์นั้น - ฉันคิดว่าคุณต้องการให้ RA ครอบคลุมทั้งแถบดังนั้นคุณไม่ต้องเข้าถึงสองครั้งหรือไม่
Adam C

BTW ถ้าฉันได้รับสิทธิ์นี้ในสถานการณ์ที่ฉันอธิบายฉันคิดว่าฉันต้องการมีชิ้นส่วน / แถบของ RAID0 ที่ตั้งค่าเป็น X โดยที่ X = RA * 512bytes ดังนั้นถ้าฉันมีก้อน / แถบ 64k (ค่าเริ่มต้น mdadm) ดังนั้น RA ขั้นต่ำที่ฉันควรใช้คือ 128 เพราะนั่นทำให้ฉันได้แถบทั้งหมดในการถ่ายครั้งเดียว
อดัม C

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