
On 11/30/2011 05:54 PM, Daniel P. Berrange wrote:
On Wed, Nov 30, 2011 at 10:06:37AM -0500, Eli Mesika wrote:
http://www.ovirt.org/wiki/Features/Design/StablePCIAddresses
My primary comment on this is that you likely don't want to restrict yourself to PCI addresses.
If RHEVM intends to use virtio-serial controllers you want to maintain stable virtio serial addresses
If RHEVM intends to use CCID smartcard controllers you want to maintain stable CCID device addresses
If RHEVM intends to use SCSI controllers you will want to maintain SCSI drive addresses
If RHEVM intends to use USB controllers you will want to maintain USB device addresses
I think you get the idea :-) In general you can say that every single device listed in the XML will ultimately have an address associated with it. The type address will vary depending on what type of controller the device is attached to.
In addition, when you start dealing with these other non-PCI address types, you will also need to start dealing with controller devices.
eg, if you add a SCSI disk to the XML
<disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/var/lib/libvirt/images/test/disk0.raw'/> <target dev='sda' bus='scsi'/> </disk>
First of all libvirt will want to assign an address to this drive
<disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/var/lib/libvirt/images/test/disk0.raw'/> <target dev='sda' bus='scsi'/> <address type='drive' controller='0' bus='0' unit='0'/> </disk>
Then, if the corresponding controller does not exist already, libvirt will auto-add a controller device, which itself has an address you will need to track:
<controller type='scsi' index='0'> <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> </controller>
In addition, when QEMU gains support for PCI bridges, or multiple PCI root complexes, there will also be the possibility of dealing with multiple PCI controllers in the XML too.
So even if you only implement PCI address support in the first iteration, I'd really encourage you to at least consider how you will cope with the other address types sooner, rather than later.
Regards, Daniel
Hi Eli, - I suggest changing the feature name from stable PCI addresses to stable device addresses, then document which devices are supported. I think the first version includes PCI, VirtIO Serial, SCSI, IDE, CCID, actually anything libvirt supports - right? - I am missing in the documentation the format of the device addresses as interchanged between RHEVM and VDSM, specifically i am interested why use XML and not JSON format for that data. Thanks, Livnat