Benchmark Cloud Server: วัด CPU ดิสก์ และเครือข่ายให้แม่นยำ

Benchmark Cloud Server ด้วย sysbench, fio และ iperf3 วัด CPU ดิสก์ และเครือข่าย อ่านค่า IOPS, Latency และ Throughput ให้ถูก โดยไม่รบกวนระบบที่ใช้งานจริง

โดย ทีมงาน THAI DATA CLOUD อัปเดต อ่าน 11 นาที

แชร์FacebookXLINELinkedIn
Benchmark Cloud Server — Benchmark Cloud Server: วัด CPU ดิสก์ และเครือข่ายให้แม่นยำ
Benchmark Cloud Server: วัด CPU ดิสก์ และเครือข่ายให้แม่นยำ

คำตอบสั้น ๆ: Benchmark Cloud Server ด้วย sysbench, fio และ iperf3 วัด CPU ดิสก์ และเครือข่าย อ่านค่า IOPS, Latency และ Throughput ให้ถูก โดยไม่รบกวนระบบที่ใช้งานจริง

คู่มือนี้อธิบาย Benchmark Cloud Server ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย

Benchmark คือการวัดประสิทธิภาพของเซิร์ฟเวอร์ด้วยชุดทดสอบมาตรฐาน เพื่อให้ได้ตัวเลขที่เทียบกันได้ เช่น ก่อนและหลังอัปเกรดสเปก ระหว่างดิสก์สองประเภท หรือก่อนย้ายระบบขึ้นเครื่องใหม่ ผู้ดูแลระบบและทีมที่กำลังเลือกขนาด Cloud Server จะได้ข้อมูลจริงแทนการเดา และรู้ว่าคอขวดอยู่ที่ CPU ดิสก์ หรือเครือข่าย

คู่มือนี้ใช้เครื่องมือโอเพนซอร์สสามตัว: sysbench วัด CPU และหน่วยความจำ, fio วัดดิสก์ และ iperf3 วัดเครือข่าย เมื่อจบคุณจะรันชุดทดสอบเดียวกันซ้ำได้ อ่านตัวเลขสำคัญได้ถูก และรู้กติกาการวัดที่ไม่ไปรบกวนระบบที่ใช้งานจริงหรือเซิร์ฟเวอร์ของคนอื่น

สิ่งที่ต้องเตรียม (Benchmark Cloud Server)

  • Cloud Server ที่ใช้ Ubuntu 22.04/24.04, Debian 12 หรือ AlmaLinux/Rocky Linux 9 และสิทธิ์ sudo
  • เครื่องที่สองในเครือข่ายเดียวกันสำหรับทดสอบเครือข่าย (ตัวอย่าง 10.10.0.11 และ 10.10.0.12)
  • พื้นที่ว่างบนดิสก์ที่จะทดสอบอย่างน้อย 5 GB ตรวจด้วย df -h
  • ช่วงเวลาที่ไม่กระทบผู้ใช้ ถ้าเป็นเครื่องที่ให้บริการอยู่ ควรวัดในช่วงปิดปรับปรุงเท่านั้น
เช็กลิสต์กติกาการ Benchmark เซิร์ฟเวอร์อย่างถูกวิธีและไม่รบกวนระบบที่ใช้งานจริง
Benchmark ใช้ทรัพยากรเต็มที่โดยตั้งใจ จึงต้องเลือกเครื่องและเวลาให้ถูก

ขั้นตอนที่ 1: ตั้งกติกาและบันทึกสเปกก่อนวัด (Benchmark Cloud Server)

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

lscpu | grep -E '^Model name|^CPU\(s\)'
free -h | grep Mem
lsblk -d -o NAME,SIZE,ROTA,MOUNTPOINT
uname -r; date

ขั้นตอนที่ 2: ติดตั้ง sysbench, fio และ iperf3 (Benchmark Cloud Server)

# Ubuntu / Debian
sudo apt update && sudo apt install -y sysbench fio iperf3

# AlmaLinux / Rocky Linux 9 (sysbench อยู่ใน EPEL)
sudo dnf install -y epel-release
sudo dnf install -y sysbench fio iperf3

บน Ubuntu และ Debian ตัวติดตั้ง iperf3 จะถามว่าจะให้รันเป็น Daemon ตลอดเวลาหรือไม่ ให้ตอบ No เพราะเราจะเปิดเฉพาะตอนทดสอบ

ขั้นตอนที่ 3: วัด CPU และหน่วยความจำด้วย sysbench (Benchmark Cloud Server)

Benchmark ส่วนแรกคือ CPU รันแบบเธรดเดียวเพื่อดูความเร็วต่อคอร์ แล้วรันเท่าจำนวน vCPU เพื่อดูกำลังรวม ตัวเลขที่ใช้เทียบคือ events per second ยิ่งมากยิ่งดี

sysbench cpu --threads=1 --time=30 run
sysbench cpu --threads=$(nproc) --time=30 run
sysbench memory --memory-block-size=1M --memory-total-size=20G run

ค่าแบบหลายเธรดควรใกล้เคียงค่าเธรดเดียวคูณจำนวน vCPU ถ้าต่ำกว่ามาก ให้เปิด top ระหว่างวัดแล้วดูค่า st (Steal Time) ตาม คู่มือตรวจ CPU และ Load Average งานอย่าง PHP และ Node.js ที่ประมวลผลทีละคำขอได้ประโยชน์จากความเร็วต่อคอร์มากกว่าจำนวนคอร์

ผลการ Benchmark CPU ด้วย sysbench แสดงค่า events per second และ Latency ของเครื่อง 4 vCPU
ใช้ events per second เทียบกันเท่านั้น ตัวเลขในภาพเป็นตัวอย่าง ไม่ใช่สเปกของบริการใด

ขั้นตอนที่ 4: วัดดิสก์แบบสุ่ม (IOPS) ด้วย fio

คำเตือน: ให้ fio เขียนลงไฟล์ทดสอบเท่านั้น ห้ามใส่ชื่ออุปกรณ์อย่าง /dev/vda หรือ /dev/sdb ใน --filename เพราะการทดสอบแบบเขียนจะทับข้อมูลทั้งดิสก์ทันที ถ้าจะวัด Data Disk ให้วางไฟล์ไว้ใต้จุด Mount ของดิสก์นั้น เช่น /data/fio-test

fio --name=randrw --filename=/var/tmp/fio-test --size=4G --direct=1 \
    --ioengine=libaio --rw=randrw --rwmixread=70 --bs=4k --iodepth=32 \
    --numjobs=1 --runtime=60 --time_based --group_reporting

รูปแบบนี้จำลองงานฐานข้อมูลที่อ่าน 70% เขียน 30% ทีละ 4 KB จึงเป็น Benchmark ที่สำคัญที่สุดสำหรับเว็บที่มีฐานข้อมูล ค่า --direct=1 ข้าม Cache ของระบบ เพื่อให้วัดดิสก์จริงไม่ใช่ RAM ดูค่า IOPS ของ read และ write และค่า 99.00th ใน clat percentiles ซึ่งบอกว่า 99% ของคำขอเสร็จภายในกี่ไมโครวินาที ค่านี้สำคัญกว่าค่าเฉลี่ย เพราะคำขอที่ช้าที่สุดคือสิ่งที่ผู้ใช้รู้สึก

ผล fio แบบ randrw 4K แสดง IOPS ของการอ่านและเขียน Bandwidth และ Latency ที่เปอร์เซ็นไทล์ 99
ดู IOPS คู่กับ 99.00th ถ้า IOPS สูงแต่ 99th สูงมาก ผู้ใช้จะเจออาการกระตุก (ค่าตัวอย่าง)

ขั้นตอนที่ 5: วัดดิสก์แบบต่อเนื่อง (Throughput) แล้วลบไฟล์ทดสอบ

งานสำรองข้อมูล คัดลอกไฟล์ใหญ่ หรือ Import ฐานข้อมูล ขึ้นกับความเร็วอ่านเขียนต่อเนื่อง วัดด้วยบล็อก 1 MB แล้วดูค่า BW= หน่วย MiB/s

fio --name=seqwrite --filename=/var/tmp/fio-test --size=4G --direct=1 \
    --ioengine=libaio --rw=write --bs=1M --iodepth=8 --runtime=60 --time_based
fio --name=seqread --filename=/var/tmp/fio-test --size=4G --direct=1 \
    --ioengine=libaio --rw=read --bs=1M --iodepth=8 --runtime=60 --time_based
rm -f /var/tmp/fio-test

ขั้นตอนที่ 6: วัดเครือข่ายระหว่างเครื่องด้วย iperf3

บนเครื่องปลายทาง (10.10.0.12) เปิดพอร์ต 5201 ให้เฉพาะเครื่องต้นทาง แล้วรัน iperf3 แบบรับครั้งเดียว (-1) จะได้ไม่มีพอร์ตเปิดค้าง

# Ubuntu / Debian
sudo ufw allow from 10.10.0.11 to any port 5201 proto tcp
# AlmaLinux / Rocky (กฎชั่วคราว หายเมื่อ reload)
sudo firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.10.0.11" port port="5201" protocol="tcp" accept'

iperf3 -s -1

บนเครื่องต้นทาง วัดขาส่ง 30 วินาทีด้วย 4 สตรีมขนาน แล้ววัดขากลับด้วย -R ดูบรรทัด [SUM] ฝั่ง receiver ค่า Retr ที่สูงแปลว่ามีแพ็กเก็ตต้องส่งซ้ำ ถ้าความเร็วต่ำผิดปกติให้ตรวจเส้นทางด้วย mtr

iperf3 -c 10.10.0.12 -t 30 -P 4
iperf3 -c 10.10.0.12 -t 30 -P 4 -R

วัดเสร็จให้ลบกฎด้วย sudo ufw delete allow from 10.10.0.11 to any port 5201 proto tcp ถ้าจะวัดจากสำนักงานมาที่คลาวด์ ให้รัน iperf3 แบบ Client ที่เครื่องในออฟฟิศ ซึ่งสะท้อนประสบการณ์ผู้ใช้จริงมากกว่า Public iperf Server ที่หลายคนใช้ร่วมกัน

ขั้นตอนที่ 7: บันทึกผลให้เทียบได้ในอนาคต

เก็บผลเป็นตารางเดียวกันทุกครั้ง: วันเวลา สเปก เวอร์ชันเคอร์เนล คำสั่งที่ใช้ และค่ากลางของ 3 รอบ เทียบเฉพาะผลที่ใช้คำสั่งและขนาดไฟล์เดียวกัน ผล Benchmark ที่ดีที่สุดคือผลที่สัมพันธ์กับงานจริง ถ้าระบบของคุณคือฐานข้อมูล ให้ให้น้ำหนักกับ IOPS และ Latency ของดิสก์มากกว่าคะแนน CPU

ตารางสรุปเครื่องมือ Benchmark ตัวเลขที่ต้องอ่าน และงานที่ตัวเลขนั้นมีผลมากที่สุด
เลือกให้น้ำหนักกับตัวเลขที่ตรงกับงานของระบบคุณ

ปัญหาที่พบบ่อยเกี่ยวกับ Benchmarkเกี่ยวกับ Benchmark Cloud Server

ทำไม Benchmark แต่ละรอบได้ผลไม่เท่ากัน?

เซิร์ฟเวอร์เสมือนใช้ฮาร์ดแวร์ร่วมกับเครื่องอื่น และระบบภายในเครื่องเองก็มีงานเบื้องหลัง เช่น Cron หรือการอัปเดต ผลต่างกันราว 5-10% ถือเป็นเรื่องปกติ ให้วัดหลายรอบ หลายช่วงเวลา แล้วใช้ค่ากลาง ถ้าต่างกันมากและเห็นค่า Steal Time สูง ให้เก็บผลพร้อมเวลาแจ้งทีมซัพพอร์ต

fio ได้ IOPS สูงเกินจริงมาก เกิดจากอะไร?

มักลืมใส่ --direct=1 ทำให้วัดความเร็ว Page Cache ใน RAM แทนดิสก์ หรือใช้ไฟล์ทดสอบเล็กเกินไป ให้ใช้ --direct=1 และขนาดไฟล์อย่างน้อย 4 GB เสมอ

iperf3 ขึ้น unable to connect to server ต้องแก้อย่างไร?

ตรวจว่าฝั่งปลายทางรัน iperf3 -s อยู่ และเปิดพอร์ต TCP 5201 ทั้ง Firewall ในเครื่องและ Security Group ของแพลตฟอร์ม ถ้าใช้ -1 ไว้ เซิร์ฟเวอร์จะปิดตัวหลังทดสอบครบหนึ่งครั้ง ต้องรันใหม่ทุกรอบ

ใช้ Benchmark ตัดสินใจเลือกสเปกได้หรือไม่?

ได้ แต่ควรประกอบกับการดูโหลดจริงของระบบ เช่น จาก Prometheus และ Node Exporter ตัวเลข Benchmark บอกเพดานของเครื่อง ส่วนกราฟการใช้งานจริงบอกว่าระบบของคุณเข้าใกล้เพดานนั้นแค่ไหน

ถ้าต้องการคำแนะนำเลือกสเปก Cloud Server ให้ตรงกับผลวัดและลักษณะงาน ติดต่อทีมงาน THAI DATA CLOUD ตัวเลือกทั้งหมดของ fio ดูได้ที่ เอกสาร fio และของ iperf3 ที่ iperf.fr

สรุปขั้นตอน Benchmark Cloud Server

ทบทวน Benchmark Cloud Server ทั้งหมดตามลำดับ ก่อนนำไปใช้กับระบบจริง

  1. ตั้งกติกาและบันทึกสเปกก่อนวัด (Benchmark Cloud Server)
  2. ติดตั้ง sysbench, fio และ iperf3 (Benchmark Cloud Server)
  3. วัด CPU และหน่วยความจำด้วย sysbench (Benchmark Cloud Server)
  4. วัดดิสก์แบบสุ่ม (IOPS) ด้วย fio
  5. วัดดิสก์แบบต่อเนื่อง (Throughput) แล้วลบไฟล์ทดสอบ
  6. วัดเครือข่ายระหว่างเครื่องด้วย iperf3
  7. บันทึกผลให้เทียบได้ในอนาคต

เมื่อทำครบทุกข้อแล้ว Benchmark Cloud Server จะพร้อมใช้งาน หากผลลัพธ์ไม่เป็นไปตามที่คาด ให้ย้อนกลับไปดูหัวข้อปัญหาที่พบบ่อยด้านบน ซึ่งรวบรวมกรณีที่พบจริงจากการใช้งาน Benchmark Cloud Server ไว้แล้ว

อ่านเพิ่มเติมเกี่ยวกับ Benchmark Cloud Server

แชร์FacebookXLINELinkedIn

มีคำถามเรื่องบริการ? ติดต่อทีมงาน