fio: đo IOPS và latency VPS đúng cách, lệnh copy-paste

Chia sẻ bài viết

Mục lục
fio: đo IOPS và latency VPS đúng cách, lệnh copy-paste

Trả lời nhanh: fio là công cụ chuẩn ngành để đo ổ đĩa. Bộ 4 bài đủ 'khám tổng quát' một VPS: (1) random read 4K QD32, sức phục vụ web/database; (2) random write 4K, sức chịu ghi log/deploy; (3) latency thuần iodepth=1 kèm percentile, độ nhạy từng lệnh; (4) fsync, tốc độ commit database. Mỗi bài 30-60 giây, tổng 5 phút. Ngưỡng nhanh cho hạng NVMe thật: bài 1 từ hàng chục nghìn IOPS trở lên (tùy giới hạn gói), bài 3 p99 dưới 1ms, bài 4 latency fsync dưới 1ms, lệch xa là có chuyện để hỏi nhà cung cấp.

Cả cụm bài này liên tục nói 'đo bằng fio', bài này là sổ tay tổng của phép đo đó: bốn bài chuẩn, cách đọc từng dòng kết quả, các cách đo sai phổ biến làm số đẹp ảo, và mẫu ghi hồ sơ để mỗi máy bạn thuê đều có 'phiếu khám sức khỏe' ngày nhận. Copy-paste được toàn bộ, và nên chạy trên mọi VPS trước khi tin nó.

Tóm tắt nhanh
  • 4 bài × ~45s: random read QD32 · random write · latency p99 · fsync, phủ 4 phẩm chất ổ
  • Đọc kết quả: IOPS là sức, clat percentiles là độ nhạy, fsync lat là tốc độ commit
  • Đo sai phổ biến: file test quá nhỏ (đo RAM), chạy quá ngắn (đo cache SLC), đo một lần lúc vắng
  • Lưu kết quả ngày nhận máy, mốc so sánh khi 'hình như chậm đi' và bằng chứng khi khiếu nại

Bộ 4 bài chuẩn - dán cả khối

sudo apt install -y fio
F=/tmp/fio.bin
# 1) Random READ 4K, QD32x4, suc phuc vu
fio --name=read --filename=$F --size=2G --rw=randread --bs=4k --iodepth=32 
    --numjobs=4 --runtime=45 --time_based --group_reporting --direct=1
# 2) Random WRITE 4K, suc chiu ghi
fio --name=write --filename=$F --size=2G --rw=randwrite --bs=4k --iodepth=32 
    --numjobs=4 --runtime=45 --time_based --group_reporting --direct=1
# 3) Latency thuan + percentiles
fio --name=lat --filename=$F --size=2G --rw=randread --bs=4k --iodepth=1 
    --runtime=45 --time_based --direct=1 --percentile_list=50:95:99:99.9
# 4) fsync, toc do commit database
fio --name=sync --filename=$F --size=1G --rw=write --bs=4k --fsync=1 
    --runtime=45 --time_based --direct=0
rm $F

Hai flag đáng chú ý: --direct=1 bỏ qua cache RAM của hệ điều hành, đo ổ thật thay vì đo RAM; --fsync=1 ở bài 4 ép mỗi khối ghi phải xuống ổ xong mới tính, mô phỏng đúng một commit database.

Đọc kết quả: bốn dòng cần tìm

  • Bài 1-2, dòng IOPS: read: IOPS=85.3k... Hạng tham chiếu: HDD trăm; SATA chục nghìn; NVMe từ nhiều chục nghìn đến trăm nghìn+ (VPS thường có trần theo gói, trần ổn định vẫn là dấu hiệu tốt, số nhảy loạn mới đáng ngờ).
  • Bài 3, clat percentiles: nhìn 50th (điển hình), 99th (điều khách gặp lúc đông). NVMe thật: 99th vẫn µs ba chữ số; thấy 99th sang hàng chục ms là ổ mạng/oversell lộ mặt.
  • Bài 4, fsync lat + IOPS: hạng có PLP: latency fsync dưới 1ms, IOPS sync hàng nghìn+; hạng thiếu: chục ms mỗi fsync, database sẽ 'cảm nhận' đúng con số này ở mỗi đơn hàng ghi vào.
  • Mọi bài, dòng cpu: usr/sys quá cao lúc đo có thể là CPU nghẽn trước ổ, phối hợp đọc với sysbench của bài benchmark tổng.

Các kiểu đo sai làm số đẹp ảo

  • File test nhỏ + thiếu direct: --size=100M không direct → toàn bộ nằm RAM, ra số triệu IOPS ảo diệu. Tối thiểu 1-2G + direct=1.
  • Chạy 10 giây: vừa đủ khoe cache SLC của ổ gia dụng, bài enterprise đã tả. 45-60s mỗi bài; nghi ngờ thì 120s.
  • Đo một lần lúc 3h chiều vắng: steal/nghẽn hàng xóm hiện về đêm, chạy lại đúng bộ này lúc 21h trước khi kết luận.
  • Đo trên mount lạ: /tmp có nơi là tmpfs (RAM)! Kiểm bằng df -T /tmp, là tmpfs thì đổi F sang thư mục ổ thật (~/fio.bin).

Mẫu hồ sơ máy - 2 phút ngày nhận, đáng giá về sau

# luu vao ghi chu (hoac cho agent tu ghi):
May: TND NVMe 80 · Ngay do: 2026-10-06 · Gio: 21:15
Bai 1 read : 92.4k IOPS | Bai 2 write: 78.1k IOPS
Bai 3 lat  : p50=86µs  p99=412µs
Bai 4 fsync: avg=0.4ms | sysbench 1-thread: 1187 eps | steal 21h: 0.0%

Ba lần hồ sơ này trả công: khi 'máy hình như ì đi', so là biết thật hay cảm giác; khi khiếu nại nhà cung cấp, số hai thời điểm là bằng chứng; khi đổi nhà, có chuẩn để nghiệm thu nhà mới. Vận hành bằng số thay vì bằng trí nhớ, tinh thần của cả cụm bài, gói trong một phiếu.

Bốn kiểu đo sai làm số đẹp ảo

Cách đo saiVì sao số đẹp giảCách đúng
Chạy 30 giâyỔ chạy nhanh lúc bộ đệm còn trống rồi tụtChạy ít nhất 300 giây
Không dùng chế độ bỏ qua bộ nhớ đệm hệ thốngĐang đo bộ nhớ chứ không đo ổThêm tham số ghi thẳng xuống ổ
Kích thước tệp thử nhỏ hơn bộ nhớ máyToàn bộ nằm trong bộ nhớ đệmTệp thử lớn hơn bộ nhớ ít nhất 2 lần
Chỉ đo khối lớn tuần tựKhông phản ánh tải web và cơ sở dữ liệuĐo cả khối 4K ngẫu nhiên
Đo lúc máy rảnhGiờ cao điểm mới lộ vấn đề hàng xómĐo thêm một lần vào 20 tới 22 giờ

Bốn dòng cần tìm trong kết quả

  • IOPS: số thao tác mỗi giây. Đây là con số quan trọng nhất với web và cơ sở dữ liệu.
  • clat percentile 99: độ trễ ở trường hợp tệ. Quan trọng hơn trung bình, vì đây là thứ người dùng nhớ.
  • BW: băng thông. Chỉ quan trọng với sao lưu và truyền tệp lớn.
  • Biến động giữa các phút: thêm tham số in kết quả mỗi 60 giây. Nếu phút đầu cao gấp nhiều lần phút cuối, đó là ổ chia sẻ nặng hoặc bị giới hạn tốc độ.

Mẫu hồ sơ máy: hai phút ngày nhận máy

# Chay mot lan ngay khi nhan may, luu ket qua lai
{
  echo "=== ngay nhan: $(date)"
  echo "--- CPU"; lscpu | grep -E "Model name|Socket|Core|Thread|MHz"
  echo "--- RAM"; free -h
  echo "--- O dia"; lsblk -d -o NAME,SIZE,ROTA,MODEL; df -h /
  echo "--- Steal time"; top -bn1 | head -3
  echo "--- Mang trong nuoc"; ping -c 20 vnexpress.net | tail -2
  echo "--- Do o dia 5 phut"
  fio --name=t --ioengine=libaio --direct=1 --bs=4k --rw=randrw --rwmixread=70 \
      --iodepth=32 --numjobs=4 --size=4G --runtime=300 --time_based \
      --group_reporting --percentile_list=50:95:99
} > /root/ho-so-may-$(date +%F).txt

# Chay lai sau 3 thang, so hai file
# Neu hieu nang tut ro: nha cung cap da them khach vao may chu vat ly do

Hồ sơ này đáng giá nhất khi bạn cần khiếu nại: có số liệu ngày nhận máy và số liệu hiện tại là bằng chứng, còn nói máy chậm đi thì không ai xử lý.

Đo cả steal time cùng lúc

Ổ nhanh mà máy chủ vật lý quá tải thì trải nghiệm vẫn tệ. Chạy song song một cửa sổ theo dõi steal time trong lúc đo ổ: trên 5% kéo dài nghĩa là nhà cung cấp đang bán quá số chỗ, và con số ổ đĩa đo được không phản ánh những gì bạn nhận được vào giờ cao điểm.

Câu hỏi thường gặp

Chạy fio có hại ổ hay ảnh hưởng dịch vụ đang chạy không?

Lượng ghi vài GB của bộ đo là muỗi với định mức ổ. Ảnh hưởng dịch vụ: bài đo chiếm I/O thật trong 45s mỗi bài, máy production đông khách nên đo giờ thấp điểm, hoặc chấp nhận vài phút ì nhẹ.

Kết quả mỗi lần chạy lệch nhau 10-20% có bình thường không?

Bình thường, ổ chia sẻ và cache các tầng dao động. Đáng ngờ là lệch lần 2-5 lần giữa các khung giờ, hoặc p99 thất thường, đó là chuyện hàng xóm, không phải nhiễu đo.

yabs.sh so với bộ fio này thế nào?

yabs là 'khám nhanh' tiện (gồm cả CPU + mạng + fio rút gọn), tốt cho cái nhìn đầu. Bộ 4 bài này sâu hơn về ổ (percentile, fsync), dùng khi cần kết luận nghiêm túc. Chạy cả hai càng tốt.

VPS của tôi bị giới hạn IOPS theo gói thì đo có ý nghĩa gì?

Càng có: bạn kiểm được giới hạn ấy có ổn định và đúng cam kết không (trần phẳng = tốt; trần nhảy loạn = oversell), và latency/fsync, hai thứ thường không bị giới hạn, vẫn lộ phẩm chất ổ thật.

Hạ tầng NVMe Enterprise của TND
VPS ổ Enterprise U.2 NVMe, CPU xung cao, đặt tại Việt Nam
TND mời khách đo thay vì xin khách tin: nhận VPS NVMe, dán bộ 4 bài, Enterprise U.2 NVMe RAID 10 có PLP tự chứng minh bằng IOPS ổn định, p99 micro-giây và fsync dưới mili-giây, lúc 10h sáng lẫn 21h tối. Lưu phiếu hồ sơ ngày nhận, đó là cam kết bằng số, thứ quảng cáo không thay được. Bàn giao 5 phút.
Dùng thử VPS NVMe, bàn giao trong 5 phút

Bài viết liên quan