Chuyển tới nội dung chính

Speedtest Script - Hướng dẫn chi tiết

Speedtest Script là công cụ kiểm tra hiệu năng server toàn diện, tự động cài dependencies và chạy được trên Linux/macOS lẫn Windows.

Script giúp bạn:

  • Đánh giá nhanh hiệu năng CPU/RAM/Disk/Network
  • So sánh VPS providers
  • Phát hiện bottleneck I/O và routing mạng
  • Lưu kết quả làm baseline để monitoring định kỳ

Tính năng

1) System Information

  • CPU: Model, số cores/threads, tốc độ xung nhịp
  • RAM: Tổng dung lượng và đã sử dụng
  • Disk: Dung lượng ổ đĩa và % sử dụng
  • OS: Phiên bản hệ điều hành, kernel, architecture
  • Network: IP public, uptime, load average

2) Disk Speed Test

  • Sequential Write (dd): Tốc độ ghi tuần tự (3 lần chạy)
  • Random I/O (fio/diskspd): IOPS và throughput cho random read/write
  • Tự động cài đặt fio (Linux) hoặc DiskSpd (Windows) nếu chưa có

3) Network Speed Test

  • International Servers: CloudFlare CDN, Linode US/Tokyo, Vultr Singapore
  • Vietnam ISPs: VNPT, Viettel, FPT, CMC Telecom
  • Latency Test: Ping đến các servers quốc tế và nội địa

Cách sử dụng

Linux / macOS

Chạy trực tiếp (khuyến nghị):

curl -Lso- bacpv.com/speedtest.sh | bash

Tải về và chạy:

curl -O https://bacpv.com/speedtest.sh
chmod +x speedtest.sh
./speedtest.sh

Yêu cầu:

  • Script tự động cài đặt: curl, dig (dnsutils), fio
  • Cần quyền sudo để cài đặt dependencies
  • Hỗ trợ: Ubuntu, Debian, CentOS, RHEL, AlmaLinux, Rocky Linux, Fedora, Arch, macOS

Windows PowerShell

1) Windows Server 2012 R2 (khuyến nghị)

Windows Server 2012 R2 thường gặp 2 vấn đề phổ biến:

  1. TLS mặc định không phải TLS 1.2 → lỗi khi download script
  2. Encoding → một số script có thể bị lỗi ký tự

✅ Dùng lệnh chạy chuẩn UTF-8 (khuyến nghị cho 2012 R2):

Invoke-Expression ([System.Text.Encoding]::UTF8.GetString((Invoke-WebRequest -Uri "https://bacpv.com/speedtest.ps1" -UseBasicParsing).Content))

Nếu gặp lỗi TLS/SSL, chạy lệnh này trước rồi chạy lại lệnh ở trên:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

2) Cách khác (PowerShell 5+)

iwr https://bacpv.com/speedtest.ps1 | iex

Tải về và chạy:

Invoke-WebRequest -Uri "https://bacpv.com/speedtest.ps1" -OutFile speedtest.ps1
.\speedtest.ps1

Yêu cầu:

  • PowerShell 5.0+
  • Nên chạy Administrator để cài DiskSpd (khuyến nghị)
  • Kết nối internet

Phân tích kết quả test

Chú thích quan trọng: MB/s và Mbps (tránh nhầm lẫn)

Nhiều người hay nhầm giữa tốc độ Disk và Network vì dùng đơn vị khác nhau:

  • MB/s = Megabyte/giây (Byte) → thường dùng cho Disk (I/O)
  • Mbps = Megabit/giây (bit) → thường dùng cho Network (ISP)

Quy đổi nhanh:

  • 1 Byte = 8 bit
  • 1 MB/s ≈ 8 Mbps
  • 100 Mbps ≈ 12.5 MB/s
  • 1 Gbps (1000 Mbps) ≈ 125 MB/s

Ví dụ:

  • 121.76 Mbps ≈ 15.22 MB/s
  • 1612 Mbps ≈ 201.50 MB/s

1) System Information (Kết quả mẫu)

CPU Model       : Intel(R) Xeon(R) Platinum 8180 CPU @ 2.50GHz
CPU Cores : 4 cores, 4 threads
CPU Speed : 2494 MHz
Total RAM : 4.00 GB
Used RAM : 1.95 GB
Total Disk (C:) : 39.66 GB
Used Disk (C:) : 16.54 GB (41.71%)
OS : Microsoft Windows Server 2012 R2 Standard (6.3.9600)
Architecture : 64-bit
Uptime : 0d 3h 54m

Đánh giá:

  • CPU 4 cores/4 threads: phù hợp web/app nhỏ, proxy, các service nhẹ.
  • RAM 4GB, dùng ~49%: còn dư ổn, nhưng nếu chạy DB/cache lớn nên cân nhắc 8GB+.
  • Disk dùng 41.71%: an toàn, còn dư nhiều.
  • Windows Server 2012 R2: hệ điều hành cũ → chú ý TLS 1.2, update root certs khi cần.

2) Disk Speed Test (Kết quả mẫu)

2.1 Sequential Write

Run 1: 104.91 MB/s
Run 2: 105.28 MB/s
Run 3: 107.17 MB/s

📌 Trung bình: ~105.8 MB/s

2.2 Random I/O (DiskSpd)

Random Read  (4K): 486.75 MB/s | 124608.76 IOPS
Random Write (4K): 19.48 MB/s | 4986.47 IOPS

Benchmark Disk (chuẩn hoá bảng)

Sequential Write Benchmark (MB/s)

Loại ổ đĩa / StorageTốc độ ghi tuần tự thường gặp
HDD 7200rpm80 – 160 MB/s
SATA SSD400 – 550 MB/s
NVMe SSD1000 – 3500 MB/s
Cloud VPS (shared storage)100 – 500 MB/s
Cloud VPS (dedicated/local NVMe)500 – 2000+ MB/s

Đánh giá kết quả mẫu (~105 MB/s):

  • Mức này giống HDD hoặc VPS shared storage bị giới hạn throughput.
  • Không giống SATA SSD/NVMe (SSD thường > 400 MB/s).

Random IOPS Benchmark (4K)

Loại ổ đĩa / StorageRandom Read IOPSRandom Write IOPS
HDD 7200rpm80 – 12060 – 100
SATA SSD30,000 – 90,00020,000 – 80,000
NVMe SSD100,000 – 500,000+80,000 – 400,000+
Cloud VPS5,000 – 50,0003,000 – 40,000

Đánh giá kết quả mẫu:

  • Random Read ~124,608 IOPS: rất cao, gần mức NVMe entry/mid (hoặc backend có cache/read optimization).
  • Random Write ~4,986 IOPS: thấp → dấu hiệu bị giới hạn write IOPS, hoặc shared storage quá tải.

Kết luận về Disk

Kết quả mẫu cho thấy Disk không cân bằng:

  • Read rất mạnh
  • Write yếu

Tác động thực tế:

  • Web server/cache/proxy (đọc nhiều, ghi ít): vẫn ổn
  • Database/logging/queue (ghi nhiều): dễ nghẽn I/O, tăng latency

Khuyến nghị:

  • Nếu chạy DB → chọn VPS có local NVMe hoặc plan có cam kết IOPS write
  • Nếu cần ổn định → hạn chế dùng shared storage dễ throttle

3) Network Speed Test (Kết quả mẫu)

3.1 International

Cloudflare         : 121.76 Mbps
Linode US (Newark) : 18.56 Mbps
Vultr Singapore : 6.48 Mbps
Linode Tokyo : 46.4 Mbps

Đánh giá:

  • Cloudflare khá tốt → phù hợp dùng CDN.
  • US thấp → không phù hợp phục vụ traffic US/EU.
  • Singapore rất thấp → routing/cap quốc tế không tốt (bất thường nếu bạn cần phục vụ khu vực SG).
  • Tokyo ổn.

3.2 Domestic (Vietnam)

VNPT Ha Noi  : 354 Mbps
Viettel : 1612.08 Mbps
FPT Ha Noi : 1527.04 Mbps
CMC Telecom : 644.4 Mbps

Đánh giá:

  • Viettel/FPT > 1.5Gbps: xuất sắc.
  • VNPT 354Mbps: tốt.
  • CMC 644Mbps: tốt/khá.

➡️ Phù hợp triển khai website/app phục vụ người dùng Việt Nam.


Benchmark Network (chuẩn hoá bảng)

Benchmark tốc độ nội địa VN (Mbps)

ISP / TuyếnMức tốtMức rất tốtMức xuất sắc
VNPT / Viettel / FPT / CMC50 – 200 Mbps200 – 800 Mbps800 Mbps – 2 Gbps+

4) Latency Test (Kết quả mẫu)

International:
Google DNS : 28 ms
Cloudflare DNS : 33 ms
US East : 250 ms
Singapore : 47.67 ms
Tokyo : 102 ms

Vietnam Domestic:
VNPT : 10 ms
Viettel : 1 ms
FPT : 1 ms
CMC : 1 ms

Đánh giá:

  • Nội địa rất thấp (1–10ms) → cực tốt cho user VN.
  • Singapore ~48ms → ổn.
  • Tokyo ~102ms → trung bình.
  • US East ~250ms → cao (không phù hợp realtime).

Benchmark Latency (chuẩn hoá bảng)

Khoảng cáchLatency tốtLatency chấp nhậnLatency cao
Local / Same DC< 1 ms1 – 5 ms> 5 ms
Same country< 10 ms10 – 30 ms> 30 ms
Same region (VN–SG)< 40 ms40 – 80 ms> 80 ms
Cross-continent (VN–US/EU)< 150 ms150 – 250 ms> 250 ms

Kết luận tổng thể (dựa theo kết quả mẫu)

Điểm mạnh:

  • Network nội địa cực tốt (354Mbps – 1.6Gbps), latency thấp → rất phù hợp phục vụ user Việt Nam.
  • Random Read IOPS cao → tốt cho workload đọc nhiều.

⚠️ Điểm yếu:

  • Sequential write thấp (~105 MB/s) → giống HDD/shared storage.
  • Random Write rất thấp (~5k IOPS) → không phù hợp workload ghi nhiều.

🎯 Phù hợp cho:

  • Reverse proxy, CDN edge, cache server
  • Web server phục vụ user Việt Nam
  • Workload đọc nhiều, ghi ít

🚫 Không lý tưởng cho:

  • Database ghi nhiều (MySQL/Postgres), analytics, ELK/logging-heavy
  • Storage workload cần write throughput cao

Khuyến nghị:

  • Nếu chạy DB → chọn VPS có local NVMe hoặc plan có cam kết IOPS write
  • Nếu cần ổn định → tránh shared storage dễ throttle

Use Cases thực tế

1) So sánh VPS providers

# VPS A
curl -Lso- bacpv.com/speedtest.sh | bash > vps-a-result.txt

# VPS B
curl -Lso- bacpv.com/speedtest.sh | bash > vps-b-result.txt

# Compare
diff vps-a-result.txt vps-b-result.txt

Chỉ số nên so sánh:

  • Disk IOPS (đặc biệt write IOPS nếu chạy DB)
  • Network speed đến tập người dùng mục tiêu
  • Latency đến region cần phục vụ

2) Troubleshooting hiệu năng

Disk chậm:

Sequential Write: 45 MB/s
Random IOPS: 800

→ Có thể do disk full, I/O wait cao, hoặc shared storage quá tải.
→ Kiểm tra df -h, iostat, xem process ghi nhiều.

Network chậm đến Vietnam:

Viettel: 5 Mbps
FPT: 8 Mbps

→ Server ở nước ngoài, routing không tối ưu hoặc bị throttle.
→ Dùng CDN có edge VN hoặc chuyển server về VN.

Latency cao bất thường:

Gateway: 15 ms

→ Provider network có vấn đề hoặc congestion.
→ Kiểm tra mtr/traceroute, liên hệ support.


3) Kiểm tra sau upgrade

# Trước upgrade
curl -Lso- bacpv.com/speedtest.sh | bash > before-upgrade.txt

# Sau upgrade
curl -Lso- bacpv.com/speedtest.sh | bash > after-upgrade.txt

4) Monitoring định kỳ (cron)

# Chạy lúc 3:00 sáng hàng ngày
0 3 * * * curl -Lso- bacpv.com/speedtest.sh | bash >> /var/log/speedtest-daily.log 2>&1

Tips và Best Practices

1) Chạy test nhiều lần

  • Chạy ít nhất 3 lần vào các thời điểm khác nhau
  • Loại bỏ outliers (kết quả bất thường)
  • Lấy trung bình để có kết quả chính xác

2) Chạy vào giờ thấp điểm

  • Network test nên chạy khi traffic thấp (2–5 giờ sáng)
  • Tránh chạy khi server đang load cao

3) So sánh với baseline

  • Lưu kết quả lần đầu làm baseline
  • Alert khi hiệu năng giảm > 30% so với baseline

4) Hiểu giới hạn của provider

  • Mỗi plan có bandwidth limit
  • Shared storage có thể bị giới hạn IOPS/throughput
  • Không kỳ vọng vượt spec của plan

Troubleshooting

Script không chạy được (Linux)

which curl

Nếu không có curl, cài thủ công:

sudo apt install curl -y   # Ubuntu/Debian
sudo yum install curl -y # CentOS/RHEL

Dependencies không tự động cài (Linux)

Ubuntu/Debian:

sudo apt update
sudo apt install curl dnsutils fio -y

CentOS/RHEL:

sudo yum install curl bind-utils fio -y

Cài DiskSpd thủ công (Windows)

Qua winget (khuyến nghị):

winget install Microsoft.DiskSpd

Tổng kết

Speedtest Script là một công cụ “snapshot” nhanh để đánh giá hiệu năng VPS/Server theo 3 nhóm chính: System (CPU/RAM/Disk), Disk (Sequential + Random IOPS)Network (Speed + Latency). Khi đọc kết quả, cần đặc biệt chú ý sự khác nhau giữa MB/s (Disk)Mbps (Network) để tránh nhầm lẫn.

Từ kết quả mẫu minh hoạ:

  • Network nội địa Việt Nam rất mạnh và latency thấp → phù hợp triển khai website/app phục vụ người dùng trong nước.
  • Random Read IOPS cao nhưng Random Write IOPS thấp → phù hợp workload đọc nhiều/ghi ít (proxy/cache/web), nhưng không lý tưởng cho database hoặc hệ thống ghi log nhiều nếu cần độ ổn định I/O.

Để đánh giá chính xác, nên:

  • Chạy test nhiều lần ở các thời điểm khác nhau,
  • Lưu kết quả làm baseline,
  • So sánh theo đúng loại storage và nhu cầu workload thực tế (web/cache vs database/logging),
  • Kết hợp thêm monitoring (Netdata/Prometheus) để theo dõi dài hạn.

Tham khảo thêm

  • Script source code
  • Linux system monitoring
  • Network troubleshooting
  • Disk performance tuning

Xem thêm: