หากพูดถึง CrystalDiskMark ก็ต้องบอกว่าเป็นที่รู้จักกันในโลกของ Windows กันมา พอสมควรแล้ว เพราะถูกใช้กันอย่างกว้างขวางในการทดสอบ IOPS บน Disk/SSD แต่วันนี้เราจะพาไปรู้จักกับ โปรแกรมอีกตัวหนึ่งบนโลกของ opensource ซึ่งคือ KDiskMark ซึ่งทำงานเหมือนกับ CrystalDiskMark ไม่แตกต่างกัน แต่แค่คนละ แพลตฟอร์มเท่านั้นเอง
IOPS คืออะไร
IOPS (Input/Output Operations Per Second) หรือแปลตามตัวเลยก็หมายถึง จำนวนการทำงานอ่าน/เขียนข้อมูลต่อวินาที ของอุปกรณ์จัดเก็บข้อมูล ทั้ง HDD, SSD, SAN และ NVMe
Input/Output operation = การอ่านหรือเขียนข้อมูลขนาดหนึ่งครั้ง
Per Second = นับจำนวนครั้งที่อุปกรณ์สามารถทำงานเหล่านี้ได้ใน 1 วินาที
หรือสรุปเลยก็คือ
IOPS = “ความเร็วในการทำงานของดิสก์ ว่าสามารถอ่าน/เขียนข้อมูลกี่ครั้งต่อวินาที”
แล้วทำไม IOPS จึงสำคัญ
เพราะมันใช้วัด ประสิทธิภาพของ Storage เพื่ออย่างน้อยเราจะได้รู้ว่า เราได้ใช้งานตามสเปคที่กำหนด โดยยิ่ง IOPS สูง ก็หมายถึง การตอบสนองของระบบเร็วขึ้น และทำให้โปรแกรมหรือฐานข้อมูลโหลดข้อมูลเร็วขึ้นนั่นเอง เพราะการตอบสนองที่เร็วนั้นสำคัญมากกับ ระบบฐานข้อมูล, Virtual Machine, Web server & App Server ในปัจจุบัน
ประเภทของ I/O
1. Sequential I/O หรือ อ่าน/เขียนข้อมูลต่อเนื่องเป็นลำดับ ซึ่งอยู่ใน HDD จะทำได้ดีเพราะหัวอ่านไม่ต้องเคลื่อนมาก
2. Random I/O หรือ อ่าน/เขียนแบบกระจาย (ไม่ต่อเนื่อง) จะทำงานได้ดีใน SSD เพราะเป็นอิเล็กทรอนิกส์ HDD
เรามาดูตัวเลขคร่าวๆ กัน
SSD สามารถทำ 100,000 IOPS (4K random read)
HDD 7200rpm ทำได้ประมาณ 100–200 IOPS (4K random read)
เราจะเห็นได้ว่า HDD นั้นทำงานได้ต่ำมาก หากเทียบกับ SSD
หมายเหตุ: IOPS สูงสุดไม่จำเป็นต้องเท่ากับความเร็ว (MB/s)
ยกตัวอย่างเช่น IOPS 100,000 กับ ขนาดข้อมูล 4KB 100,000 × 4 KB ≈ 400 MB/s
เมื่อขนาดบล็อกใหญ่ขึ้น MB/s สูง จะทำให้ IOPS ลด
1. Sequential Read / Sequential Write (Seq Read / Seq Write)
ความหมาย: ความเร็วในการอ่านหรือเขียนไฟล์ขนาดใหญ่แบบ ต่อเนื่อง
หน่วย: MB/s
ซึ่งจะมีผลกับ การคัดลอกไฟล์ขนาดใหญ่ การอ่าน/เขียนวิดีโอ, ISO, หรือ backup file
ตัวอย่าง: Seq Read = 500 MB/s ดิสก์อ่านไฟล์ใหญ่ต่อเนื่องได้ 500 MB ต่อวินาที
2. Random Read / Random Write (Rand Read / Rand Write)
ความหมาย: ความเร็วในการอ่านหรือเขียน แบบกระจาย (ไม่ต่อเนื่อง)
หน่วย: MB/s หรือ IOPS (ขึ้นอยู่กับการตั้งค่า)
มีผลกับ Database, VM, OS, แอปพลิเคชันที่อ่าน/เขียนไฟล์เล็ก ๆ หลาย ๆ ไฟล์
ตัวอย่าง: Rand Write = 50 MB/s ดิสก์สามารถเขียนไฟล์เล็ก ๆ กระจายได้เร็วประมาณ 50 MB ต่อวินาที
3 Queue Depth / Threads
KDiskMark ทดสอบหลาย Queue Depths (QD) และ Threads
Queue Depth = จำนวนคำสั่ง I/O รอประมวลผลพร้อมกัน
Threads = จำนวนการทดสอบ I/O พร้อมกัน
ยิ่ง QD หรือ Threads สูงใน SSD, NVMe จะแสดงประสิทธิภาพได้เต็มมากขึ้น
HDD ไม่ค่อยดีเมื่อ QD สูง เพราะหัวอ่านต้องเคลื่อนมาก เพราะมันก็กลไกหรือ mechanic
4 Block Size (ขนาดบล็อก)
KDiskMark สามารถเลือก 4KB, 512KB, 1MB ฯลฯ
4KB เพื่อจำลอง workload แบบฐานข้อมูล/VM (ไฟล์เล็ก)
1MB+ หรือมากกว่า เพื่อ จำลอง workload แบบคัดลอกไฟล์ใหญ่
ให้เราคิดว่าเมื่อขนาดบล็อกเล็ก IOPS สำคัญกว่า MB/s
แต่เมื่อ ขนาดบล็อกใหญ่ จะทำให้ MB/s สำคัญกว่า IOPS
5 ความแตกต่างระหว่าง MB/s และ IOPS
MB/s ปริมาณข้อมูลต่อวินาที (เหมาะกับ sequential)
IOPS จำนวนคำสั่งต่อวินาที (เหมาะกับ random)
ตารางสรุป
ตัววัด | ดีต่อ | หมายความว่า |
---|---|---|
Seq Read / Write | ไฟล์ใหญ่ต่อเนื่อง | ความเร็วสูง จะทำให้ copy ไฟล์ใหญ่เร็ว |
Rand Read / Write | ไฟล์เล็ก/ฐานข้อมูล | ความเร็วสูง จะดีสำหรับ database/VM ตอบสนองเร็ว |
Block Size | เล็กหรือใหญ่ | เล็ก IOPS สำคัญ, ใหญ่ MB/s สำคัญ |
Queue Depth / Threads | จำนวนงานพร้อมกัน | สูงใน SSD/NVMe แสดงประสิทธิภาพเต็ม |