Libvirt NVME support

Thanos Makatos thanos.makatos at nutanix.com
Mon Nov 23 09:47:23 UTC 2020


> On Thu, Nov 19, 2020 at 10:17:56 +0000, Thanos Makatos wrote:
> > > 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.
> 
> Well, it was supposed to be like that but really is not. Even with other
> buses the kernel can name the device arbitrarily, so it doesn't really
> matter.
> 
> > 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>

Revistiting your initial suggestion, it should be something like this
(s/sdb/nvme0):

    <disk type='file' device='disk'>
      <source dev='/Host/QEMUGuest2.qcow2'/>
      <target dev='nvme0' 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

IIUC we need a way to associate storage (this XML snippet) with the controller
you defined earlier (<controller type='nvme' index='1' model='nvme'>). So
shouldn't we only require associating this piece of storage with the controller
based on the index?

> > > uses unit= as the way to specify the namespace ID. Both 'bus' and 'target'
> > > must be 0.

I think 'namespace' or 'ns' would be more suitable instead of 'unit'.
What are 'bus' and 'target' here? And why do they have to be 0?
Do we really need dev='nvme0' in <target ...>? Specifying the controller index
should be enough, no?

Wouldn't this contain the minimum amount of information to unambiguously map
this piece of storage to the controller?

    <disk type='file' device='disk'>
      <source dev='/Host/QEMUGuest2.qcow2'/>
      <target dev='sdb' bus='nvme'/>
      <address controller='1' ns='1'/>
    </disk>





More information about the libvir-list mailing list