VPS Benchmark ที่ทำเองได้และเชื่อถือได้ใช้ 4 คำสั่งหลัก คือ vmstat วัด CPU Steal Time, sysbench cpu วัดความเร็ว CPU, fio แบบ Random 4K วัด IOPS และ fio แบบ Sequential วัด Throughput ของดิสก์ ผลที่ได้บอกว่า VM ได้ทรัพยากรตามที่จ่ายเงินหรือไม่ และช่วยเปรียบเทียบผู้ให้บริการหรือแพ็กเกจต่างๆ ด้วยเกณฑ์เดียวกัน
บทความนี้ใช้ได้กับ VPS, Cloud Server และ VM บน Private Cloud ทุกแบบที่รัน Linux ตัวอย่างคำสั่งทดสอบบน Ubuntu และ Debian
ทำไมต้องทำ VPS Benchmark เอง
สเปกในหน้าแพ็กเกจบอกแค่จำนวน vCPU, RAM และขนาดดิสก์ แต่ไม่ได้บอกว่า vCPU นั้นแชร์กับ VM อื่นมากแค่ไหน หรือดิสก์ทำ IOPS ได้เท่าไรในสภาพใช้งานจริง อาการที่มักเจอคือระบบช้าลงบางช่วงเวลาโดยที่โหลดของเราไม่ได้เพิ่ม ซึ่งอาจเกิดจาก Noisy Neighbor คือ VM อื่นบน Host เดียวกันใช้ทรัพยากรหนัก
การทำ VPS Benchmark ด้วยวิธีที่เป็นมาตรฐาน ทำให้ได้ตัวเลขที่ใช้คุยกับผู้ให้บริการได้ และใช้เป็น Baseline เทียบก่อนและหลังเปลี่ยนแพ็กเกจ
เตรียมเครื่องก่อนทำ VPS Benchmark
sudo apt update
sudo apt install -y sysstat sysbench fio
- ปิดหรือหยุดแอปที่รันอยู่ เพื่อไม่ให้โหลดของเราเองปนกับผลทดสอบ
- ทดสอบซ้ำอย่างน้อย 3 รอบในช่วงเวลาต่างกัน เช่น เช้า บ่าย และช่วงค่ำ เพราะโหลดของ Host เปลี่ยนตามเวลา
- บันทึกเวอร์ชัน Kernel, ประเภทดิสก์ และขนาด VM ไว้ทุกครั้ง เพื่อให้เทียบผล VPS Benchmark ข้ามรอบได้
คำสั่งที่ 1: vmstat วัด CPU Steal Time
vmstat 1 60
คำสั่งนี้แสดงค่าทุก 1 วินาที 60 ครั้ง ให้ดูคอลัมน์ st (Steal) ซึ่งคือสัดส่วนเวลาที่ vCPU พร้อมทำงานแต่ต้องรอ Hypervisor เพราะ CPU จริงถูกใช้โดย VM อื่น
- ค่า st ใกล้ 0: ได้ CPU เต็มตามสเปก
- ค่า st ขึ้นลงเป็นช่วงสั้นๆ: เป็นเรื่องปกติของ Shared Infrastructure
- ค่า st สูงต่อเนื่อง: มีการแย่ง CPU ระดับ Host เกณฑ์ที่ใช้กันทั่วไปคือถ้าสูงเกินประมาณ 5–10% ต่อเนื่องควรแจ้งผู้ให้บริการ [ตรวจสอบ: ใช้เป็นแนวทางทั่วไป ไม่ใช่มาตรฐานทางการ]
ถ้าต้องการดูแยกทีละ vCPU ใช้ mpstat -P ALL 1 30 จากแพ็กเกจ sysstat แล้วดูคอลัมน์ %steal
คำสั่งที่ 2: sysbench วัดความเร็ว CPU
sysbench cpu --threads=$(nproc) --time=60 run
ดูค่า events per second ยิ่งสูงยิ่งดี ให้ทดสอบ 2 แบบ คือ --threads=1 เพื่อวัด Single-thread และ --threads=$(nproc) เพื่อวัดทุก vCPU พร้อมกัน ถ้าผลแบบหลายเธรดไม่เพิ่มตามจำนวน vCPU อาจแปลว่า vCPU บางตัวไม่ได้ทำงานเต็มที่ ให้รัน vmstat คู่กันในอีกหน้าต่างเพื่อดูค่า Steal ระหว่างทดสอบ
คำสั่งที่ 3: fio วัด IOPS แบบ Random 4K
fio --name=randrw --filename=/root/fio.test --size=4G --rw=randrw --rwmixread=70 --bs=4k --ioengine=libaio --iodepth=32 --numjobs=4 --direct=1 --runtime=60 --time_based --group_reporting
รูปแบบนี้จำลองโหลดของ Database คืออ่าน 70% เขียน 30% ขนาดบล็อก 4K ให้ดูค่า IOPS และ clat (Completion Latency) โดยเฉพาะค่า Percentile 99 ซึ่งบอกว่าคำขอที่ช้าที่สุดใช้เวลาเท่าไร ระบบที่ IOPS สูงแต่ Latency ที่ 99th Percentile กระโดดเป็นช่วงๆ มักทำให้แอปช้าเป็นพักๆ
ค่า --direct=1 สำคัญมาก เพราะข้าม Page Cache ของ Linux ถ้าไม่ใส่ ผลจะสูงเกินจริงเพราะวัดความเร็ว RAM แทนดิสก์ ดูตัวเลือกทั้งหมดได้ใน เอกสาร fio
