ในบทความนี้ เราจะพูดถึงวิธีตรวจสอบประสิทธิภาพของดิสก์หรือสตอเรจอาร์เรย์ใน Linux IOPS (การดำเนินการอินพุต/เอาต์พุตต่อวินาที) คือจำนวนการดำเนินการอินพุต-เอาต์พุตที่ระบบจัดเก็บข้อมูลดำเนินการต่อวินาที (อาจเป็นดิสก์เดียว, อาร์เรย์ RAID หรือ LUN ในอุปกรณ์จัดเก็บข้อมูลภายนอก) โดยทั่วไป IOPS หมายถึงจำนวนบล็อกที่สามารถอ่านหรือเขียนไปยังสื่อได้
ผู้ผลิตดิสก์ส่วนใหญ่ระบุค่า IOPS เล็กน้อย แต่ไม่รับประกันตามจริง เพื่อให้เข้าใจประสิทธิภาพของระบบย่อยพื้นที่เก็บข้อมูลของคุณก่อนเริ่มโครงการ การรับค่า IOPS สูงสุดที่พื้นที่จัดเก็บของคุณสามารถจัดการได้นั้นคุ้มค่า
การใช้ FIO (Flexible I/O) Tool สำหรับการเปรียบเทียบสตอเรจ
ในการวัดประสิทธิภาพของดิสก์ IOPS ใน Linux คุณสามารถใช้ fio (เครื่องมือนี้พร้อมใช้งานสำหรับ CentOS/RHEL ในที่เก็บ EPEL) ดังนั้น ในการติดตั้ง fio ใน RHEL หรือ CentOS ให้ใช้ตัวจัดการแพ็คเกจ yum (dnf):
# yum install epel-release -y
# yum install fio -y
หรือ apt-get ใน Debian หรือ Ubuntu:
# apt-get install fio
จากนั้นคุณจะต้องระบุดิสก์ที่จะทดสอบ การทดสอบทำได้โดยดำเนินการอ่าน/เขียนในไดเร็กทอรีของดิสก์หรือ LUN ที่ติดตั้งอยู่
ลองทำการทดสอบประสิทธิภาพของดิสก์ IOPS ประเภทต่างๆ ในสถานการณ์โหลดดิสก์ต่างๆ (โหมดทดสอบที่คุณเลือกขึ้นอยู่กับตรรกะของแอปที่โฮสต์และโครงสร้างพื้นฐานทั่วไปของโปรเจ็กต์)
การทดสอบการอ่าน/เขียนแบบสุ่ม
เมื่อรันการทดสอบ ไฟล์ขนาด 8 GB จะถูกสร้างขึ้น จากนั้น fio จะอ่าน/เขียน 4KB บล็อก (ขนาดบล็อกมาตรฐาน) ด้วย 75/25% โดยจำนวนการดำเนินการอ่านและเขียนและวัดประสิทธิภาพ คำสั่งมีดังนี้:
# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=testfio --bs=4k --iodepth=64 --size=8G --readwrite=randrw --rwmixread=75
ฉันทำการทดสอบครั้งแรกกับอาร์เรย์ที่ประกอบด้วย SSD . สองตัว และได้ผลดี:
- อ่าน: 3280MiB/s, IOPS เฉลี่ย 83000
- เขียน: 110MiB/s, IOPS เฉลี่ย 28000
เนื่องจากเราได้ทำการทดสอบการอ่าน/เขียนแบบรวม ค่าสำหรับการทดสอบแยกจึงสูงขึ้น
ในการเปรียบเทียบ ฉันวัดประสิทธิภาพบน SATA ไดรฟ์:
- อ่าน: IOPS=430, BW=1.7 MiB/s
- เขียน: IOPS=143, BW=0.6 MiB/s
แน่นอนว่าผลลัพธ์ของ HDD นั้นแย่กว่าของ SSD
การทดสอบการอ่านแบบสุ่ม
ในการวัดประสิทธิภาพของดิสก์สำหรับการดำเนินการอ่านแบบสุ่มเท่านั้น ให้รันคำสั่งต่อไปนี้:
# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=testfio --bs=4k --iodepth=64 --size=8G --readwrite=randread
ส่วนสุดท้ายของคำสั่งเปลี่ยนเป็น —readwrite=randread
.
อย่างที่ฉันบอกไปก่อนหน้านี้ ประสิทธิภาพในการอ่าน/เขียนจะสูงขึ้นหากวัดแยกกัน:
READ: IOPS=150k, BW=584MiB/s (612MB/s)
การทดสอบการเขียนแบบสุ่ม
ในการวัดประสิทธิภาพของดิสก์สำหรับการดำเนินการเขียนแบบสุ่ม ให้รันคำสั่งนี้:
# fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=fiotest --bs=4k --iodepth=64 --size=8G --readwrite=randwrite
WRITE: IOPS=84.7k, BW=331MiB/s (347MB/s)
ประสิทธิภาพการทำงานเขียนบน SSD ที่ดีนั้นสูงมากเช่นกัน เช่นเดียวกับการทดสอบการอ่าน ความแตกต่างเมื่อเปรียบเทียบกับการทดสอบแบบผสมจะสูงถึง 200-250 MiB/s และ 50000 IOPS
หากคุณอ้างถึงเอกสารประกอบอย่างเป็นทางการของผู้ผลิต (นี่คือ Intel SSD) ก็สามารถพูดได้ว่าค่านี้เป็นความจริง
ตัวอย่างไฟล์ Fio Config
Fio อนุญาตให้ตรวจสอบประสิทธิภาพของดิสก์โดยใช้คำสั่งโต้ตอบและไฟล์การกำหนดค่าที่เตรียมไว้ล่วงหน้าสำหรับการทดสอบ หากต้องการใช้ตัวเลือกนี้ ให้สร้างไฟล์:
# nano read.fio
และเพิ่มเนื้อหาต่อไปนี้ลงไป:
[global] rw=randread size=8G filename=/tmp/testfio ioengine=libaio iodepth=4 invalidate=1 direct=1 [bgread] rw=randread iodepth=64
จากนั้นเริ่มการทดสอบ:
# fio read.fio
การทดสอบจะวัดประสิทธิภาพการอ่านของดิสก์ หากต้องการทดสอบประสิทธิภาพการเขียน ให้ใช้ไฟล์กำหนดค่าต่อไปนี้:
[global] rw=randwrite size=8G filename=/tmp/testfio ioengine=libaio iodepth=4 invalidate=1 direct=1 [bgwrite] rw=randwrite iodepth=64
การวัดเวลาแฝงของดิสก์โดยใช้ Ioping
นอกจาก IOPS แล้ว ยังมีพารามิเตอร์สำคัญอีกตัวหนึ่งที่บ่งบอกถึงคุณภาพของพื้นที่จัดเก็บข้อมูลของคุณ นั่นคือ เวลาแฝง เวลาในการตอบสนอง คือความล่าช้าของคำขออินพุต/เอาต์พุตที่กำหนดเวลาในการเข้าถึงที่เก็บข้อมูล (วัดเป็นมิลลิวินาที) ยิ่งเวลาแฝงยิ่งสูง แอปของคุณยิ่งต้องรอจนกว่าจะได้รับข้อมูลจากดิสก์ของคุณ ค่าแฝง มากกว่า 20 ms สำหรับระบบจัดเก็บข้อมูลทั่วไปถือว่าแย่
ในการตรวจสอบเวลาแฝงของดิสก์ใน Linux ioping เครื่องมือที่ใช้:
# yum install ioping -y
# apt-get install ioping
เรียกใช้การทดสอบเวลาแฝงสำหรับดิสก์ของคุณ (เรียกใช้คำขอ 20 รายการ):
# ioping -c 20 /tmp/
4 KiB <<< /tmp/ (ext4 /dev/md126p5): request=1 time=1.55 ms (warmup) ...................... 4 KiB <<< /tmp/ (ext4 /dev/md126p5): request=19 time=176.3 us (fast) 4 KiB <<< /tmp/ (ext4 /dev/md126p5): request=20 time=356.9 us --- /tmp/ (ext4 /dev/md126p5) ioping statistics --- 19 requests completed in 5.67 ms, 76 KiB read, 3.35 k iops, 13.1 MiB/s generated 20 requests in 19.0 s, 80 KiB, 1 iops, 4.21 KiB/s min/avg/max/mdev = 176.3 us / 298.7 us / 368.9 us / 45.7 us
ค่าเฉลี่ยคือ 298.7 เรา (ไมโครวินาที) ดังนั้นเวลาแฝงเฉลี่ยในกรณีของเราคือ 0.3 ms , เยี่ยมมาก
ค่าเวลาแฝงสามารถระบุได้ใน เรา (ไมโครวินาที) หรือ มิลลิวินาที (มิลลิวินาที). ในการรับค่า ms จากค่า us หนึ่ง ให้หารด้วย 1,000คุณจึงทำการทดสอบโหลดที่เก็บข้อมูลบนเซิร์ฟเวอร์ของคุณก่อนเริ่มโครงการและตรวจสอบค่าประสิทธิภาพสูงสุดได้ อย่างไรก็ตาม การทดสอบไม่ได้รับประกันว่าดิสก์อาร์เรย์หรือดิสก์ของคุณจะแสดงประสิทธิภาพเหมือนเดิมตลอดเวลา แต่ควรทำการทดสอบในระยะเริ่มต้นของโปรเจ็กต์ เรียนรู้วิธีทดสอบ IOPS ใน Windows ในบทความนี้