ทำไมการเข้าถึงการอ่าน RAID1 ของฉันจึงช้ากว่าการเข้าถึงการเขียน


10

ฉันได้ทำการทดสอบประสิทธิภาพง่าย ๆ แล้วและดูเหมือนว่าการอ่านจาก RAID1 ของฉันช้ากว่าการเขียน:

root@dss0:~# for i in 1 2 3; do dd if=/dev/zero of=/dev/sda bs=1048576 count=131072; done
137438953472 bytes (137 GB) copied, 192.349 s, 715 MB/s
137438953472 bytes (137 GB) copied, 192.851 s, 713 MB/s
137438953472 bytes (137 GB) copied, 193.026 s, 712 MB/s
root@dss0:~# for i in 1 2 3; do dd if=/dev/sda of=/dev/null bs=1048576 count=131072; done
137438953472 bytes (137 GB) copied, 257.201 s, 534 MB/s
137438953472 bytes (137 GB) copied, 255.522 s, 538 MB/s
137438953472 bytes (137 GB) copied, 259.945 s, 529 MB/s

ฉันเข้าใจว่า dd ไม่ใช่เครื่องมือทดสอบประสิทธิภาพ แต่ผลลัพธ์นี้ยังแปลกใจ

ระบบถูกสร้างขึ้นโดยผู้ขายและมีกระดานหลัก Supermicro พร้อม RAM ขนาด 16 GByte ตัวควบคุม RAID เป็น MegaRAID 9271-8i ที่มีแคช 1 GByte มี 8 2 TByte SAS ดิสก์บนแบ็คเพลน SAS-933EL1 ฉันไม่แน่ใจเกี่ยวกับการเดินสายเคเบิลตัวเชื่อมต่อหนึ่งตัวควบคุมไปที่แบ็คเพลน SAS ส่วนอีกอันหนึ่งไปยังดิสก์ SATA สองตัวที่ใช้ระบบปฏิบัติการ

RAID1 ถูกตั้งค่าด้วยคำสั่งนี้:

root@dss0:~# /opt/MegaRAID/MegaCli/MegaCli64 -CfgLdAdd -r1 [8:0,8:1,8:2,8:3,8:4,8:5,8:6,8:7] WB NORA Direct -a0
Adapter 0: Created VD 0
Adapter 0: Configured the Adapter!!
Exit Code: 0x00

root@dss0:~# /opt/MegaRAID/MegaCli/MegaCli64 -LDInfo -LALL -aALL
Adapter 0 -- Virtual Drive Information:
Virtual Drive: 0 (Target Id: 0)
Name                :
RAID Level          : Primary-1, Secondary-0, RAID Level Qualifier-0
Size                : 7.275 TB
Sector Size         : 512
Is VD emulated      : No
Mirror Data         : 7.275 TB
State               : Optimal
Strip Size          : 256 KB
Number Of Drives    : 8
Span Depth          : 1
Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU
Current Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU
Default Access Policy: Read/Write
Current Access Policy: Read/Write
Disk Cache Policy   : Disk's Default
Encryption Type     : None
PI type: No PI
Is VD Cached: No
Exit Code: 0x00

ฉันคาดหวังว่าการเข้าถึงการอ่านเป็นอย่างน้อยเท่ากับการเข้าถึงเพื่อเขียนอาจจะเร็วกว่า ความเร็วในการเขียน 715 MByte / วินาทีดูเหมือนว่าจะใกล้กับขีด จำกัด 6 GBit ของตัวเชื่อมต่อ SAS / SATA เดียว นี่อาจเป็นปัญหาการกำหนดค่าหรือการต่อสายเคเบิลกับแบ็คเพลน SAS หรือไม่ สามารถสอบถามการกำหนดค่าแบ็คเพลน SAS ด้วยคำสั่ง MegaRAID ได้หรือไม่ กรุณาแนะนำ

ปรับปรุง

ประสิทธิภาพของการอ่านช้ากว่าที่คาดอาจเกิดจากการแคชของระบบย่อย Linux I / O

เมื่อใช้การตั้งค่าสถานะโดยตรงในคำสั่ง dd ฉันได้รับ

root@dss0:~# dd if=/dev/sda of=/dev/null bs=1048576 count=131072 iflag=direct
137438953472 bytes (137 GB) copied, 199.862 s, 688 MB/s

ซึ่งดีกว่ามาก แต่ก็ยังช้ากว่าความเร็วในการเขียน 10% การใช้ oflag = direct ไม่ส่งผลต่อความเร็วในการเขียน


คำตอบง่ายๆ: อ่านต้องรอผลเขียนไม่ได้
David Schwartz

คำตอบ:


8

poige นั้นถูกต้องเกี่ยวกับแคชการเขียน แต่นี่เป็นรายละเอียดเพิ่มเติม

dd ด้วยค่าศูนย์และการใช้แคชการเขียนไม่ใช่วิธีที่ถูกต้องในการทำเบนช์มาร์ก (ยกเว้นกรณีที่คุณต้องการทดสอบแคชการเขียนแน่นอนซึ่งอาจเป็นประโยชน์สำหรับระบบไฟล์เท่านั้นเพื่อดูว่ามันซิงค์ข้อมูลเมตาสร้างไฟล์ใหม่เป็นต้น ) (และมีแนวโน้มว่าววจะเป็นเกณฑ์มาตรฐานประเภทที่ไม่ถูกต้องเสมอไป แต่มันใช้สำหรับการทดสอบขั้นพื้นฐานมาก)

ฉันขอแนะนำให้คุณใช้ dd อย่างน้อยหนึ่งตัวเลือกต่อไปนี้:

conv=fdatasync -> this will make it flush to disk before finishing and calculating speed
oflag=direct   -> this will make it skip the OS cache but not the disk cache
conv=sync      -> more like skipping the disk cache too, but not really ... just flushing it every block or something like that.

และอย่าใช้ศูนย์เช่นกัน ฮาร์ดแวร์ / ซอฟต์แวร์ / เฟิร์มแวร์สมาร์ทบางตัวอาจใช้ทางลัดบางอย่างหากข้อมูลสามารถคาดเดาได้ว่าเป็นศูนย์ นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งหากมีการบีบอัดข้อมูลซึ่งฉันเดาว่าคุณไม่ได้ใช้งาน ให้ใช้ไฟล์สุ่มในหน่วยความจำแทน (เช่น / dev / shm) urandom ช้าดังนั้นคุณต้องเขียนมันที่ไหนสักแห่งชั่วคราวเพื่ออ่านมันอีกครั้ง สร้างไฟล์สุ่ม 50MB:

dd if=/dev/urandom of=/dev/shm/randfile bs=1M count=50

อ่านไฟล์หลาย ๆ ครั้งเพื่อเขียน (ที่นี่ฉันใช้ cat เพื่ออ่าน 6 ครั้ง):

dd if=<(cat /dev/shm/randfile{,,,,,}) of= ... conv=fdatasync

rm /dev/shm/randfile

นอกจากนี้โปรดทราบว่าการอ่าน Raid1 นั้นเร็วที่สุดด้วยการทำงานแบบขนานดังนั้นดิสก์จึงสามารถใช้งานได้อย่างอิสระ อาจไม่ฉลาดพอที่จะประสานงานดิสก์เพื่ออ่านส่วนต่าง ๆ ของการทำงานเดียวกันกับดิสก์ที่ต่างกัน


10

กุญแจสำคัญในการตอบคำถามของคุณจะอ่านล่วงหน้า กาลครั้งหนึ่งฉันเกิดปัญหาขึ้นเช่นกัน

IOW เพื่อประสิทธิภาพการอ่านตามลำดับที่ดีที่สุดดิสก์ทั้งหมดควรมีส่วนร่วมอย่างถาวรในอินพุต

เมื่อคุณใช้ddw / o directio(ดูman dd) การดำเนินการเขียนจะไม่ถูกดำเนินการในทันที แต่ต้องผ่านแคชของระบบปฏิบัติการดังนั้นจึงมีโอกาสมากขึ้นที่จะเกี่ยวข้องกับดิสก์ทั้งหมดตามลำดับและบรรลุประสิทธิภาพสูงสุดที่เป็นไปได้

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