Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> ระบบ >> Linux

วิธีตรวจสอบประสิทธิภาพดิสก์ (IOPS และ Latency) บน Linux

ภาพรวม

บทความนี้จะอภิปรายวิธีตรวจสอบประสิทธิภาพของดิสก์หรืออาร์เรย์สตอเรจใน Linux IOPS (input/output operations per second) คือจำนวนการดำเนินการอินพุต/เอาต์พุตที่ระบบจัดเก็บข้อมูลทำได้ต่อวินาที (อาจเป็นดิสก์เดี่ยว อาร์เรย์ RAID หรือ LUN ในอุปกรณ์สตอเรจภายนอก) โดยทั่วไป IOPS หมายถึงจำนวนบล็อกที่สามารถอ่านหรือเขียนได้จากสื่อจัดเก็บ

ผู้ผลิตดิสก์ส่วนใหญ่ระบุค่า IOPS ตาม名義 แต่จริงๆ แล้วไม่ได้รับประกัน เพื่อเข้าใจประสิทธิภาพระบบสตอเรจของคุณก่อนเริ่มโครงการ ควรหาค่า IOPS สูงสุดที่สตอเรจของคุณรับมือได้

การใช้เครื่องมือ FIO (Flexible I/O) สำหรับการวัดประสิทธิภาพสตอเรจ

เพื่อวัดประสิทธิภาพ IOPS ของดิสก์ใน Linux สามารถใช้ fio (มีในที่เก็บ EPEL สำหรับ CentOS/RHEL) ติดตั้ง fio ใน RHEL หรือ CentOS โดยใช้ yum (dnf):

# yum install epel-release -y
# yum install fio -y

หรือ apt-get ใน Debian หรือ Ubuntu:

# apt-get install fio

วิธีตรวจสอบประสิทธิภาพดิสก์ (IOPS และ Latency) บน Linux

จากนั้นระบุดิสก์ที่จะทดสอบ การทดสอบทำโดยการดำเนินการอ่าน/เขียนในไดเรกทอรีที่ดิสก์หรือ 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

วิธีตรวจสอบประสิทธิภาพดิสก์ (IOPS และ Latency) บน Linux

ผมรันการทดสอบครั้งแรกบนอาร์เรย์ที่ประกอบด้วย SSD สองตัว และได้ผลลัพธ์ที่ดี:

  • อ่าน: 3280MiB/s, IOPS เฉลี่ย 83000
  • เขียน: 110MiB/s, IOPS เฉลี่ย 28000

เนื่องจากเรารันการทดสอบอ่าน/เขียนรวม ค่าสำหรับการทดสอบแยกจะสูงกว่า

เปรียบเทียบ ผมวัดประสิทธิภาพบนดิสก์ SATA:

วิธีตรวจสอบประสิทธิภาพดิสก์ (IOPS และ Latency) บน Linux

  • อ่าน: 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

วิธีตรวจสอบประสิทธิภาพดิสก์ (IOPS และ Latency) บน Linux

เช่นที่กล่าวไว้ ประสิทธิภาพอ่าน/เขียนจะสูงกว่าถ้าวัดแยกกัน:

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 SSDs) สามารถกล่าวได้ว่าค่าเหล่านี้เป็นจริง

ตัวอย่างไฟล์กำหนดค่า Fio

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

การวัด Latency ของดิสก์ด้วย Ioping

นอกจาก IOPS แล้ว ยังมีพารามิเตอร์สำคัญอีกอย่างที่บ่งชี้คุณภาพสตอเรจคือ latency Latency คือความล่าช้าของคำขออินพุต/เอาต์พุตที่กำหนดเวลาในการเข้าถึงสตอเรจ (วัดเป็นมิลลิวินาที) ยิ่ง latency สูง แอปของคุณต้องรอนานเท่านั้นจึงจะได้ข้อมูลจากดิสก์ ค่า latency เกิน 20 ms สำหรับระบบจัดเก็บข้อมูลทั่วไปถือว่าแย่

เพื่อตรวจสอบ latency ของดิสก์ใน Linux ใช้เครื่องมือ ioping:

# yum install ioping -y
# apt-get install ioping

รันการทดสอบ latency สำหรับดิสก์ของคุณ (รัน 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 us (ไมโครวินาที) ดังนั้น latency เฉลี่ยในกรณีนี้คือ 0.3 ms ซึ่งดีเยี่ยม

ค่า latency สามารถระบุเป็น us (ไมโครวินาที) หรือ ms (มิลลิวินาที) เพื่อแปลงจาก us เป็น ms ให้หารด้วย 1,000

ดังนั้น คุณสามารถทดสอบโหลดสตอเรจบนเซิร์ฟเวอร์ก่อนเปิดตัวโครงการและตรวจสอบค่าประสิทธิภาพสูงสุด อย่างไรก็ตาม การทดสอบไม่รับประกันว่าอาร์เรย์ดิสก์หรือดิสก์จะแสดงประสิทธิภาพเดียวกันตลอดเวลา แต่คุ้มค่าที่จะทดสอบในขั้นตอนเริ่มต้นของโครงการ เรียนรู้วิธีทดสอบ IOPS ใน Windows ได้จากบทความนี้