Paano I-verify Kung Totoong NVMe ang VPS Disk sa Linux
Suriin ang VPS mula sa loob gamit ang lsblk, sysfs, nvme-cli, at bounded fio run. Alamin kung bakit itinatago ng virtio ang totoong disk sa guest.
Sa apat na hakbang, i-verify ang NVMe disk sa Linux
Para i-verify ang NVMe disk sa isang Linux VPS, patakbuhin ang apat na check sa ganitong pagkakasunod-sunod: lsblk para sa pangalan ng device, ang rotational flag sa sysfs para malaman kung spinning media ito, nvme list para sa aktuwal na NVMe controller, at isang maikling fio run para sa tanging numerong hindi kayang pagandahin ng host. Tig-iisang segundo lang ang unang tatlong check. Ang huli ang magbibigay ng tiyak na sagot, dahil sa karamihan ng VPS platform, itinatago ng hypervisor ang pisikal na disk sa guest.
Ang NVMe (non-volatile memory express) ay protocol na ginagamit ng flash storage sa mga PCIe (peripheral component interconnect express) lane. Pinalitan nito ang SATA at AHCI path na idinisenyo para sa mga spinning drive. Mabilis ito dahil inaalis nito ang bottleneck sa pag-queue sa pagitan ng CPU at flash. Sa loob ng virtual machine, bihira mong direktang gamitin ang protocol na iyon. Nakikipag-ugnayan ka sa virtual disk na binuo ng host para sa iyo, kaya ang device name sa guest ay naglalarawan sa driver, hindi sa media na nasa rack.
Hakbang 1: ano ang ipinapakita ng lsblk?
Binabasa ng lsblk ang listahan ng kernel ng mga block device. Itinatago ng flag na -d ang mga partition, kaya isang linya lang ang makikita mo para sa bawat disk.
lsblk -d -o NAME,ROTA,SIZE,TYPE,TRAN,MODELKaraniwang ganito ang sagot ng isang KVM VPS:
NAME ROTA SIZE TYPE TRAN MODEL
vda 0 80G diskTatlong naming pattern ang sumasaklaw sa halos lahat ng Linux server:
- Ang
nvme0n1ay namespace 1 sa NVMe controller 0. NVMe device ang ginagamit ng guest mo, tunay man ito o emulated. - Ang
sdaay ang SCSI layer. Dito napupunta ang mga tunay na SATA at SAS disk, pati ang virtio-scsi driver. - Ang
vdaay virtio-blk, ang paravirtual block driver na karaniwang ginagamit bilang default ng karamihan sa KVM host.
Sa column na TRAN (transport), makikita ang nvme para sa NVMe device at sata para sa SATA disk na direktang nakikita ng guest. Karaniwan itong blangko sa ilalim ng virtio-blk dahil walang physical transport na maiuulat ng guest. Blangko rin ang MODEL sa parehong dahilan. Normal ang walang laman na model string sa isang VPS at wala itong sinasabi tungkol sa hardware.
Hakbang 2: alisin ang posibilidad na spinning disk
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"Ang rotational file ang naglalaman ng 1 kapag naniniwala ang kernel na may spinning platters ang device, at ng 0 para sa lahat ng iba pa. Sa bare metal, nagmumula sa drive ang value. Sa ilalim ng virtio-blk, nagmumula ito sa feature bit na itinatakda ng host, kaya inaalis ng 0 ang posibilidad ng ordinaryong hard drive ngunit wala itong ibang pinatutunayan. Basahin pa rin ito: ang 1 sa planong ibinebenta bilang solid state storage ay isang tuwirang kontradiksyon, at ito ang screenshot na hindi matututulan ng support.
Nire-resolve ng readlink -f ang sysfs symlink at ipinapakita ang bus na kinabitan ng device:
/sys/devices/pci0000:00/0000:00:05.0/virtio2/block/vdaAng salitang virtio sa path na iyon ang sagot para sa hakbang na ito. Ang NVMe device ay may path na naglalaman ng nvme, gaya ng /sys/devices/pci0000:00/0000:01:00.0/nvme/nvme0/nvme0n1, at ang direktang nakakabit na ATA disk ay may path na naglalaman ng ata1. Ito ang parehong impormasyong ipinakita ng lsblk, ngunit kinuha mula sa kernel sa halip na sa formatted column, na kapaki-pakinabang kapag walang laman ang TRAN field.
Hakbang 3: magtanong sa nvme-cli at sa PCI bus
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"Ang nvme list ay nagpi-print ng isang row para sa bawat namespace, kasama ang serial number ng controller, model string, at firmware revision. Ang walang laman na table ay nangangahulugang walang NVMe device na inilantad sa iyong guest. Ang walang inilalabas na tumutugmang line ng lspci ay nagsasabi rin ng parehong bagay mula sa kabilang panig: walang NVMe controller sa virtual PCI bus na nakikita ng iyong guest. Parehong normal na resulta ang dalawang walang-lamang output sa isang virtio VPS, at hindi patunay ang alinman na walang NVMe drive ang host.
Kung may lumitaw na namespace, mas marami pang impormasyon ang makukuha sa nvme-cli. Ini-print ng sudo nvme id-ctrl /dev/nvme0 ang identity ng controller, at ini-print ng sudo nvme smart-log /dev/nvme0n1 ang temperature, power-on hours, at porsiyento ng rated write endurance na nagamit na. Patakbuhin lamang ang mga ito kapag aktuwal na naglista ng device ang nvme list, dahil kailangan ng dalawang command ng aktuwal na /dev/nvme* node para mabuksan.
Bakit nagpapakita pa rin ng /dev/vda ang isang tunay na NVMe host
Ang hypervisor ang nagdedesisyon kung anong device model ang makikita ng guest, at hiwalay ang desisyong iyon sa aktuwal na media sa ilalim nito. Tatlong arrangement ang karaniwan.
- virtio-blk o virtio-scsi sa ibabaw ng isang file, logical volume, o ZFS dataset na nasa NVMe drives. Makikita mo ang
vdaosda. NVMe ang storage. Walang paraan ang guest para malaman iyon. - Isang emulated NVMe controller sa harap ng kahit anong storage. Makikita mo ang
nvme0n1kahit napupunta ang bytes sa SATA array o sa network volume na dalawang rack ang layo. - PCIe passthrough, kung saan ipinapagamit ng host ang isang physical controller sa isang guest. Makikita mo ang tunay na
nvme0n1kasama ang tunay na model string. Bihira ito sa shared VPS plans dahil dedikado ang card sa iisang customer.
Kaya maaaring iligaw ka ng device name sa magkabilang direksiyon. Mas masahol pa, maaaring maglagay ang host ng write-back cache, RAID layer, o replicated network volume sa pagitan ng iyong mga write at ng flash. Binabago ng bawat isa ang performance na nakukuha mo nang hindi binabago ang kahit isang pangalan sa /sys. Kaya ang device name ang panimulang punto, hindi ang pangwakas na batayan. Kung pumipili ka pa ng plan, ipinapaliwanag ng pagkakaiba ng NVMe at SATA SSD storage kung para saan talaga sulit bayaran ang bawat tier.
Ang tapat na pagsusuri ay latency, kaya sukatin ito
Nag-iisyu ang fio (flexible I/O tester) ng aktuwal na read laban sa isang aktuwal na file at nag-uulat kung gaano katagal ang bawat isa. Ang maliliit na random read ang tamang workload dito dahil inilalantad ng mga ito ang round trip papunta sa media at hindi maaaring ihatid ng read-ahead.
Una, gawin ang test file at tiyaking tumatanggap ang filesystem na ito ng unbuffered I/O. Binubuksan ng --direct=1 ang file gamit ang O_DIRECT, na lumalampas sa page cache. Kung wala ito, sarili mong RAM ang sinusukat mo at makakakuha ka ng mga numerong hindi kayang gawin ng anumang disk.
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"Kung refusal ang inilabas nito, nasa filesystem na walang suporta sa O_DIRECT ang pinili mong path. Ganito kumikilos ang container overlay filesystem at ilang network filesystem. Pumili ng directory sa root filesystem ng VPS at subukan muli. Kung success ang inilabas nito, patakbuhin ang measurement:
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.tmpSadyang nilimitahan ang run: isang job, queue depth na 1, dalawampung segundo, at 256 MB na data. Hindi nito mapupuno ang disk mo at hindi ka maba-flag dahil sa abuse. Ang queue depth na 1 din ang tapat na setting para sa tanong na ito dahil maaaring itago ng deep queue ang mabagal na device sa likod ng parallelism kahit mataas pa rin ang latency.
Pagbasa sa output ng fio
Dalawang linya ang mahalaga. Ganito ang hitsura ng summary line: read: IOPS=9012, BW=35.2MiB/s. Sa ibaba nito, nagpi-print ang fio ng block na clat. Ang clat ay completion latency: ang tagal mula sa pagsusumite ng fio ng read hanggang sa ibalik ng kernel ang data. Basahin ang value ng avg, pagkatapos ay basahin ang 99.00th percentile sa listahang clat percentiles. Ipinapakita ng average ang storage class. Ipinapakita ng 99th percentile kung gaano kadalas kang paghihintayin ng ibang user sa parehong host.
Nagpi-print ang fio ng latency sa microseconds kapag maliit ang mga value at lumilipat ito sa milliseconds kapag mas malaki ang mga ito. Tingnan ang unit sa linya bago maghambing ng kahit ano.
Anong mga numero ang naghihiwalay sa NVMe class at SATA class
Ang mga figure sa ibaba ay karaniwang published values para sa single-job 4k random reads sa queue depth 1, batay sa vendor documentation at community benchmarks hanggang Agosto 2026. Mga range ang mga ito para sa paghahambing, hindi mga sukat mula sa server mo.
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"
}
]Ang isang local NVMe volume ay sumasagot sa isang 4k random read sa humigit-kumulang 110 microseconds at umaabot sa mga 9,000 IOPS sa queue depth 1. Ang isang local SATA SSD ay nasa humigit-kumulang 320 microseconds at 3,100 IOPS. Ang network attached block storage ay nasa mga 900 microseconds at 1,100 IOPS, dahil dumadaan muna sa network hop ang bawat read bago ma-access ang flash.
Sa queue depth 1, iisang fact lang ang ipinapahayag ng dalawang column na iyon sa magkaibang paraan: kapag paisa-isa ang read, ang throughput ay katumbas lang ng isa na hinati sa latency. Kung mas malapit ang average mo sa 110 kaysa sa 320 microseconds, NVMe class storage ang gamit mo, anuman ang itinawag ng lsblk sa device. Kung mas malapit ito sa 900 microseconds, may mas mabagal kaysa local flash sa path, at ang salitang NVMe sa order page ay tumutukoy sa drives ng host, hindi sa volume mo.
Patakbuhin ito nang higit sa isang beses bago magreklamo
Ang isang run ay sample lamang, hindi resulta. Ibinabahagi ng VPS ang mga disk nito, kaya maaaring doblehin ng abalang katabing tenant ang latency mo sa loob ng sampung minuto at pagkatapos ay mawala. May mga platform din na nagbibigay ng burst credits, kaya mukhang napakahusay ng unang ilang minuto ng anumang test. Patakbuhin ang parehong command nang tatlo o apat na beses sa magkakaibang oras ng araw at ikumpara ang pinakamasamang resulta, hindi ang pinakamaganda. Ang isang hindi magandang run ay maaaring pansamantalang kondisyon lamang. Ang paulit-ulit na pattern ay fault na dapat i-report sa support, at mas madaling maaksyunan ang ticket kung may kalakip itong tatlong fio output na may timestamp. Para sa mas malawak na pagsusuri na sumasaklaw sa CPU at network pati na sa disk, ginagamit ng isang buong VPS benchmark run ang parehong disiplina sa iba pang subsystem.
Ano ang gagawin sa resulta
Kung nasa NVMe band ang latency, huwag nang alalahanin ang device name at magpatuloy na. Hindi downgrade ang vda. Ito ang pinakamabilis na virtual disk driver na iniaalok ng karamihan sa mga host, at ito ang dapat mong gamitin.
Kung nasa network storage band ang latency sa isang planong ibinebenta bilang local NVMe, mayroon kang tiyak at maaaring uliting claim: ang eksaktong fio command, ang average completion latency, at ang mga oras kung kailan mo ito pinatakbo. Support ticket ito, hindi argumento sa forum. Bago mo ito ipadala, tiyaking hindi lang puno o labis na fragmented ang disk, at tiyaking walang proseso sa server na masinsinang nagsusulat habang nagsasagawa ka ng test.
Isagawa ang check na ito sa araw ng pag-provision mo, hindi kapag mabagal na ang pakiramdam ng system, para mayroon kang baseline na maihahambing sa susunod. Natural itong isama sa unang sampung minuto sa isang bagong VPS, kasabay ng pag-set up ng firewall at SSH keys. Kung malabo pa rin sa iyo ang pagkakaiba ng mga storage tier, ipinapaliwanag ng kung ano talaga ang ibinibigay ng isang SSD VPS ang mga batayang konsepto sa likod nito.
FAQ
Bakit ipinapakita ng lsblk ang /dev/vda kahit NVMe ang ina-advertise ng host?
Dahil tinutukoy ng vda ang virtio-blk driver sa guest mo, hindi ang hardware sa host. Nagpe-present ang KVM hypervisor ng paravirtual block device na naka-back sa isang file, logical volume, o dataset. Maaaring nasa NVMe drives ang backing store na iyon nang hindi ito nalalaman ng guest. Inilalarawan ng pangalan ang virtualisation layer. Latency measurement lamang ang makapaglalarawan sa aktuwal na media.
Pinatutunayan ba ng rotational 0 na NVMe disk ang gamit ko?
Hindi. Kapag may /sys/block/<dev>/queue/rotational na naglalaman ng 0, nangangahulugan itong hindi itinuturing ng kernel na may umiikot na platter ang device. Sa ilalim ng virtio, itinatakda ang value na iyon ng feature bit na pinipili ng host. Inaalis nito ang posibilidad na ordinaryong hard drive ang gamit. Hindi nito matutukoy kung NVMe o SATA SSD ang device, at hindi rin nito matutukoy kung local flash o network volume ito. Mahalaga pa ring aksyunan ang 1 kapag lumitaw ito, dahil sumasalungat ito sa anumang planong ibinebenta bilang solid state storage.
Bakit walang laman ang nvme list sa VPS ko?
Dahil walang NVMe controller na naka-expose sa guest mo. Parehong binabasa ng nvme list at lspci kung ano ang nakikita ng virtual machine. Walang NVMe controller na ma-e-enumerate ang virtio-blk o virtio-scsi disk. Normal ang walang-lamang table sa karamihan ng VPS plans. Hindi ito patunay na walang NVMe drives ang host. I-install ang nvme-cli gamit ang sudo apt install -y nvme-cli at asahan ang walang-lamang table maliban kung may controller na ipinasa sa guest.
Anong fio result ang maituturing na NVMe class storage?
Sa queue depth 1, gamit ang 4k random reads at --direct=1, ang average completion latency na malapit sa 110 microseconds ay NVMe class. Karaniwang sumusunod dito ang humigit-kumulang 9,000 IOPS. Ang latency na nasa paligid ng 320 microseconds ay nagpapahiwatig ng SATA SSD. Ang latency na nasa paligid ng 900 microseconds ay nagpapahiwatig ng network attached storage, kung saan dumaraan sa network hop ang bawat read. Karaniwang published bands ang mga ito para sa August 2026. Ihambing ang order of magnitude sa halip na eksaktong figures. Ulitin ang test sa magkakaibang oras bago bumuo ng konklusyon.