
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 :|