On Mon, Nov 23, 2020 at 03:32:20PM +0100, Michal Prívozník 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. IIUC, the NVME *controller* lives on a PCI bus, and it can have any number of namespaces associated with it. In real hardware the namespaces can be dynamically changed on the fly. So these <disk> elements are the namespaces, not the controller, hence PCI isn't relevant AFAICT except for the <controller> device. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|