
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ó.
- 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 $FHai 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 sai | Vì 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ụt | Chạ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áy | Toàn bộ nằm trong bộ nhớ đệm | Tệ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ảnh | Giờ 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 doHồ 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.
Bài viết liên quan
- Latency ổ cứng: micro-giây đổi ra mili-giây web
- Thuê VPS NVMe: đọc bảng giá và 5 bẫy cấu hình
- VPS ổ Enterprise U.2 NVMe RAID 10 tại TND
- Truy cập NAS, Jellyfin, Home Assistant từ xa không mở port
- GitHub Copilot vs Claude Code: trợ lý gõ phím vs agent
- tmux là gì? Để Claude Code chạy tiếp khi bạn tắt laptop
- Claude Code chạy nhiều session bị chậm: giới hạn thật nằm ở đâu
- Backup và update Supabase self-host an toàn
- Tailscale trên router OpenWrt: cả nhà vào tailnet



