Libvirt NVME support

Thanos Makatos thanos.makatos at nutanix.com
Thu Nov 19 10:17:56 UTC 2020


> As a starting point a trivial way to model this in the XML will be:
> 
>     <controller type='nvme' index='1' model='nvme'>
> 
> And then add the storage into it as:
> 
>     <disk type='file' device='disk'>
>       <source dev='/Host/QEMUGuest1.qcow2'/>
>       <target dev='sda' bus='nvme'/>

'target dev' is how the device appears in the guest, right? It should be
something like 'nvme0n1'. I'm  not sure though this is something that we can
put here anyway, I think the guest driver can number controllers arbitrarily.
Maybe we should specify something like BDF? Or is this something QEMU will
have to figure out how to do?

>       <address type='drive' controller='1' bus='0' target='0' unit='0'/>
>     </disk>
> 
>     <disk type='file' device='disk'>
>       <source dev='/Host/QEMUGuest2.qcow2'/>
>       <target dev='sdb' bus='nvme'/>
>       <address type='drive' controller='1' bus='0' target='0' unit='1'/>
>     </disk>
> 
> The 'drive' address here maps the disk to the controller. This example
> uses unit= as the way to specify the namespace ID. Both 'bus' and 'target'
> must be 0.
> 
> You can theoretically also add your own address type if 'drive' doesn't
> look right.
> 
> This model will have problems with hotplug/unplug if the NVMe spec
> doesn't actually allow hotplug of a single namespace into a controller
> as libvirt's hotplug APIs only deal with one element at time.

The NVMe spec does allow hotplug/unplug of namespaces, so libvirt should be
fine supporting this?





More information about the libvir-list mailing list