[PATCHv2 4/5] tests: Add test case for nvme-ns device configuration

honglei.wang@smartx.com posted 5 patches 7 months, 3 weeks ago
[PATCHv2 4/5] tests: Add test case for nvme-ns device configuration
Posted by honglei.wang@smartx.com 7 months, 3 weeks ago
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
Re: [PATCHv2 4/5] tests: Add test case for nvme-ns device configuration
Posted by Peter Krempa via Devel 7 months, 3 weeks ago
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>
Re: [PATCHv2 4/5] tests: Add test case for nvme-ns device configuration
Posted by ray wang 7 months, 1 week ago
> 
> 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.