From: ray <honglei.wang@smartx.com>
Signed-off-by: ray <honglei.wang@smartx.com>
---
.../disk-nvme-ns-device.x86_64-latest.args | 36 +++++++++++++++++++
.../disk-nvme-ns-device.x86_64-latest.xml | 42 ++++++++++++++++++++++
tests/qemuxmlconfdata/disk-nvme-ns-device.xml | 41 +++++++++++++++++++++
tests/qemuxmlconftest.c | 1 +
4 files changed, 120 insertions(+)
create mode 100644 tests/qemuxmlconfdata/disk-nvme-ns-device.x86_64-latest.args
create mode 100644 tests/qemuxmlconfdata/disk-nvme-ns-device.x86_64-latest.xml
create mode 100644 tests/qemuxmlconfdata/disk-nvme-ns-device.xml
diff --git a/tests/qemuxmlconfdata/disk-nvme-ns-device.x86_64-latest.args b/tests/qemuxmlconfdata/disk-nvme-ns-device.x86_64-latest.args
new file mode 100644
index 0000000000..d5971a4407
--- /dev/null
+++ b/tests/qemuxmlconfdata/disk-nvme-ns-device.x86_64-latest.args
@@ -0,0 +1,36 @@
+LC_ALL=C \
+PATH=/bin \
+HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1 \
+USER=test \
+LOGNAME=test \
+XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.local/share \
+XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.cache \
+XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \
+/usr/bin/qemu-system-x86_64 \
+-name guest=QEMUGuest1,debug-threads=on \
+-S \
+-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes"}' \
+-machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=off \
+-accel tcg \
+-cpu qemu64 \
+-m size=219136k \
+-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \
+-overcommit mem-lock=off \
+-smp 1,sockets=1,cores=1,threads=1 \
+-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
+-display none \
+-no-user-config \
+-nodefaults \
+-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \
+-mon chardev=charmonitor,id=monitor,mode=control \
+-rtc base=utc \
+-no-shutdown \
+-boot strict=on \
+-device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0x2"}' \
+-device '{"driver":"virtio-scsi-pci","id":"scsi0","bus":"pci.0","addr":"0x3"}' \
+-device '{"driver":"nvme","id":"nvme0","serial":"nvme-controller-abcdef","bus":"pci.0","addr":"0x5"}' \
+-blockdev '{"driver":"file","filename":"/tmp/data-1.img","node-name":"libvirt-1-storage","read-only":false}' \
+-device '{"driver":"nvme-ns","bus":"nvme0","drive":"libvirt-1-storage","id":"nvme-ns0-0-0","bootindex":1}' \
+-audiodev '{"id":"audio1","driver":"none"}' \
+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
+-msg timestamp=on
diff --git a/tests/qemuxmlconfdata/disk-nvme-ns-device.x86_64-latest.xml b/tests/qemuxmlconfdata/disk-nvme-ns-device.x86_64-latest.xml
new file mode 100644
index 0000000000..6074ede8fd
--- /dev/null
+++ b/tests/qemuxmlconfdata/disk-nvme-ns-device.x86_64-latest.xml
@@ -0,0 +1,42 @@
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219136</memory>
+ <currentMemory unit='KiB'>219136</currentMemory>
+ <vcpu placement='static'>1</vcpu>
+ <os>
+ <type arch='x86_64' machine='pc'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <cpu mode='custom' match='exact' check='none'>
+ <model fallback='forbid'>qemu64</model>
+ </cpu>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
+ <disk type='file' device='disk'>
+ <driver name='qemu' type='raw'/>
+ <source file='/tmp/data-1.img'/>
+ <target dev='nvmensa' bus='nvme-ns'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+ </disk>
+ <controller type='usb' index='0' model='piix3-uhci'>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
+ </controller>
+ <controller type='pci' index='0' model='pci-root'/>
+ <controller type='scsi' index='0' model='virtio-scsi'>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
+ </controller>
+ <controller type='nvme' index='0'>
+ <serial>nvme-controller-abcdef</serial>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
+ </controller>
+ <input type='mouse' bus='ps2'/>
+ <input type='keyboard' bus='ps2'/>
+ <audio id='1' type='none'/>
+ <memballoon model='none'/>
+ </devices>
+</domain>
diff --git a/tests/qemuxmlconfdata/disk-nvme-ns-device.xml b/tests/qemuxmlconfdata/disk-nvme-ns-device.xml
new file mode 100644
index 0000000000..88bb5956e5
--- /dev/null
+++ b/tests/qemuxmlconfdata/disk-nvme-ns-device.xml
@@ -0,0 +1,41 @@
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219136</memory>
+ <currentMemory unit='KiB'>219136</currentMemory>
+ <vcpu placement='static'>1</vcpu>
+ <os>
+ <type arch='x86_64' machine='pc'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <cpu mode='custom' match='exact' check='none'>
+ <model fallback='forbid'>qemu64</model>
+ </cpu>
+ <clock offset='utc'/>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <devices>
+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
+ <disk type='file' device='disk'>
+ <source file='/tmp/data-1.img'/>
+ <target dev='nvmensa' bus='nvme-ns'/>
+ <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+ </disk>
+ <controller type='usb' index='0' model='piix3-uhci'>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
+ </controller>
+ <controller type='pci' index='0' model='pci-root'/>
+ <controller type='scsi' index='0' model='virtio-scsi'>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
+ </controller>
+ <controller type='nvme' index='0'>
+ <serial>nvme-controller-abcdef</serial>
+ <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
+ </controller>
+ <input type='mouse' bus='ps2'/>
+ <input type='keyboard' bus='ps2'/>
+ <audio id='1' type='none'/>
+ <memballoon model='none'/>
+ </devices>
+</domain>
diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c
index be2fba9e4d..580860835b 100644
--- a/tests/qemuxmlconftest.c
+++ b/tests/qemuxmlconftest.c
@@ -1606,6 +1606,7 @@ mymain(void)
DO_TEST_CAPS_LATEST("disk-network-ssh");
DO_TEST_CAPS_LATEST("disk-no-boot");
DO_TEST_CAPS_LATEST("disk-nvme");
+ DO_TEST_CAPS_LATEST("disk-nvme-ns-device");
DO_TEST_CAPS_LATEST("disk-vhostuser-numa");
DO_TEST_CAPS_LATEST("disk-vhostuser");
DO_TEST_CAPS_ARCH_LATEST_FULL("disk-vhostvdpa", "x86_64",
--
2.11.0
On Sun, Apr 27, 2025 at 19:48:06 +0800, honglei.wang@smartx.com wrote:
> From: ray <honglei.wang@smartx.com>
>
> Signed-off-by: ray <honglei.wang@smartx.com>
> ---
> .../disk-nvme-ns-device.x86_64-latest.args | 36 +++++++++++++++++++
> .../disk-nvme-ns-device.x86_64-latest.xml | 42 ++++++++++++++++++++++
> tests/qemuxmlconfdata/disk-nvme-ns-device.xml | 41 +++++++++++++++++++++
> tests/qemuxmlconftest.c | 1 +
> 4 files changed, 120 insertions(+)
> create mode 100644 tests/qemuxmlconfdata/disk-nvme-ns-device.x86_64-latest.args
> create mode 100644 tests/qemuxmlconfdata/disk-nvme-ns-device.x86_64-latest.xml
> create mode 100644 tests/qemuxmlconfdata/disk-nvme-ns-device.xml
>
> diff --git a/tests/qemuxmlconfdata/disk-nvme-ns-device.x86_64-latest.args b/tests/qemuxmlconfdata/disk-nvme-ns-device.x86_64-latest.args
> new file mode 100644
> index 0000000000..d5971a4407
> --- /dev/null
> +++ b/tests/qemuxmlconfdata/disk-nvme-ns-device.x86_64-latest.args
> @@ -0,0 +1,36 @@
[...]
> +-device '{"driver":"nvme","id":"nvme0","serial":"nvme-controller-abcdef","bus":"pci.0","addr":"0x5"}' \
> +-blockdev '{"driver":"file","filename":"/tmp/data-1.img","node-name":"libvirt-1-storage","read-only":false}' \
> +-device '{"driver":"nvme-ns","bus":"nvme0","drive":"libvirt-1-storage","id":"nvme-ns0-0-0","bootindex":1}' \
Hmm, does bootindex even work here? Shouldn't the bootindex apply to the
controller instead?
[...]
> diff --git a/tests/qemuxmlconfdata/disk-nvme-ns-device.xml b/tests/qemuxmlconfdata/disk-nvme-ns-device.xml
> new file mode 100644
> index 0000000000..88bb5956e5
> --- /dev/null
> +++ b/tests/qemuxmlconfdata/disk-nvme-ns-device.xml
> @@ -0,0 +1,41 @@
> +<domain type='qemu'>
> + <name>QEMUGuest1</name>
> + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
> + <memory unit='KiB'>219136</memory>
> + <currentMemory unit='KiB'>219136</currentMemory>
> + <vcpu placement='static'>1</vcpu>
> + <os>
> + <type arch='x86_64' machine='pc'>hvm</type>
> + <boot dev='hd'/>
> + </os>
> + <cpu mode='custom' match='exact' check='none'>
> + <model fallback='forbid'>qemu64</model>
> + </cpu>
> + <clock offset='utc'/>
> + <on_poweroff>destroy</on_poweroff>
> + <on_reboot>restart</on_reboot>
> + <on_crash>destroy</on_crash>
> + <devices>
> + <emulator>/usr/bin/qemu-system-x86_64</emulator>
> + <disk type='file' device='disk'>
> + <source file='/tmp/data-1.img'/>
> + <target dev='nvmensa' bus='nvme-ns'/>
So since the controller type is 'nvme' the value of 'bus' ought to be
'nvme' as well instead of 'nvme-ns'. Same way as we have with 'scsi'.
I also thing that the prefix of dev should be just 'nvme'. Note that the
dev prefix is a libvirt identifier which may (and in this case will not)
be same as in the guest.
Also since the controller supports multiple namespaces please add an
example which does so.
> + <address type='drive' controller='0' bus='0' target='0' unit='0'/>
> + </disk>
> + <controller type='usb' index='0' model='piix3-uhci'>
> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
> + </controller>
> + <controller type='pci' index='0' model='pci-root'/>
> + <controller type='scsi' index='0' model='virtio-scsi'>
> + <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
> + </controller>
> + <controller type='nvme' index='0'>
> + <serial>nvme-controller-abcdef</serial>
[1]
Indentation of the XML is incorrect here.
> + <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
> + </controller>
Also since multiple nvme controllers are possible please add an example
without serial. As noted above at least one of the examples ought to
have multiple namespaces to show the setup.
> + <input type='mouse' bus='ps2'/>
> + <input type='keyboard' bus='ps2'/>
> + <audio id='1' type='none'/>
> + <memballoon model='none'/>
> + </devices>
> +</domain>
> > Hmm, does bootindex even work here? Shouldn't the bootindex apply to the > controller instead? > Both nvme and nvme-ns devices can have bootindex specified, and the corresponding fw_cfg entries will be generated. I think it's more appropriate for us to specify the boot order at the disk level in libvirt, just like the original design. > > So since the controller type is 'nvme' the value of 'bus' ought to be > 'nvme' as well instead of 'nvme-ns'. Same way as we have with > 'scsi'. > > I also thing that the prefix of dev should be just 'nvme'. Note that the > dev prefix is a libvirt identifier which may (and in this case will not) > be same as in the guest. > I'm fine with changing the bus naming to use nvme. As for the dev prefix, let's discuss that in Martin Kletzander's thread. > > Also since the controller supports multiple namespaces please add an > example which does so. > > > > [1] > > Indentation of the XML is incorrect here. > > > Also since multiple nvme controllers are possible please add an example > without serial. As noted above at least one of the examples ought to > have multiple namespaces to show the setup. OK, I will add the corresponding configuration.
© 2016 - 2025 Red Hat, Inc.