Cara Memastikan Disk VPS Benar-Benar NVMe di Linux
Host mengklaim NVMe? Verifikasi dari guest dengan lsblk, sysfs, nvme-cli, dan uji latensi fio terbatas, serta pahami mengapa virtio menyembunyikan disk fisik.
Verifikasi disk NVMe di Linux dalam empat langkah
Untuk memverifikasi disk NVMe pada Linux VPS, jalankan empat pemeriksaan secara berurutan: lsblk untuk mengetahui nama perangkat, flag rotational di sysfs untuk memeriksa media berputar, nvme list untuk memastikan controller NVMe yang sebenarnya, dan jalankan fio secara singkat untuk memperoleh satu angka yang tidak dapat direkayasa oleh host. Tiga pemeriksaan pertama masing-masing hanya memerlukan waktu satu detik. Pemeriksaan terakhir menyelesaikan pertanyaan ini karena pada sebagian besar platform VPS, hypervisor menyembunyikan disk fisik dari guest.
NVMe (non-volatile memory express) adalah protokol yang digunakan penyimpanan flash melalui jalur PCIe (peripheral component interconnect express). Protokol ini menggantikan jalur SATA dan AHCI yang dirancang untuk drive berputar. NVMe lebih cepat karena menghilangkan hambatan antrean antara CPU dan flash. Di dalam mesin virtual, Anda hampir tidak pernah berkomunikasi langsung dengan protokol tersebut. Anda berkomunikasi dengan disk virtual yang dirakit oleh host. Karena itu, nama perangkat di guest menjelaskan driver, bukan media penyimpanan yang terpasang di rack.
Langkah 1: apa yang ditampilkan lsblk?
lsblk membaca daftar perangkat blok dari kernel. Flag -d menyembunyikan partisi, sehingga Anda melihat satu baris untuk setiap disk.
lsblk -d -o NAME,ROTA,SIZE,TYPE,TRAN,MODELKVM VPS biasanya menampilkan hasil seperti ini:
NAME ROTA SIZE TYPE TRAN MODEL
vda 0 80G diskTiga pola penamaan ini mencakup hampir semua server Linux:
nvme0n1adalah namespace 1 pada pengontrol NVMe 0. Guest Anda menggunakan perangkat NVMe, baik perangkat fisik maupun emulasi.sdaadalah lapisan SCSI. Disk SATA dan SAS fisik muncul di sini, begitu juga driver virtio-scsi.vdaadalah virtio-blk, yaitu driver blok paravirtual yang secara default digunakan oleh sebagian besar host KVM.
Kolom TRAN (transport) menampilkan nvme untuk perangkat NVMe dan sata untuk disk SATA yang dapat dilihat langsung oleh guest. Kolom ini biasanya kosong pada virtio-blk karena guest tidak memiliki transport fisik untuk dilaporkan. MODEL juga kosong karena alasan yang sama. String model yang kosong pada VPS adalah hal yang normal dan tidak memberikan informasi tentang perangkat keras.
Langkah 2: singkirkan kemungkinan disk berputar
DISK=$(lsblk -dno NAME,TYPE | awk '$2 == "disk" { print $1; exit }')
echo "checking $DISK"
cat "/sys/block/$DISK/queue/rotational"
readlink -f "/sys/block/$DISK"File rotational berisi 1 saat kernel menganggap perangkat memiliki platter yang berputar, dan 0 untuk perangkat lainnya. Pada bare metal, nilainya berasal dari drive. Pada virtio-blk, nilainya berasal dari bit fitur yang ditetapkan host. Jadi, 0 menyingkirkan kemungkinan hard drive biasa, tetapi tidak membuktikan hal lain. Tetap baca nilainya: 1 pada paket yang dijual sebagai penyimpanan solid state merupakan kontradiksi yang jelas, dan itulah satu-satunya screenshot yang tidak dapat dibantah oleh dukungan teknis.
readlink -f menyelesaikan symlink sysfs dan mencetak bus tempat perangkat terhubung:
/sys/devices/pci0000:00/0000:00:05.0/virtio2/block/vdaKata virtio dalam path tersebut adalah jawaban untuk langkah ini. Perangkat NVMe menghasilkan path yang memuat nvme, seperti /sys/devices/pci0000:00/0000:01:00.0/nvme/nvme0/nvme0n1, sedangkan disk ATA yang terhubung langsung menghasilkan path yang memuat ata1. Ini adalah fakta yang sama seperti yang dicetak oleh lsblk, tetapi diambil langsung dari kernel, bukan dari kolom yang telah diformat. Hal ini berguna saat field TRAN kosong.
Langkah 3: minta informasi dari nvme-cli dan bus PCI
sudo apt update
sudo apt install -y nvme-cli pciutils
sudo nvme list || echo "nvme-cli found no NVMe device"
lspci | grep -i -e nvme -e 'non-volatile' || echo "no NVMe controller on this guest's PCI bus"nvme list menampilkan satu baris untuk setiap namespace, termasuk nomor seri controller, string model, dan revisi firmware. Tabel kosong berarti tidak ada perangkat NVMe yang diekspos ke guest Anda. lspci yang tidak mencetak baris yang cocok menyatakan hal yang sama dari sisi lain: bus PCI virtual yang dapat dilihat guest Anda tidak membawa controller NVMe. Kedua hasil kosong tersebut merupakan kondisi normal pada VPS virtio, dan tidak satu pun membuktikan bahwa host tidak memiliki drive NVMe.
Jika sebuah namespace muncul, nvme-cli dapat memberikan informasi lebih lanjut. sudo nvme id-ctrl /dev/nvme0 menampilkan identitas controller, sedangkan sudo nvme smart-log /dev/nvme0n1 menampilkan suhu, jam sejak power-on, dan persentase endurance tulis yang telah digunakan dibandingkan dengan nilai nominal. Jalankan perintah tersebut hanya jika nvme list benar-benar mencantumkan perangkat, karena kedua perintah memerlukan node /dev/nvme* yang nyata untuk dibuka.
Mengapa host yang benar-benar menggunakan NVMe masih menampilkan /dev/vda
Hypervisor menentukan model perangkat yang terlihat oleh guest, dan pilihan tersebut tidak bergantung pada media penyimpanan di bawahnya. Tiga susunan umum digunakan.
- virtio-blk atau virtio-scsi melalui file, logical volume, atau dataset ZFS yang berada pada drive NVMe. Anda akan melihat
vdaatausda. Penyimpanannya menggunakan NVMe. Guest tidak memiliki cara untuk mengetahuinya. - Pengontrol NVMe yang diemulasikan di depan penyimpanan apa pun. Anda akan melihat
nvme0n1meskipun data sebenarnya ditulis ke array SATA atau volume jaringan yang berada dua rak jauhnya. - PCIe passthrough, yaitu saat host menyerahkan pengontrol fisik kepada satu guest. Anda akan melihat
nvme0n1yang sebenarnya, lengkap dengan string model yang sebenarnya. Konfigurasi ini jarang tersedia pada paket VPS bersama karena kartu tersebut menjadi khusus untuk satu pelanggan.
Jadi, nama perangkat dapat menyesatkan Anda ke dua arah. Lebih buruk lagi, host dapat menempatkan write-back cache, lapisan RAID, atau volume jaringan yang direplikasi di antara operasi penulisan Anda dan flash. Masing-masing dapat mengubah performa yang Anda dapatkan tanpa mengubah satu pun nama di /sys. Karena itu, nama perangkat adalah titik awal, bukan titik akhir. Jika Anda masih memilih paket, perbedaan antara penyimpanan NVMe dan SATA SSD menjelaskan nilai yang sebenarnya Anda dapatkan dari setiap tingkat paket.
Uji yang jujur adalah latensi, jadi ukurlah
fio (flexible I/O tester) melakukan pembacaan nyata terhadap file nyata dan melaporkan waktu yang diperlukan untuk setiap pembacaan. Pembacaan acak berukuran kecil adalah beban kerja yang tepat untuk pengujian ini karena menunjukkan waktu pulang-pergi ke media penyimpanan dan tidak dapat dilayani oleh read-ahead.
Buat file pengujian terlebih dahulu, lalu pastikan filesystem ini menerima unbuffered I/O. --direct=1 membuka file dengan O_DIRECT, yang melewati page cache. Tanpa opsi tersebut, Anda mengukur RAM, sehingga menghasilkan angka yang tidak mungkin dicapai oleh disk mana pun.
sudo apt install -y fio
fio --name=prep --filename=/var/tmp/nvme-check.tmp --size=256M --bs=1M --rw=write --direct=1 --end_fsync=1 > /dev/null \
&& echo "unbuffered writes work here, the timing test is valid" \
|| echo "this filesystem refuses direct=1, so the timing test below will not run"Jika perintah tersebut mencetak penolakan, path yang Anda pilih berada pada filesystem yang tidak mendukung O_DIRECT. Container overlay filesystem dan beberapa network filesystem berperilaku seperti ini. Pilih direktori pada root filesystem VPS, lalu coba lagi. Jika perintah tersebut mencetak keberhasilan, jalankan pengukuran:
fio --name=randread4k --filename=/var/tmp/nvme-check.tmp --bs=4k --rw=randread \
--direct=1 --iodepth=1 --numjobs=1 --runtime=20 --time_based --group_reporting \
|| echo "fio stopped early, read its first line for the reason"
rm -f /var/tmp/nvme-check.tmpPengujian ini sengaja dibatasi: satu job, queue depth 1, dua puluh detik, dan data 256 MB. Pengujian ini tidak akan memenuhi disk Anda dan tidak akan membuat Anda ditandai karena penyalahgunaan. Queue depth 1 juga merupakan pengaturan yang tepat untuk pertanyaan ini karena queue yang dalam memungkinkan perangkat yang lambat bersembunyi di balik paralelisme, sementara latensi tetap tinggi.
Membaca output fio
Ada dua baris yang penting. Baris ringkasan terlihat seperti read: IOPS=9012, BW=35.2MiB/s, dan di bawahnya fio mencetak blok clat. clat adalah latensi penyelesaian: waktu antara fio mengirimkan permintaan baca dan kernel mengembalikan data. Baca nilai avg, lalu baca persentil 99.00th dalam daftar clat percentiles. Nilai rata-rata menunjukkan kelas penyimpanan. Persentil ke-99 menunjukkan seberapa sering tenant lain pada host yang sama membuat Anda menunggu.
Fio menampilkan latensi dalam mikrodetik saat nilainya kecil dan beralih ke milidetik saat nilainya tidak lagi kecil. Periksa satuan pada baris tersebut sebelum membandingkan apa pun.
Angka apa yang membedakan kelas NVMe dari kelas SATA
Angka di bawah ini adalah nilai umum yang dipublikasikan untuk pembacaan acak 4k pada satu pekerjaan dengan queue depth 1. Data ini dikumpulkan dari dokumentasi vendor dan benchmark komunitas hingga Agustus 2026. Angka tersebut merupakan rentang pembanding, bukan hasil pengukuran dari server Anda.
The data behind this chart
[
{
"label": "Local NVMe",
"avg_latency_us": 110
},
{
"label": "Local SATA SSD",
"avg_latency_us": 320
},
{
"label": "Network block storage",
"avg_latency_us": 900
}
]The data behind this chart
[
{
"label": "Local NVMe",
"iops": "9,000"
},
{
"label": "Local SATA SSD",
"iops": "3,100"
},
{
"label": "Network block storage",
"iops": "1,100"
}
]Volume NVMe lokal menyelesaikan satu pembacaan acak 4k dalam sekitar 110 mikrodetik dan mencapai sekitar 9,000 IOPS pada queue depth 1. SSD SATA lokal berada di sekitar 320 mikrodetik dan 3,100 IOPS. Block storage yang terhubung melalui jaringan berada di sekitar 900 mikrodetik dan 1,100 IOPS, karena setiap pembacaan harus melewati satu hop jaringan sebelum flash diakses.
Pada queue depth 1, kedua kolom tersebut menyatakan fakta yang sama dalam dua bentuk: satu pembacaan pada satu waktu berarti throughput sama dengan satu dibagi latensi. Jika nilai rata-rata Anda lebih dekat ke 110 daripada ke 320 mikrodetik, berarti storage Anda termasuk kelas NVMe, apa pun sebutan perangkat tersebut menurut lsblk. Jika lebih dekat ke 900 mikrodetik, terdapat komponen yang lebih lambat daripada flash lokal dalam jalur tersebut. Dalam hal ini, kata NVMe pada halaman pemesanan merujuk pada drive milik host, bukan volume Anda.
Jalankan lebih dari sekali sebelum mengajukan keluhan
Satu kali pengujian hanya merupakan sampel, bukan hasil yang pasti. VPS berbagi disk, sehingga pengguna lain yang sedang menggunakan banyak sumber daya dapat menggandakan latensi Anda selama sepuluh menit, lalu kondisi tersebut dapat kembali normal. Beberapa platform juga memberikan kredit burst yang membuat menit-menit pertama pengujian terlihat sangat baik. Jalankan perintah yang sama tiga atau empat kali pada waktu yang berbeda dalam sehari, lalu bandingkan hasil terburuk, bukan hasil terbaik. Satu hasil buruk dapat disebabkan oleh kondisi sementara. Pola yang berulang merupakan masalah yang layak dilaporkan melalui tiket dukungan, dan laporan tersebut lebih meyakinkan jika disertai tiga output fio yang memiliki stempel waktu. Untuk gambaran yang lebih menyeluruh, yang mencakup CPU dan jaringan selain disk, pengujian benchmark VPS lengkap menerapkan disiplin yang sama pada subsistem lain.
Apa yang harus dilakukan dengan hasilnya
Jika latensi berada pada kisaran NVMe, jangan lagi mengkhawatirkan nama perangkat dan lanjutkan. vda bukan penurunan kualitas. Driver disk virtual ini adalah yang tercepat yang ditawarkan sebagian besar host, dan itulah yang Anda perlukan.
Jika latensi berada pada kisaran penyimpanan jaringan pada paket yang dipasarkan sebagai NVMe lokal, Anda memiliki klaim yang spesifik dan dapat direproduksi: perintah fio yang digunakan, latensi penyelesaian rata-rata, serta waktu saat pengujian dijalankan. Ini merupakan tiket dukungan, bukan perdebatan di forum. Sebelum mengirimkannya, pastikan disk tidak sekadar penuh atau mengalami fragmentasi berat. Pastikan juga tidak ada proses pada server yang melakukan penulisan intensif selama pengujian.
Jalankan pemeriksaan ini pada hari Anda melakukan provisioning, bukan saat sesuatu mulai terasa lambat. Dengan demikian, Anda memiliki baseline untuk dibandingkan di kemudian hari. Pemeriksaan ini sesuai dilakukan sebagai bagian dari sepuluh menit pertama pada VPS baru, bersama konfigurasi firewall dan cryptographic key SSH. Jika perbedaan antara tier penyimpanan masih belum jelas, apa yang sebenarnya diberikan oleh VPS SSD menjelaskan dasar yang mendasarinya.
FAQ
Mengapa lsblk menampilkan /dev/vda ketika host saya menyatakan menggunakan NVMe?
Karena vda menamai driver virtio-blk di guest Anda, bukan perangkat keras pada host. Hypervisor KVM menyajikan perangkat blok paravirtual yang didukung oleh file, logical volume, atau dataset. Penyimpanan pendukung tersebut dapat berada pada drive NVMe tanpa pernah memberi tahu guest tentang hal itu. Nama tersebut menjelaskan lapisan virtualisasi. Hanya pengukuran latensi yang dapat menjelaskan jenis media penyimpanan.
Apakah rotational 0 membuktikan bahwa saya memiliki disk NVMe?
Tidak. /sys/block/<dev>/queue/rotational yang berisi 0 berarti kernel tidak menganggap perangkat tersebut memiliki platter yang berputar. Pada virtio, nilai itu ditetapkan oleh feature bit yang dipilih host. Nilai tersebut menyingkirkan kemungkinan hard drive biasa. Namun, nilai tersebut tidak dapat membedakan NVMe dari SSD SATA, dan tidak dapat membedakan flash lokal dari volume jaringan. Nilai 1 tetap perlu ditindaklanjuti karena bertentangan dengan rencana yang dipasarkan sebagai penyimpanan solid-state.
Mengapa nvme list kosong pada VPS saya?
Karena tidak ada controller NVMe yang diekspos ke guest Anda. nvme list dan lspci sama-sama membaca perangkat yang dapat dilihat oleh virtual machine. Disk virtio-blk atau virtio-scsi tidak menyajikan controller NVMe untuk dienumerasi. Tabel kosong merupakan hasil normal pada sebagian besar paket VPS dan bukan bukti bahwa host tidak memiliki drive NVMe. Instal nvme-cli dengan sudo apt install -y nvme-cli dan perkirakan tabel tetap kosong kecuali sebuah controller diteruskan ke guest.
Hasil fio seperti apa yang termasuk penyimpanan kelas NVMe?
Pada queue depth 1 dengan pembacaan acak 4k dan --direct=1, latensi penyelesaian rata-rata sekitar 110 mikrodetik termasuk kelas NVMe, dan menghasilkan sekitar 9,000 IOPS. Nilai sekitar 320 mikrodetik mengarah pada SSD SATA, sedangkan nilai sekitar 900 mikrodetik mengarah pada penyimpanan yang terhubung melalui jaringan, karena setiap pembacaan melewati satu hop jaringan. Nilai tersebut merupakan kisaran umum yang dipublikasikan untuk August 2026. Karena itu, bandingkan orde besarnya, bukan angka persisnya, dan ulangi pengujian pada jam yang berbeda sebelum menarik kesimpulan.