SSD Nodes Learn RAM 8GB — $66/tahun
Panduan Matt ConnorOleh Matt Connor · Dikemas kini 2026-08-01

Cara Benchmark VPS dengan Tepat

Jalankan yabs.sh dahulu, kemudian fio, sysbench dan iperf3. Fahami maksud setiap angka, kerana satu ujian sahaja hampir tidak pernah mencukupi.

Verified Every command ran end-to-end on a fresh Ubuntu 24.04 server, July 30, 2026.

Maksud penanda aras VPS

Untuk menjalankan penanda aras VPS, anda mengukur empat perkara: kelajuan satu teras CPU, lebar jalur memori mesin, bilangan operasi cakera rawak kecil yang boleh dilayan oleh storan setiap saat, dan jumlah daya pemprosesan yang disediakan oleh pautan rangkaian. Satu pelaksanaan yabs.sh memberikan keempat-empat ukuran ini dalam kira-kira sepuluh minit. Bahagian yang lebih sukar ialah mentafsir keputusan kerana VPS (pelayan peribadi maya) berkongsi perkakasan fizikal dengan penyewa lain. Oleh itu, mesin yang sama boleh melaporkan satu nilai pada 03:00 dan nilai yang sangat berbeza pada 20:00.

Rancangannya adalah untuk menjalankan yabs.sh bagi mendapatkan gambaran ringkas, kemudian menjalankan sendiri alat yang digunakan di bawahnya. Menjalankannya sendiri membolehkan anda mengubah satu flag, memantau perubahan nilai, dan memahami perkara yang sebenarnya diukur oleh nilai itu. Lakukan ini selepas mesin disediakan, bukan sebelumnya. Langkah dalam sepuluh minit pertama pada VPS baharu perlu dilakukan terlebih dahulu kerana mesin yang masih menggunakan kemas kini pusingan pertama akan menghasilkan penanda aras yang tidak tepat atas sebab yang tiada kaitan dengan perkakasan.

Periksa mesin sebelum mengukurnya

Separuh daripada setiap penanda aras yang buruk berpunca daripada mesin yang tidak difahami oleh penulisnya.

nproc
lscpu | grep -E 'Model name|Hypervisor|Thread'
free -h
df -hT /
uname -r
systemd-detect-virt

Hypervisor vendor: KVM bermaksud virtualisasi penuh, jadi anda menjalankan kernel sendiri. Pencetakan lxc atau openvz oleh systemd-detect-virt sebaliknya bermaksud virtualisasi kontena: anda berkongsi kernel hos, dan had CPU serta memori anda ialah tetapan cgroup (kumpulan kawalan), bukan perkakasan maya. Pada sistem cgroup v2, anda boleh membaca had CPU secara terus.

cat /sys/fs/cgroup/cpu.max

max 100000 bermaksud tiada kuota. 200000 100000 bermaksud anda boleh menggunakan 200000 mikrosaat CPU dalam setiap tempoh 100000 mikrosaat, iaitu kuota bersamaan dua teras. Pelan yang diiklankan sebagai 4 vCPU dengan kuota dua teras tidak akan mendapat skor seperti empat teras, dan tiada alat penanda aras yang mencetak baris untuk menerangkan sebabnya.

df -hT / penting atas sebab yang berbeza: lajur Type. Jika lajur itu membaca overlay, anda berada dalam kontena dan ujian cakera di bawah memerlukan perubahan. Catat maklumat ini sekarang.

Pantau masa curi sepanjang masa

Masa curi ialah bahagian masa CPU maya anda sedia untuk dijalankan tetapi hipervisor menyerahkan teras fizikal kepada pihak lain. Ini ialah isyarat tunggal yang paling berguna untuk menentukan sama ada keputusan itu berpunca daripada jiran anda dan bukannya perkakasan.

vmstat 1 10

Baca lajur st di sebelah kanan. Nilai tetap 0 atau 1 adalah normal. Nilai berterusan melebihi 5 bermakna hos terlebih langgan pada ketika itu. Oleh itu, setiap nombor CPU yang direkodkan dalam tempoh tersebut adalah rendah bukan disebabkan oleh mesin anda. top memaparkan angka yang sama seperti %st pada baris CPU. Jalankan vmstat 1 dalam sesi SSH kedua semasa anda menjalankan penanda aras, dan catat angka masa curi di sebelah setiap hasil.

Mulakan dengan yabs.sh

yabs.sh (Yet Another Bench Script) ialah skrip shell yang memuat turun binari statik fio, iperf3 dan Geekbench, menjalankannya, kemudian mencetak satu ringkasan. Skrip ini ialah bahasa umum dalam perbincangan penanda aras VPS. Oleh itu, output yabs ialah cara terpantas untuk membandingkan keputusan dengan orang lain.

Borang satu baris rasmi projek ini adalah seperti berikut.

curl -sL yabs.sh | bash

Perintah ini menyalurkan apa-apa yang disediakan oleh URL itu pada masa tersebut terus ke shell. Muat turunnya, baca kandungannya, kemudian jalankannya.

curl -sLo yabs.sh https://raw.githubusercontent.com/masonr/yet-another-bench-script/master/yabs.sh
less yabs.sh
bash yabs.sh

Flag diletakkan selepas -s -- apabila anda menggunakan pipe, atau terus selepas nama fail apabila anda menjalankan salinan setempat. Flag yang berguna ialah: -f melangkau ujian cakera, -i melangkau ujian rangkaian, -g melangkau Geekbench, -r mengurangkan lokasi iperf3 kepada dua, -j mencetak keputusan dalam format JSON, dan -w results.json menulis JSON itu ke fail.

bash yabs.sh -r -w yabs-run1.json

Terdapat dua perkara yang perlu diketahui sebelum menjalankan ujian buat kali pertama. Geekbench memuat naik keputusan anda dan mencetak URL awam browser.geekbench.com. Sesiapa yang memiliki pautan itu boleh melihat model CPU dan skor anda. -g melangkau ujian tersebut sepenuhnya. Kedua, peringkat iperf3 menghantar trafik sebenar ke pelayan di beberapa rantau. Trafik itu dikira dalam kuota lebar jalur bulanan anda. Pada pautan 1 Gbit/s, peringkat rangkaian penuh boleh memindahkan puluhan gigabait. Oleh itu, gunakan -r jika kuota anda kecil dan -i pada pautan bermeter.

Maksud setiap bahagian output yabs

Bahagian cakera menjalankan fio dengan campuran bacaan dan penulisan 50/50 pada empat saiz blok: 4k, 64k, 512k dan 1m. Bahagian ini melaporkan IOPS (operasi input/output sesaat) dan lebar jalur bagi setiap saiz. Baris 4k penting untuk pangkalan data, pelayan mel atau apa-apa sistem yang melakukan banyak penulisan kecil, kerana kebanyakan IO pelayan adalah kecil dan berselerak. Baris 1m digunakan untuk sandaran dan video, apabila anda memindahkan rentetan bait yang panjang.

Bahagian rangkaian menjalankan iperf3 terhadap pelayan awam di beberapa rantau, dalam kedua-dua arah, menggunakan strim selari. Anggap nombor yang rendah sebagai persoalan, bukan jawapan, kerana pelayan iperf3 awam dikongsi dan sering terlebih muatan. Oleh itu, keputusan yang lemah mungkin berpunca daripada hujung jauh.

Bahagian Geekbench memberikan skor teras tunggal dan skor berbilang teras. Skor teras tunggal meramalkan kelajuan satu permintaan, satu kompilasi atau satu pertanyaan diselesaikan. Skor berbilang teras terutamanya menunjukkan bilangan teras yang benar-benar anda peroleh.

Cakera: jalankan fio sendiri

fio (penguji IO fleksibel) ialah alat di sebalik bahagian cakera yabs. Menjalankannya secara terus membantu anda memahami maksud setiap flag.

sudo apt update && sudo apt install -y fio sysbench iperf3

Ujian bacaan rawak 4k pada kedalaman baris gilir 32, pada sistem fail yang benar-benar anda gunakan:

fio --name=randread4k --filename=./fio-testfile --size=2G --bs=4k \
  --rw=randread --ioengine=libaio --iodepth=32 --direct=1 \
  --runtime=60 --time_based --group_reporting

Baris ringkasan yang perlu dibaca daripada output kelihatan seperti ini.

read: IOPS=184k, BW=719MiB/s (754MB/s)(42.1GiB/60001msec)

Di bawahnya, fio mencetak blok clat percentiles. Persentil ke-99.00 ialah angka yang wajar dilaporkan kerana angka itu menunjukkan tempoh menunggu permintaan paling lambat daripada setiap 100 permintaan. Purata kependaman menyembunyikan kelewatan yang sebenarnya diperhatikan oleh pengguna.

  • --direct=1 membuka fail dengan O_DIRECT, jadi bacaan memintas cache halaman kernel. Tanpa flag itu, laluan kedua pada fail 2G dalam mesin dengan RAM 8G akan dilayan daripada memori, lalu fio melaporkan IOPS dalam jutaan. Angka itu benar, tetapi ia mengukur prestasi memori.
  • --ioengine=libaio menyerahkan permintaan tak segerak, yang membolehkan --iodepth=32 mengekalkan 32 permintaan dalam penerbangan. Dengan enjin segerak seperti psync, nilai iodepth yang melebihi 1 tidak memberi kesan langsung. Oleh itu, anda mengukur satu permintaan pada satu masa.
  • --time_based --runtime=60 menjalankan ujian selama 60 saat tetap, bukannya berdasarkan jumlah kerja tetap. Dengan cara ini, cakera pantas dan cakera perlahan menggunakan tempoh masa yang sama, lalu perbandingan kekal adil.
  • --size=2G menetapkan saiz fail ujian. Pastikan saiznya lebih besar daripada mana-mana cache dalam laluan tersebut, dan semak ruang kosong terlebih dahulu.

Penulisan rawak menggunakan arahan yang sama dengan --rw=randwrite. Jalankan ujian itu secara berasingan, kemudian padamkan fail tersebut.

fio --name=randwrite4k --filename=./fio-testfile --size=2G --bs=4k \
  --rw=randwrite --ioengine=libaio --iodepth=32 --direct=1 \
  --runtime=60 --time_based --group_reporting
rm -f ./fio-testfile

Untuk campuran yang lebih hampir dengan trafik sebenar, gunakan --rw=randrw --rwmixread=70. Kelas storan yang digunakan memberi kesan yang lebih besar terhadap keputusan ini berbanding mana-mana flag, dan perbezaan itu diterangkan dalam perbezaan antara storan SSD NVMe dan SATA pada VPS.

Apabila fio berhenti dengan Unknown error -1

Direct IO tidak tersedia pada semua sistem fail. overlay, iaitu sistem fail yang Docker berikan kepada container secara lalai, serta beberapa sistem fail rangkaian tidak menyokong O_DIRECT. Oleh itu, libaio menghantar permintaan yang tidak dapat diselesaikan oleh kernel, lalu fio berhenti:

fio: io_u error on file ./fio-testfile: Unknown error -1: read offset=0, buflen=4096
fio: pid=1234, err=-1/file:ioengines.c:321, func=get_events, error=Unknown error -1

Jalankan df -hT . terlebih dahulu. Jika lajur Type menyatakan overlay, arahkan --filename kepada laluan pada storan sebenar, seperti volume yang dipasang melalui bind mount, atau jalankan fio pada host dan bukannya dalam container. Jika storan sebenar tidak dapat dicapai, ujian buffered synchronous sekurang-kurangnya mengesahkan bahawa arahan itu sendiri betul.

fio --name=randread4k-buffered --filename=./fio-testfile --size=256M --bs=4k \
  --rw=randread --ioengine=psync --direct=0 --numjobs=1 \
  --runtime=15 --time_based --group_reporting
rm -f ./fio-testfile

Nyatakan dengan jelas tujuan ujian itu. Selepas laluan pertama, fail 256M berada dalam page cache, jadi angka IOPS menggambarkan RAM anda. Gunakannya untuk mengesahkan bahawa fio dipasang dan flag dapat dihuraikan. Jangan petik angka itu sebagai keputusan cakera.

Mengapa dd bukan penanda aras cakera

dd muncul dalam banyak perbincangan VPS dan menjawab satu soalan khusus.

dd if=/dev/zero of=./ddtest bs=1M count=1024 oflag=direct conv=fdatasync
rm -f ./ddtest

Perintah itu mengukur daya pemprosesan tulis berjujukan dengan satu utas dan satu permintaan yang sedang diproses. Ini ialah pemeriksaan kewajaran yang munasabah. Perintah itu tidak memberikan sebarang maklumat tentang IO rawak atau perkara yang berlaku apabila 32 permintaan tiba serentak. Jika oflag=direct digugurkan, perintah itu kebanyakannya mengukur kelajuan kernel menerima tulis ke dalam memori. Oleh itu, angka dd yang dipetik dalam catatan forum sering kali tidak munasabah.

CPU: sysbench cpu

sysbench cpu --cpu-max-prime=20000 --threads=1 run
sysbench cpu --cpu-max-prime=20000 --threads=$(nproc) run

Nilai yang perlu diperhatikan ialah events per second. Jalankan ujian satu bebenang dahulu. Nilai ini menentukan kelajuan satu permintaan PHP diselesaikan atau satu tugas kompilasi dilengkapkan. Nilai ini juga paling banyak berbeza antara hos dengan harga yang sama. Kemudian jalankan ujian dengan semua bebenang. Ujian ini menunjukkan sama ada vCPU anda ialah teras berasingan atau bahagian daripada satu teras.

Jelaskan perkara yang diukur: sysbench cpu berulang kali mencari nombor perdana menggunakan aritmetik integer 64 bit. Ujian ini tidak membebankan lebar jalur memori, unit vektor atau cache dengan cara yang menyerupai beban kerja sebenar. Oleh itu, ujian ini sesuai untuk membandingkan dua hos tetapi kurang sesuai untuk meramalkan prestasi aplikasi anda.

Ubuntu 24.04 disertakan dengan sysbench 1.0.20, yang memerlukan nama ujian diletakkan dahulu. Jika anda menyalin arahan dengan --test=cpu daripada kiriman lama, anda akan mendapat WARNING: the --test option is deprecated. Skor daripada sysbench 0.4 dan sysbench 1.0 langsung tidak boleh dibandingkan. Oleh itu, jangan sekali-kali membandingkan keputusan anda dengan nombor yang diterbitkan tanpa versi yang dinyatakan.

Memori: sysbench memory

sysbench memory --memory-block-size=1M --memory-total-size=20G --memory-oper=write --threads=1 run
sysbench memory --memory-block-size=1M --memory-total-size=20G --memory-oper=read --threads=1 run

Hasilnya dalam MiB/sec, dan bacaan lebih pantas daripada tulisan pada setiap mesin. Kekalkan --memory-block-size pada 1M, dan pastikan nilainya sama pada setiap hos yang dibandingkan. Pada 1K, nombor tersebut merosot dengan ketara kerana overhed setiap operasi berlaku seribu kali lebih kerap. Akibatnya, anda mengukur kos gelung dan bukannya lebar jalur memori. Ini ialah flag yang paling kerap tidak sepadan dalam skor memori yang diterbitkan.

Rangkaian: iperf3

Cara yang tepat untuk menguji kadar pemindahan ialah dengan menggunakan mesin kedua yang anda kawal, kerana anda mengetahui perkara yang berlaku pada kedua-dua hujung.

Pada hujung jauh:

iperf3 -s

Perintah ini mendengar pada TCP 5201. Buka port itu hanya untuk alamat yang anda gunakan bagi ujian, dan tutupnya selepas selesai. Peraturan asas tembok api ufw pada VPS menerangkan sintaksnya.

Daripada VPS yang diuji:

iperf3 -c 203.0.113.10 -t 30
iperf3 -c 203.0.113.10 -t 30 -R
iperf3 -c 203.0.113.10 -t 30 -P 8

Perintah pertama mengukur muat naik daripada mesin yang diuji. -R membalikkan arah, lalu mengukur muat turun. -P 8 membuka lapan aliran selari.

Jalankan versi satu aliran dan versi selari, kerana kedua-duanya menjawab soalan yang berbeza. Satu sambungan TCP hanya boleh menyimpan data yang belum menerima pengakuan sebanyak yang dibenarkan oleh saiz tetingkapnya. Oleh itu, hadnya secara kasar ialah saiz tetingkap dibahagikan dengan masa pergi balik. Dengan kependaman 80 ms dan tetingkap 4 MB, had itu kira-kira 400 Mbit/s, walaupun kelajuan pautan di bawahnya lebih tinggi. Angka satu aliran menunjukkan kelajuan yang akan diperoleh oleh satu muat turun. Angka selari menunjukkan kapasiti pautan.

Pantau kuota lebar jalur anda semasa menjalankan ujian ini. Tiga puluh saat pada 1 Gbit/s memindahkan kira-kira 3.75 GB, dan anda akan menjalankan ujian ini beberapa kali bagi setiap arah.

Angka rujukan dan cara mentafsir keputusan anda

ChartTypical published 4k random read IOPS by storage class
The data behind this chart
[
  {
    "device": "Local NVMe",
    "iops_4k_read": "180,000"
  },
  {
    "device": "Local SATA SSD",
    "iops_4k_read": "90,000"
  },
  {
    "device": "Network block",
    "iops_4k_read": "12,000"
  },
  {
    "device": "Spinning disk",
    "iops_4k_read": "180"
  }
]

Volume NVMe tempatan dalam keputusan yang diterbitkan biasanya mencapai sekitar 180,000 IOPS bacaan rawak 4k. SSD SATA tempatan biasanya mencatat sekitar 90,000. Storan blok yang disambungkan melalui rangkaian, yang setiap permintaannya merentasi rangkaian sebelum sampai ke cakera, biasanya lebih hampir kepada 12,000, manakala cakera berputar mencatat kira-kira 180, kerana setiap permintaan rawak memerlukan kepala fizikal digerakkan.

Angka ini ialah angka lazim yang diterbitkan bagi setiap kelas storan, bukan ukuran daripada satu hos. Gunakannya untuk satu tujuan: menyemak sama ada keputusan anda sendiri berada dalam susunan magnitud yang betul. Jika pelan yang dijual sebagai NVMe menghasilkan penanda aras dalam julat ribuan rendah IOPS 4k, sahkan dahulu bahawa --direct=1 telah diaktifkan. Jika ya, sama ada storan itu bukan seperti yang diterangkan pada halaman produk, atau anda berkongsi storan tersebut dengan jiran yang sangat sibuk.

Mengapa satu larian bukan penanda aras

Satu keputusan ialah gambaran keadaan selama satu minit pada mesin yang dikongsi. Anggap keputusan itu sebagai satu sampel.

  • Jalankan setiap ujian sekurang-kurangnya lima kali, pada waktu yang berbeza dan sekurang-kurangnya dua hari yang berbeza. Simpan median dan julatnya. Keputusan yang diterbitkan tanpa julat ialah angka pemasaran.
  • Catat masa steal di sebelah setiap larian. Gugurkan larian apabila st tinggi, atau sekurang-kurangnya nyatakan bahawa keadaan itu berlaku.
  • Jalankan ujian cakera dengan dua tempoh. Banyak pelan menyediakan elaun IOPS burst yang diisi semula dari semasa ke semasa, jadi larian fio selama 60 saat mengukur burst, manakala --runtime=600 mengukur tahap minimum. Tahap minimum ialah prestasi yang anda peroleh pada hari yang buruk.
  • Pastikan tiada proses lain sedang berjalan. unattended-upgrades yang memulakan transaksi apt di tengah-tengah ujian CPU akan menjejaskan mata sebenar anda, dan ps -e -o comm= | grep -E 'apt|dpkg' sebelum setiap larian mengambil masa sesaat.
  • Ubah satu pemboleh ubah pada satu-satu masa. Versi alat, saiz blok atau bilangan thread yang berbeza menghasilkan angka yang tidak boleh dibandingkan, walaupun kelihatan serupa.

Apabila membandingkan dua pembekal, jalankan ujian pada waktu yang sama pada hari yang sama. Jika tidak, anda mengukur waktu dalam sehari.

Lakukan penanda aras beban kerja sendiri pada peringkat akhir

Alat sintetik menyusun kedudukan mesin. Hanya beban kerja anda sendiri yang menunjukkan sama ada sesuatu mesin mencukupi. Ukur masa untuk tugas yang benar-benar anda lakukan.

time tar -czf /tmp/bench.tgz /usr/share
rm -f /tmp/bench.tgz

Perintah itu memampatkan beberapa ratus megabait, jadi ia menguji CPU dan cakera bersama-sama serta berubah apabila salah satu daripadanya berubah. Amaran Removing leading / from member names adalah normal. Lebih baik lagi, ukur masa binaan anda sendiri, pertanyaan paling perlahan anda sendiri atau pemaparan halaman anda sendiri. Binaan yang mengambil masa 4 minit pada satu hos dan 7 minit pada hos yang lain sudah menjawab persoalan itu, tanpa mengira penilaian Geekbench. Ini juga ukuran yang menunjukkan bila penambahan sumber mesin tidak lagi berbaloi untuk dibayar, dan perkara ini wajar diketahui sebelum anda membaca kos sebenar VPS setiap bulan atau memindahkan beban kerja itu ke pelayan khusus.

FAQ

Mengapa saya mendapat hasil penanda aras yang berbeza setiap kali menjalankannya?

VPS berkongsi CPU fizikal, storan dan rangkaian dengan penyewa lain. Oleh itu, hasil anda bergantung pada aktiviti mereka pada ketika itu. Jalankan vmstat 1 semasa ujian dan baca lajur st: masa steal berterusan melebihi 5 menunjukkan hos sedang sibuk, dan skor CPU anda rendah atas sebab di luar mesin anda. Penyelesaiannya ialah kaedah, bukannya penalaan. Jalankan setiap ujian sekurang-kurangnya lima kali pada waktu yang berbeza. Kemudian laporkan median bersama julatnya.

Mengapa fio melaporkan berjuta-juta IOPS?

Hampir selalu kerana --direct=1 tiada. Tanpa --direct=1, fio membaca melalui cache halaman kernel. Oleh itu, selepas laluan pertama, fail ujian 2G dibekalkan daripada RAM dan yang diukur sebenarnya ialah lebar jalur memori. Tambahkan --direct=1 dan pastikan fail ujian lebih besar daripada sebarang cache dalam laluan tersebut. Jika --direct=1 gagal dengan err=-1/file:ioengines.c:321, func=get_events, error=Unknown error -1, jalankan df -hT .: Type bagi overlay tidak menyokong O_DIRECT. Oleh itu, halakan ujian kepada storan sebenar.

Adakah yabs.sh mencukupi tanpa perkara lain?

Untuk pemeriksaan awal, ya. Ia menjalankan fio pada empat saiz blok, iperf3 dalam kedua-dua arah dan Geekbench. Ia juga mencetak satu ringkasan yang boleh dibaca oleh orang lain. Ia tidak lagi mencukupi apabila anda mahu mengetahui sebab sesuatu nombor mempunyai nilai tersebut, kerana anda tidak boleh mengubah flagnya bagi setiap ujian. Setelah hasil yabs kelihatan tidak betul, ulangi ujian itu secara langsung dengan fio atau sysbench. Ubah satu flag pada satu masa.

Apakah satu nombor yang meramalkan prestasi aplikasi saya?

Kelajuan CPU teras tunggal dan kependaman bacaan rawak 4k, mengikut urutan tersebut, bagi kebanyakan beban kerja web dan pangkalan data. Angka daya pemprosesan kelihatan mengagumkan tetapi jarang menentukan prestasi, kerana permintaan biasa adalah kecil. Nyatakan persentil ke-99 daripada blok clat percentiles fio, bukannya purata. Satu daripada setiap 100 permintaan yang lambat ialah perkara yang disedari oleh pengguna.

Adakah saya perlu memasang apa-apa sebelum menjalankan penanda aras?

fio, sysbench dan iperf3 semuanya tersedia dalam arkib Ubuntu dan Debian: sudo apt install -y fio sysbench iperf3. yabs.sh hanya memerlukan curl, kerana ia memuat turun binari statik bagi apa-apa yang tiada. Padamkan setiap fail ujian selepas selesai. Fail fio 2G yang ditinggalkan pada cakera 20G boleh mencetuskan amaran cakera penuh beberapa minggu kemudian.

#benchmarks#fio#sysbench#yabs#iperf3#vps-performance