On Mon, Nov 23, 2020 at 15:32:20 +0100, Michal Privoznik wrote:
On 11/23/20 3:03 PM, Daniel P. Berrangé wrote:
> On Wed, Nov 18, 2020 at 11:24:30AM +0100, Peter Krempa wrote:
> > On Wed, Nov 18, 2020 at 09:57:14 +0000, Thanos Makatos wrote:
> > > > As a separate question, is there any performance benefit of emulating
a
> > > > NVMe controller compared to e.g. virtio-scsi?
> > >
> > > We haven't measured that yet; I would expect it to be slight faster
and/or more
> > > CPU efficient but wouldn't be surprised if it isn't. The main
benefit of using
> > > NVMe is that we don't have to install VirtIO drivers in the guest.
> >
> > Okay, I'm not sold on the drivers bit but that is definitely not a
> > problem in regards of adding support for emulating NVME controllers to
> > libvirt.
> >
> > 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'/>
> > <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.
>
> FWIW, I think that our overloeading of type=drive for FDC, IDE, and SCSI
> was a mistake in retrospect. We should have had type=fdc, type=ide, type=scsi,
> since each uses a different subset of the attributes.
>
> Lets not continue this mistake with NVME - create a type=nvme address
> type.
Don't NVMes live on a PCI(e) bus? Can't we just threat NVMes as PCI devices?
Or are we targeting sata too? Bcause we also have that type of address.
No, the NVMe controller lives on PCIe. Here we are trying to emulate a
NVMe controller (as <contoller> if you look elsewhere in the other
subthread. The <disk> element here maps to individual emulated
namespaces for the emulated NVMe controller.
If we'd try to map one <disk> per PCIe device, you'd prevent us from
emulating multiple namespaces.