วิธีตรวจสอบว่า VPS ใช้ดิสก์ NVMe จริงหรือไม่บน Linux
ตรวจสอบว่า VPS ของคุณใช้ NVMe จริงหรือเป็นเพียงการจำลองผ่าน virtio ด้วยคำสั่ง lsblk, sysfs, nvme-cli และการทดสอบค่า latency ด้วย fio เพื่อยืนยันประสิทธิภาพดิสก์ที่แท้จริง
การตรวจสอบดิสก์ NVMe บน Linux ใน 4 ขั้นตอน
ในการตรวจสอบดิสก์ NVMe บน Linux VPS ให้ดำเนินการตรวจสอบ 4 ขั้นตอนตามลำดับ: ใช้ lsblk เพื่อดูชื่ออุปกรณ์, ใช้แฟล็ก rotational ใน sysfs เพื่อตรวจสอบสื่อบันทึกข้อมูลแบบจานหมุน, ใช้ nvme list เพื่อตรวจสอบคอนโทรลเลอร์ NVMe จริง และรัน fio แบบสั้นเพื่อดูตัวเลขเพียงหนึ่งเดียวที่โฮสต์ไม่สามารถปลอมแปลงได้ การตรวจสอบ 3 ขั้นตอนแรกใช้เวลาเพียงวินาทีเดียว ส่วนขั้นตอนสุดท้ายจะเป็นตัวตัดสิน เนื่องจากบนแพลตฟอร์ม VPS ส่วนใหญ่ ไฮเปอร์ไวเซอร์จะซ่อนดิสก์ทางกายภาพไว้จากระบบปฏิบัติการของผู้ใช้งาน (guest)
NVMe (non-volatile memory express) คือโปรโตคอลที่หน่วยความจำแบบแฟลชใช้สื่อสารผ่านช่องทาง PCIe (peripheral component interconnect express) มันเข้ามาแทนที่เส้นทาง SATA และ AHCI ที่ออกแบบมาสำหรับไดรฟ์แบบจานหมุน และมีความเร็วสูงเนื่องจากช่วยขจัดปัญหาคอขวดในการจัดคิวระหว่าง CPU กับหน่วยความจำแฟลช ภายในเครื่องเสมือน (virtual machine) คุณแทบจะไม่ได้ใช้โปรโตคอลนั้นโดยตรง แต่คุณกำลังสื่อสารกับดิสก์เสมือนที่โฮสต์สร้างขึ้นมาให้ ดังนั้นชื่ออุปกรณ์ในระบบของคุณจึงอธิบายถึงไดรเวอร์ ไม่ใช่สื่อบันทึกข้อมูลที่อยู่ในตู้แร็คจริง
ขั้นตอนที่ 1: lsblk แสดงผลอย่างไร
lsblk จะอ่านรายการอุปกรณ์บล็อก (block devices) จากเคอร์เนล แฟล็ก -d จะซ่อนพาร์ทิชันไว้ เพื่อให้คุณเห็นข้อมูลเพียงหนึ่งบรรทัดต่อหนึ่งดิสก์
lsblk -d -o NAME,ROTA,SIZE,TYPE,TRAN,MODELโดยปกติ KVM VPS จะแสดงผลลัพธ์ดังนี้:
NAME ROTA SIZE TYPE TRAN MODEL
vda 0 80G diskรูปแบบการตั้งชื่อ 3 รูปแบบครอบคลุมเซิร์ฟเวอร์ Linux เกือบทั้งหมด:
nvme0n1คือเนมสเปซ 1 บนคอนโทรลเลอร์ NVMe 0 เกสต์ของคุณกำลังใช้งานอุปกรณ์ NVMe ไม่ว่าจะเป็นแบบจริงหรือแบบจำลองsdaคือเลเยอร์ SCSI ดิสก์ SATA และ SAS ของจริงจะปรากฏที่นี่ รวมถึงไดรเวอร์ virtio-scsi ด้วยvdaคือ virtio-blk ซึ่งเป็นไดรเวอร์บล็อกแบบ paravirtual ที่โฮสต์ KVM ส่วนใหญ่ใช้เป็นค่าเริ่มต้น
คอลัมน์ TRAN (การขนส่ง) จะอ่านค่าเป็น nvme สำหรับอุปกรณ์ NVMe และ sata สำหรับดิสก์ SATA ที่เกสต์มองเห็นได้โดยตรง โดยปกติคอลัมน์นี้จะว่างเปล่าภายใต้ virtio-blk เนื่องจากไม่มีการขนส่งทางกายภาพให้เกสต์รายงาน ส่วน MODEL จะว่างเปล่าด้วยเหตุผลเดียวกัน สตริงโมเดลที่ว่างเปล่าบน VPS เป็นเรื่องปกติและไม่ได้บ่งบอกข้อมูลใดๆ เกี่ยวกับฮาร์ดแวร์
ขั้นตอนที่ 2: ตรวจสอบว่าไม่ใช่ฮาร์ดดิสก์แบบจานหมุน
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"ไฟล์ rotational จะเก็บค่า 1 เมื่อเคอร์เนลตรวจพบว่าอุปกรณ์เป็นแบบจานหมุน และเก็บค่า 0 สำหรับอุปกรณ์ประเภทอื่น ในกรณีที่เป็น bare metal ค่านี้จะมาจากตัวไดรฟ์โดยตรง แต่ภายใต้ virtio-blk ค่านี้จะมาจาก feature bit ที่โฮสต์เป็นผู้กำหนด ดังนั้นค่า 0 จึงช่วยยืนยันได้เพียงว่าไม่ใช่ฮาร์ดดิสก์แบบจานหมุนปกติเท่านั้น อย่างไรก็ตามควรตรวจสอบค่านี้ไว้ เพราะหากพบค่า 1 บนอุปกรณ์ที่ระบุว่าเป็น solid state storage ย่อมถือเป็นความขัดแย้งที่ชัดเจน และเป็นหลักฐานที่ฝ่ายสนับสนุนไม่สามารถโต้แย้งได้
readlink -f จะทำการ resolve ค่า sysfs symlink และแสดงบัสที่อุปกรณ์นั้นเชื่อมต่ออยู่:
/sys/devices/pci0000:00/0000:00:05.0/virtio2/block/vdaคำว่า virtio ใน path ดังกล่าวคือคำตอบสำหรับขั้นตอนนี้ อุปกรณ์ NVMe จะแสดง path ที่มีคำว่า nvme เช่น /sys/devices/pci0000:00/0000:01:00.0/nvme/nvme0/nvme0n1 ส่วนดิสก์แบบ ATA ที่เชื่อมต่อโดยตรงจะแสดง path ที่มีคำว่า ata1 นี่เป็นข้อมูลชุดเดียวกับที่ lsblk แสดงไว้ โดยดึงมาจากเคอร์เนลโดยตรงแทนที่จะเป็นคอลัมน์ที่จัดรูปแบบไว้แล้ว ซึ่งจะมีประโยชน์ในกรณีที่ฟิลด์ TRAN ว่างเปล่า
ขั้นตอนที่ 3: สอบถาม nvme-cli และบัส 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 จะแสดงผลลัพธ์หนึ่งแถวต่อหนึ่ง namespace พร้อมด้วยหมายเลขซีเรียลของคอนโทรลเลอร์, สตริงรุ่น และเวอร์ชันของเฟิร์มแวร์ หากตารางว่างเปล่าหมายความว่าไม่มีอุปกรณ์ NVMe ใดถูกเปิดเผยมายัง guest ของคุณ ส่วน lspci หากไม่แสดงบรรทัดใดที่ตรงกัน ก็เป็นการยืนยันในลักษณะเดียวกันจากอีกฝั่งว่า บัส PCI เสมือนที่ guest มองเห็นนั้นไม่มีคอนโทรลเลอร์ NVMe อยู่ ผลลัพธ์ที่ว่างเปล่าทั้งสองกรณีถือเป็นเรื่องปกติบน VPS แบบ virtio และไม่ใช่หลักฐานว่าโฮสต์ไม่มีไดรฟ์ NVMe แต่อย่างใด
หากมี namespace ปรากฏขึ้น nvme-cli จะสามารถทำงานได้มากกว่านั้น sudo nvme id-ctrl /dev/nvme0 จะแสดงข้อมูลระบุตัวตนของคอนโทรลเลอร์ และ sudo nvme smart-log /dev/nvme0n1 จะแสดงอุณหภูมิ, จำนวนชั่วโมงที่เปิดใช้งาน และเปอร์เซ็นต์ของความทนทานต่อการเขียนที่ถูกใช้งานไปแล้ว ให้รันคำสั่งเหล่านี้เฉพาะเมื่อ nvme list แสดงรายการอุปกรณ์ออกมาจริงเท่านั้น เนื่องจากทั้งสองคำสั่งจำเป็นต้องใช้โหนด /dev/nvme* ที่มีอยู่จริงในการเปิดใช้งาน
เหตุใดโฮสต์ที่เป็น NVMe แท้ๆ จึงยังแสดงผลเป็น /dev/vda
Hypervisor เป็นผู้กำหนดว่า guest จะมองเห็นอุปกรณ์ในรูปแบบใด ซึ่งการเลือกนี้ไม่ขึ้นอยู่กับสื่อบันทึกข้อมูลที่อยู่เบื้องล่าง โดยทั่วไปมีรูปแบบที่พบบ่อย 3 แบบดังนี้:
- virtio-blk หรือ virtio-scsi ที่ทำงานอยู่บนไฟล์, logical volume หรือ ZFS dataset ซึ่งจัดเก็บอยู่บนไดรฟ์ NVMe คุณจะเห็น
vdaหรือsdaแม้ว่าที่เก็บข้อมูลจะเป็น NVMe แต่ guest ไม่มีทางทราบข้อมูลนี้ได้ - ตัวควบคุม NVMe แบบจำลอง (emulated NVMe controller) ที่อยู่หน้าอุปกรณ์จัดเก็บข้อมูลใดๆ ก็ตาม คุณจะเห็น
nvme0n1แม้ว่าข้อมูลจะถูกเขียนลงบน SATA array หรือ network volume ที่อยู่ห่างออกไปสองตู้แร็คก็ตาม - PCIe passthrough ซึ่งโฮสต์จะส่งมอบตัวควบคุมทางกายภาพให้กับ guest หนึ่งเครื่องโดยตรง คุณจะเห็น
nvme0n1ของจริงพร้อมชื่อรุ่นที่ถูกต้อง ซึ่งกรณีนี้พบได้น้อยในแผน VPS แบบใช้ทรัพยากรร่วมกัน เนื่องจากตัวการ์ดจะถูกผูกขาดไว้กับลูกค้าเพียงรายเดียวเท่านั้น
ดังนั้น ชื่ออุปกรณ์อาจทำให้คุณเข้าใจผิดได้ทั้งสองทิศทาง ยิ่งไปกว่านั้น โฮสต์อาจใส่ write-back cache, RAID layer หรือ network volume แบบจำลองไว้ระหว่างการเขียนข้อมูลของคุณกับหน่วยความจำแฟลช ซึ่งแต่ละชั้นจะส่งผลต่อประสิทธิภาพที่คุณได้รับโดยที่ชื่อใน /sys ไม่เปลี่ยนแปลงเลย นี่คือเหตุผลว่าทำไมชื่ออุปกรณ์จึงเป็นเพียงจุดเริ่มต้นไม่ใช่จุดสิ้นสุดในการตรวจสอบ หากคุณกำลังเลือกแผนบริการ ความแตกต่างระหว่างที่เก็บข้อมูลแบบ NVMe และ SATA SSD จะอธิบายว่าแต่ละระดับนั้นคุ้มค่าต่อการจ่ายเงินอย่างไร
การทดสอบที่ตรงไปตรงมาที่สุดคือค่า latency ดังนั้นควรวัดค่านี้
fio (flexible I/O tester) จะทำการอ่านข้อมูลจริงจากไฟล์จริงและรายงานว่าแต่ละครั้งใช้เวลานานเท่าใด การอ่านแบบสุ่มขนาดเล็ก (small random reads) คือภาระงานที่เหมาะสมสำหรับการทดสอบนี้ เพราะเป็นการแสดงให้เห็นถึงระยะเวลาการรับส่งข้อมูลไปยังสื่อบันทึกข้อมูลจริงและไม่สามารถใช้การอ่านล่วงหน้า (read-ahead) มาช่วยได้
ขั้นแรกให้สร้างไฟล์ทดสอบและพิสูจน์ว่าระบบไฟล์นี้รองรับการทำ unbuffered I/O หรือไม่ --direct=1 จะเปิดไฟล์ด้วย O_DIRECT ซึ่งเป็นการข้ามการทำงานของ page cache หากไม่มีการตั้งค่านี้ คุณจะกำลังวัดความเร็วของ RAM ของคุณเองและได้ตัวเลขที่ไม่มีดิสก์ตัวใดทำได้
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"หากผลลัพธ์แสดงข้อความปฏิเสธ แสดงว่า path ที่คุณเลือกอยู่บนระบบไฟล์ที่ไม่รองรับ O_DIRECT ระบบไฟล์แบบ container overlay และระบบไฟล์เครือข่ายบางประเภทมีพฤติกรรมเช่นนี้ ให้เลือกไดเรกทอรีบนระบบไฟล์ root ของ VPS แล้วลองใหม่อีกครั้ง หากผลลัพธ์แสดงความสำเร็จ ให้เริ่มการวัดผล:
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.tmpการรันคำสั่งนี้ถูกจำกัดไว้โดยเจตนา: 1 งาน, queue depth 1, ระยะเวลา 20 วินาที, ข้อมูล 256 MB การทดสอบนี้จะไม่ทำให้ดิสก์ของคุณเต็มและจะไม่ทำให้คุณถูกระงับการใช้งานเนื่องจากละเมิดกฎ การตั้งค่า queue depth 1 เป็นค่าที่ตรงไปตรงมาที่สุดสำหรับคำถามนี้ เพราะการใช้ queue ลึกจะทำให้อุปกรณ์ที่ช้าสามารถซ่อนประสิทธิภาพที่แท้จริงไว้เบื้องหลังการทำงานแบบขนาน ในขณะที่ค่า latency จริงยังคงสูงอยู่
การอ่านผลลัพธ์จาก fio
มีสองบรรทัดที่สำคัญ บรรทัดสรุปจะมีลักษณะเหมือน read: IOPS=9012, BW=35.2MiB/s และใต้บรรทัดนั้น fio จะพิมพ์บล็อก clat ออกมา clat คือค่าความหน่วงในการทำงานให้เสร็จสิ้น (completion latency) ซึ่งเป็นเวลาตั้งแต่ที่ fio ส่งคำสั่งอ่านข้อมูลไปจนถึงตอนที่ kernel ส่งข้อมูลกลับมา ให้ดูที่ค่า avg จากนั้นให้ดูค่าเปอร์เซ็นไทล์ที่ 99.00th ในรายการ clat percentiles ค่าเฉลี่ยจะบอกให้คุณทราบถึงระดับของอุปกรณ์จัดเก็บข้อมูล ส่วนค่าเปอร์เซ็นไทล์ที่ 99 จะบอกว่าคุณต้องรอคิวจากเพื่อนบ้านที่อยู่บนโฮสต์เดียวกันบ่อยแค่ไหน
fio จะแสดงค่าความหน่วงเป็นไมโครวินาทีเมื่อค่ามีขนาดเล็ก และจะเปลี่ยนเป็นมิลลิวินาทีเมื่อค่ามีขนาดใหญ่ขึ้น ให้ตรวจสอบหน่วยที่แสดงในบรรทัดก่อนหน้าทุกครั้งก่อนที่จะเปรียบเทียบค่าใดๆ
ตัวเลขใดที่ใช้แยกประเภท NVMe ออกจาก SATA
ตัวเลขด้านล่างนี้เป็นค่ามาตรฐานที่เผยแพร่สำหรับการอ่านแบบสุ่มขนาด 4k งานเดียวที่ queue depth 1 ซึ่งรวบรวมจากเอกสารของผู้ผลิตและผลการทดสอบจากชุมชน ณ เดือนสิงหาคม 2026 ค่าเหล่านี้เป็นเพียงเกณฑ์สำหรับใช้เปรียบเทียบ ไม่ใช่ค่าที่วัดได้จากเซิร์ฟเวอร์ของคุณโดยตรง
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"
}
]local NVMe volume หนึ่งชุดจะตอบสนองการอ่านแบบสุ่มขนาด 4k หนึ่งครั้งโดยใช้เวลาประมาณ 110 ไมโครวินาที และทำ IOPS ได้ประมาณ 9,000 ที่ queue depth 1 ส่วน local SATA SSD จะอยู่ที่ประมาณ 320 ไมโครวินาที และ 3,100 IOPS สำหรับ network attached block storage จะอยู่ที่ประมาณ 900 ไมโครวินาที และ 1,100 IOPS เนื่องจากทุกการอ่านจะต้องผ่าน network hop ก่อนที่จะเข้าถึงหน่วยความจำแฟลช
ที่ queue depth 1 ทั้งสองคอลัมน์นี้คือข้อเท็จจริงเดียวกันที่ถูกนำเสนอสองรูปแบบ การอ่านทีละหนึ่งรายการหมายความว่า throughput คือค่าหนึ่งหารด้วย latency หากค่าเฉลี่ยของคุณใกล้เคียงกับ 110 มากกว่า 320 ไมโครวินาที แสดงว่าคุณกำลังใช้งาน storage ระดับ NVMe ไม่ว่า lsblk จะระบุชื่ออุปกรณ์ไว้อย่างไรก็ตาม หากค่าที่ได้ใกล้เคียงกับ 900 ไมโครวินาที แสดงว่ามีบางอย่างที่ช้ากว่า local flash อยู่ในเส้นทางการเชื่อมต่อ และคำว่า NVMe ในหน้าสั่งซื้อนั้นกำลังอธิบายถึงไดรฟ์ของโฮสต์ ไม่ใช่ volume ของคุณ
รันคำสั่งมากกว่าหนึ่งครั้งก่อนแจ้งปัญหา
การรันเพียงครั้งเดียวถือเป็นเพียงตัวอย่าง ไม่ใช่ผลลัพธ์ที่แท้จริง VPS มีการแชร์ดิสก์ร่วมกัน ดังนั้นเพื่อนบ้านที่ใช้งานหนักอาจทำให้ latency ของคุณเพิ่มขึ้นเป็นสองเท่าในช่วงสิบนาทีแล้วหายไป นอกจากนี้บางแพลตฟอร์มยังให้ burst credits ซึ่งทำให้ช่วงนาทีแรกของการทดสอบดูดีเกินจริง ให้รันคำสั่งเดิมซ้ำสามหรือสี่ครั้งในเวลาที่ต่างกันของวัน แล้วเปรียบเทียบผลลัพธ์ที่แย่ที่สุดแทนที่จะดูผลลัพธ์ที่ดีที่สุด การรันที่แย่เพียงครั้งเดียวอาจเป็นแค่สภาพแวดล้อมชั่วคราว แต่รูปแบบที่เกิดขึ้นซ้ำๆ คือข้อผิดพลาดที่ควรเปิด support ticket และ ticket จะมีน้ำหนักมากขึ้นหากแนบผลลัพธ์จาก fio ที่มี timestamp กำกับไว้ 3 ชุด สำหรับภาพรวมที่ครอบคลุมทั้ง CPU และ network รวมถึงดิสก์ การรัน VPS benchmark เต็มรูปแบบ จะใช้หลักการเดียวกันนี้กับระบบย่อยอื่นๆ
สิ่งที่ควรทำเมื่อได้คำตอบ
หากค่า latency อยู่ในเกณฑ์ของ NVMe ไม่ต้องกังวลเรื่องชื่ออุปกรณ์และดำเนินการในขั้นตอนถัดไป vda ไม่ใช่การลดระดับประสิทธิภาพ แต่มันคือไดรเวอร์ virtual disk ที่เร็วที่สุดที่โฮสต์ส่วนใหญ่มีให้ และเป็นสิ่งที่คุณควรเลือกใช้
หากค่า latency อยู่ในเกณฑ์ของ network storage ทั้งที่แพ็กเกจระบุว่าเป็น local NVMe คุณจะมีข้อเรียกร้องที่ชัดเจนและทำซ้ำได้ นั่นคือคำสั่ง fio ที่ใช้, ค่าเฉลี่ยของ completion latency และช่วงเวลาที่คุณทดสอบ ข้อมูลเหล่านี้ควรใช้สำหรับเปิด support ticket แทนการโต้เถียงในฟอรัม ก่อนที่คุณจะส่งข้อมูล ให้ตรวจสอบว่าดิสก์ไม่ได้เต็มหรือมีการกระจายตัวของข้อมูล (fragmentation) อย่างหนัก และตรวจสอบว่าไม่มีกระบวนการใดในเครื่องกำลังเขียนข้อมูลลงดิสก์อย่างหนักในขณะที่คุณทดสอบ
ให้ทำการตรวจสอบนี้ในวันที่คุณเริ่มใช้งานเซิร์ฟเวอร์ ไม่ใช่รอจนกว่าจะรู้สึกว่าเครื่องทำงานช้า เพื่อให้คุณมีค่าพื้นฐาน (baseline) ไว้เปรียบเทียบในภายหลัง ขั้นตอนนี้ควรเป็นส่วนหนึ่งของ สิบนาทีแรกบน VPS ใหม่ ควบคู่ไปกับการตั้งค่า firewall และ SSH keys หากความแตกต่างระหว่างระดับของที่เก็บข้อมูลยังคงไม่ชัดเจน สิ่งที่ SSD VPS มอบให้คุณจริงๆ จะครอบคลุมเนื้อหาพื้นฐานในส่วนนี้
FAQ
ทำไม lsblk ถึงแสดงผลเป็น /dev/vda ทั้งที่โฮสต์โฆษณาว่าเป็น NVMe?
เพราะ vda เป็นชื่อของไดรเวอร์ virtio-blk ในระบบ guest ไม่ใช่ฮาร์ดแวร์บนโฮสต์ ตัวไฮเปอร์ไวเซอร์ KVM จะนำเสนออุปกรณ์บล็อกแบบ paravirtual ที่มีไฟล์, logical volume หรือ dataset เป็นเบื้องหลัง ซึ่งที่เก็บข้อมูลเหล่านั้นอาจอยู่บนไดรฟ์ NVMe โดยที่ guest ไม่จำเป็นต้องรับรู้ ชื่อดังกล่าวจึงอธิบายถึงชั้นการทำ virtualization เท่านั้น การวัดค่า latency เท่านั้นที่จะระบุประเภทของสื่อบันทึกข้อมูลได้
ค่า rotational เป็น 0 พิสูจน์ได้หรือไม่ว่าฉันใช้ดิสก์ NVMe?
ไม่ได้ /sys/block/<dev>/queue/rotational ที่มีค่า 0 หมายความว่าเคอร์เนลไม่เชื่อว่าอุปกรณ์ดังกล่าวมีจานหมุน และภายใต้ virtio ค่านี้จะถูกกำหนดโดย feature bit ที่โฮสต์เลือกไว้ มันเพียงแค่ช่วยตัดความเป็นไปได้ว่าเป็นฮาร์ดดิสก์แบบจานหมุนทั่วไปเท่านั้น แต่ไม่สามารถแยกความแตกต่างระหว่าง NVMe กับ SATA SSD หรือระหว่างแฟลชในเครื่องกับโวลุ่มบนเครือข่ายได้ การพบค่า 1 ยังคงเป็นสิ่งที่ควรพิจารณา เพราะมันขัดแย้งกับแผนการใช้งานที่ระบุว่าเป็น solid state storage
ทำไม nvme list ถึงว่างเปล่าบน VPS ของฉัน?
เพราะไม่มี NVMe controller ถูกเปิดเผยให้ guest ของคุณเห็น ทั้ง nvme list และ lspci ต่างอ่านค่าจากสิ่งที่เครื่องเสมือนมองเห็นได้ และดิสก์แบบ virtio-blk หรือ virtio-scsi ไม่ได้นำเสนอ NVMe controller ให้ระบบระบุได้ ตารางที่ว่างเปล่าเป็นผลลัพธ์ปกติสำหรับ VPS ส่วนใหญ่ และไม่ใช่หลักฐานว่าโฮสต์ไม่มีไดรฟ์ NVMe ให้ติดตั้ง nvme-cli ด้วย sudo apt install -y nvme-cli และคาดหวังว่าจะพบตารางว่างเปล่า เว้นแต่จะมีการทำ controller pass-through
ผลลัพธ์จาก fio แบบใดที่ถือว่าเป็นที่เก็บข้อมูลระดับ NVMe?
ที่ queue depth 1 สำหรับการอ่านแบบสุ่มขนาด 4k และ --direct=1 ค่าความหน่วงเฉลี่ย (average completion latency) ที่ใกล้เคียงกับ 110 ไมโครวินาทีถือว่าเป็นระดับ NVMe ซึ่งจะได้ค่าประมาณ 9,000 IOPS ส่วนค่าที่อยู่ประมาณ 320 ไมโครวินาทีบ่งชี้ว่าเป็น SATA SSD และค่าที่อยู่ประมาณ 900 ไมโครวินาทีบ่งชี้ว่าเป็นที่เก็บข้อมูลบนเครือข่าย ซึ่งการอ่านแต่ละครั้งต้องผ่าน network hop นี่คือช่วงค่ามาตรฐานที่เผยแพร่สำหรับเดือนสิงหาคม 2026 ดังนั้นให้เปรียบเทียบในเชิงลำดับขนาดมากกว่าตัวเลขที่แม่นยำ และควรทดสอบซ้ำในเวลาที่ต่างกันก่อนสรุปผล