Skip to main content
  1. Posts/

KVM guest with SSD and NVMe in Libvirt

·3 mins·
libvirt kvm libvirt
Table of Contents

Ketika menjalankan Guest atau VM menggunakan Libvirt, Anda dapat menambahkan disk ke dalam VM dengan tipe Bus seperti IDE, SCSI, SATA, atau yang paling sering digunakan yaitu Virtio.

Pemilihan tipe bus dapat juga tergantung dari device atau OS yang akan digunakan. Misal untuk menambahkan device CD-ROM ke dalam VM, maka Bus yang biasanya dipilih adalah SATA.

Namun seiring bekembangnya teknologi, muncul SSD dan NVMe untuk meningkatkan performa dan efisiensi virtualisasi yang kini dapat ditemukan pada Cloud Provider seperti AWS dan lainnya. Sehingga apakah memungkinkan jika SSD dan NVMe dapat ditambahkan menggunakan virtualisai KVM di Libvirt ?

Berikut pembahasannya.

NVMe drives
#

QEMU support emulating NVMe drive sebagai argumen menggunakan CLI namun Anda tidak dapat menggunakannya secara langsung dengan virt-manager sehingga untuk menambahkan disk baru bertipe nvme maka Anda dapat menambahkan argumen QEMU ke file XML guest libvirt.

Untuk QEMU command line args yang digunakan.

-drive file=nvm.img,if=none,id=nvme1
-device nvme,serial=nvme-1,drive=nvme1
Argumen id dan drive harus sama.

Definisinya pada XML Libvirt menjadi.

  <qemu:commandline xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0">
    <qemu:arg value='-drive'/>
    <qemu:arg value='file=/path/to/nvm.img,format=raw,if=none,id=nvme1'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='nvme,serial=nvme-1,drive=nvme1'/>
  </qemu:commandline>

Untuk baris <qemu:commandline> ditambahkan setelah element </devices>

Simpan konfigurasi XML dan start VM.

Untuk mengecek disk NVMe gunakan perintah lsblk

# lsblk -d -o name,size,type
NAME    SIZE TYPE
vda       5G disk
vdb      20G disk
nvme0n1   8G disk

Atau bisa dengan menginstall package nvme-cli lalu jalankan perintah berikut.

# nvme list
Node                  SN                   Model                                    Namespace Usage                      Format           FW Rev
--------------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1          nvme-1               QEMU NVMe Ctrl                           1           8.59  GB /   8.59  GB    512   B +  0 B   1.0

SSD drives
#

Drive SSD sedikit berbeda karena Anda dapat menambahkan drive seperti biasa namun tipe bus yang dapat digunakan hanya SCSI atau SATA.

<disk type='file'>
  <driver type='qcow2' cache='none'/>
  <source file='/path/to/disk1.qcow2'/>
  <target dev='sdb' bus='scsi'/>
</disk>

Setelah Anda menambahkan atau mengubah tipe bus menjadi SCSI atau SATA, jalankan perintah berikut untuk mengetahui id dari device drive.

virsh qemu-monitor-command --domain domname --hmp --cmd "info qtree"

Cari bagian dev: scsi-hd jika menggunakan bus SCSI.

dev: scsi-hd, id "scsi0-0-0"
  drive = "libvirt-2-format"
  backend_defaults = "auto"
  logical_block_size = 512 (512 B)
  physical_block_size = 512 (512 B)
  min_io_size = 0 (0 B)
  opt_io_size = 0 (0 B)
  discard_granularity = 4096 (4 KiB)
  write-cache = "on"

Saat menggunakan QEMU, command line args yang digunakan adalah.

-set device.scsi0-0-0-0.rotation_rate=1

Untuk definisinya pada XML Libvirt menjadi.

  <qemu:commandline xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0">
    <qemu:arg value='-set'/>
    <qemu:arg value='device.scsi0-0-0-0.rotation_rate=1'/>
  </qemu:commandline>

Selanjutnya untuk memastikan disk adalah SSD gunakan perintah lsblk

lsblk -d -o name,rota

Untuk rotation 0 berarti SSD, lalu rotation 1 adalah non-SSD.

NAME    ROTA
sda        0
sdb        0
nvme0n1    0

Atau bisa juga menggunakan smartctl dengan menginstall package smartmontools

# smartctl -i /dev/sda
smartctl 7.1 2019-12-30 r5022 [x86_64-linux-4.18.0-477.10.1.el8_8.x86_64] (local build)
Copyright (C) 2002-19, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Vendor:               QEMU
Product:              QEMU HARDDISK
Revision:             2.5+
Compliance:           SPC-3
User Capacity:        21,474,836,480 bytes [21.4 GB]
Logical block size:   512 bytes
LU is thin provisioned, LBPRZ=0
Rotation Rate:        Solid State Device
Device type:          disk
Local Time is:        Tue Jan 30 23:38:45 2024 WIB
SMART support is:     Unavailable - device lacks SMART capability.

Reference

Related

QEMU-IMG Cheatsheet
·4 mins
libvirt kvm libvirt
KVM Hypervisor Features
·1 min
libvirt kvm libvirt
Disable Virtualization Engine in Libvirt
·2 mins
libvirt kvm libvirt
Error: Failed to Attach Device, No More Available PCI Slots
·2 mins
libvirt kvm libvirt
Block I/O Tuning in Libvirt
·1 min
libvirt kvm libvirt
Direct Kernel Boot in Libvirt
·2 mins
libvirt libvirt kvm