[libvirt] pci bus slot in libvirt

What's the best way to configure multiple disks in libvirt? How many slots can you have? This is from the xml dump: In some of my configurations, I have this: <disk type='block' device='disk'> <driver name='qemu' type='raw' cache='none' io='native'/> <source dev='/dev/sdb1'/> <target dev='vdb' bus='virtio'/> <alias name='virtio-disk1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </disk> while others are created as such: <devices> <emulator>/usr/bin/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/data2/VMs/libvirt/images/win2k8-1.qcow2'/> <target dev='hda' bus='ide'/> <alias name='ide0-0-0'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk> Which way is better? The top one defines the bus and slot while the bottom defines the controller, bus, target, and unit. BTW, how many slots can we define per bus?

On Tue, Jun 26, 2012 at 01:09:24PM -0700, Fong Vang wrote:
What's the best way to configure multiple disks in libvirt? How many slots can you have? This is from the xml dump:
In some of my configurations, I have this:
<disk type='block' device='disk'> <driver name='qemu' type='raw' cache='none' io='native'/> <source dev='/dev/sdb1'/> <target dev='vdb' bus='virtio'/> <alias name='virtio-disk1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </disk>
With the traditional VirtIO-Block device, the disk controller only accepts a single drive, so each <disk> you add consumes 1 PCI slot. You have a max of 31 PCI slots, of which at most 28 are usable for (PIIX consumes 1, VGA device consumes 1 and Balloon driver consumes 1). Those 28 must be split across everything else, so assuming no NICs or other devices, you have create 28 virtio-block disks.
while others are created as such:
<devices> <emulator>/usr/bin/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/data2/VMs/libvirt/images/win2k8-1.qcow2'/> <target dev='hda' bus='ide'/> <alias name='ide0-0-0'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk>
This is an IDE disk, where the IDE controller consumes the PCI slot, and can support upto 4 drives (hda, hdb, hdc and hdd). So for 1 PCI slot, you get 4 drives, which isn't great.
Which way is better? The top one defines the bus and slot while the bottom defines the controller, bus, target, and unit.
You won't typically choose between IDE and Virtio-Block based on the number of disks. You'll simply always want virtio-block for performance reasons. So there's no real choice of config here. With the latest libvirt, guest kernel and QEMU, there is a new device type known as Virtio-SCSI. In this the Virtio-SCSI controller consumes 1 PCI device and can handle many many many disks. This is the best option for the future for people who need lots of disks.
BTW, how many slots can we define per bus?
With virtio-block, currently 28. If you are willing todo without hotplug support, you can turn on multi-function and increase the number of possible virtio-block devices x7 ie ~196 In the future we'll also have support for PCI bridges, and multiple PCI root complexes, which will increase max # of PCI slots even more. But virtio-SCSI really is the best way in the future. Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|

Very informational. Thank you very much. On Tue, Jun 26, 2012 at 1:51 PM, Daniel P. Berrange <berrange@redhat.com> wrote:
On Tue, Jun 26, 2012 at 01:09:24PM -0700, Fong Vang wrote:
What's the best way to configure multiple disks in libvirt? How many slots can you have? This is from the xml dump:
In some of my configurations, I have this:
<disk type='block' device='disk'> <driver name='qemu' type='raw' cache='none' io='native'/> <source dev='/dev/sdb1'/> <target dev='vdb' bus='virtio'/> <alias name='virtio-disk1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </disk>
With the traditional VirtIO-Block device, the disk controller only accepts a single drive, so each <disk> you add consumes 1 PCI slot. You have a max of 31 PCI slots, of which at most 28 are usable for (PIIX consumes 1, VGA device consumes 1 and Balloon driver consumes 1). Those 28 must be split across everything else, so assuming no NICs or other devices, you have create 28 virtio-block disks.
while others are created as such:
<devices> <emulator>/usr/bin/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/data2/VMs/libvirt/images/win2k8-1.qcow2'/> <target dev='hda' bus='ide'/> <alias name='ide0-0-0'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk>
This is an IDE disk, where the IDE controller consumes the PCI slot, and can support upto 4 drives (hda, hdb, hdc and hdd). So for 1 PCI slot, you get 4 drives, which isn't great.
Which way is better? The top one defines the bus and slot while the bottom defines the controller, bus, target, and unit.
You won't typically choose between IDE and Virtio-Block based on the number of disks. You'll simply always want virtio-block for performance reasons. So there's no real choice of config here.
With the latest libvirt, guest kernel and QEMU, there is a new device type known as Virtio-SCSI. In this the Virtio-SCSI controller consumes 1 PCI device and can handle many many many disks. This is the best option for the future for people who need lots of disks.
BTW, how many slots can we define per bus?
With virtio-block, currently 28.
If you are willing todo without hotplug support, you can turn on multi-function and increase the number of possible virtio-block devices x7 ie ~196
In the future we'll also have support for PCI bridges, and multiple PCI root complexes, which will increase max # of PCI slots even more.
But virtio-SCSI really is the best way in the future.
Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|

On Tue, Jun 26, 2012 at 2:00 PM, Fong Vang <sudoyang@gmail.com> wrote:
Very informational. Thank you very much.
On Tue, Jun 26, 2012 at 1:51 PM, Daniel P. Berrange <berrange@redhat.com> wrote:
On Tue, Jun 26, 2012 at 01:09:24PM -0700, Fong Vang wrote:
What's the best way to configure multiple disks in libvirt? How many slots can you have? This is from the xml dump:
In some of my configurations, I have this:
<disk type='block' device='disk'> <driver name='qemu' type='raw' cache='none' io='native'/> <source dev='/dev/sdb1'/> <target dev='vdb' bus='virtio'/> <alias name='virtio-disk1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </disk>
With the traditional VirtIO-Block device, the disk controller only accepts a single drive, so each <disk> you add consumes 1 PCI slot. You have a max of 31 PCI slots, of which at most 28 are usable for (PIIX consumes 1, VGA device consumes 1 and Balloon driver consumes 1). Those 28 must be split across everything else, so assuming no NICs or other devices, you have create 28 virtio-block disks.
One last question on this. Are there some slots that are reserved? In my setup, there could only be multiple disks and NICs. I'm trying to figure out the best way to structure the different components with respect to slot numbering.
while others are created as such:
<devices> <emulator>/usr/bin/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/data2/VMs/libvirt/images/win2k8-1.qcow2'/> <target dev='hda' bus='ide'/> <alias name='ide0-0-0'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk>
This is an IDE disk, where the IDE controller consumes the PCI slot, and can support upto 4 drives (hda, hdb, hdc and hdd). So for 1 PCI slot, you get 4 drives, which isn't great.
Which way is better? The top one defines the bus and slot while the bottom defines the controller, bus, target, and unit.
You won't typically choose between IDE and Virtio-Block based on the number of disks. You'll simply always want virtio-block for performance reasons. So there's no real choice of config here.
With the latest libvirt, guest kernel and QEMU, there is a new device type known as Virtio-SCSI. In this the Virtio-SCSI controller consumes 1 PCI device and can handle many many many disks. This is the best option for the future for people who need lots of disks.
BTW, how many slots can we define per bus?
With virtio-block, currently 28.
If you are willing todo without hotplug support, you can turn on multi-function and increase the number of possible virtio-block devices x7 ie ~196
In the future we'll also have support for PCI bridges, and multiple PCI root complexes, which will increase max # of PCI slots even more.
But virtio-SCSI really is the best way in the future.
Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|

On 2012年06月27日 05:25, Fong Vang wrote:
On Tue, Jun 26, 2012 at 2:00 PM, Fong Vang<sudoyang@gmail.com> wrote:
Very informational. Thank you very much.
On Tue, Jun 26, 2012 at 1:51 PM, Daniel P. Berrange<berrange@redhat.com> wrote:
On Tue, Jun 26, 2012 at 01:09:24PM -0700, Fong Vang wrote:
What's the best way to configure multiple disks in libvirt? How many slots can you have? This is from the xml dump:
In some of my configurations, I have this:
<disk type='block' device='disk'> <driver name='qemu' type='raw' cache='none' io='native'/> <source dev='/dev/sdb1'/> <target dev='vdb' bus='virtio'/> <alias name='virtio-disk1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </disk>
With the traditional VirtIO-Block device, the disk controller only accepts a single drive, so each<disk> you add consumes 1 PCI slot. You have a max of 31 PCI slots, of which at most 28 are usable for (PIIX consumes 1, VGA device consumes 1 and Balloon driver consumes 1). Those 28 must be split across everything else, so assuming no NICs or other devices, you have create 28 virtio-block disks.
One last question on this. Are there some slots that are reserved?
slot 0, 1, 2 are reserved. You will fail to start the guest anyway if configure the devices using those 3 slot number. :-)
In my setup, there could only be multiple disks and NICs. I'm trying to figure out the best way to structure the different components with respect to slot numbering.
while others are created as such:
<devices> <emulator>/usr/bin/qemu-kvm</emulator> <disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/data2/VMs/libvirt/images/win2k8-1.qcow2'/> <target dev='hda' bus='ide'/> <alias name='ide0-0-0'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> </disk>
This is an IDE disk, where the IDE controller consumes the PCI slot, and can support upto 4 drives (hda, hdb, hdc and hdd). So for 1 PCI slot, you get 4 drives, which isn't great.
Which way is better? The top one defines the bus and slot while the bottom defines the controller, bus, target, and unit.
You won't typically choose between IDE and Virtio-Block based on the number of disks. You'll simply always want virtio-block for performance reasons. So there's no real choice of config here.
With the latest libvirt, guest kernel and QEMU, there is a new device type known as Virtio-SCSI. In this the Virtio-SCSI controller consumes 1 PCI device and can handle many many many disks. This is the best option for the future for people who need lots of disks.
BTW, how many slots can we define per bus?
With virtio-block, currently 28.
If you are willing todo without hotplug support, you can turn on multi-function and increase the number of possible virtio-block devices x7 ie ~196
In the future we'll also have support for PCI bridges, and multiple PCI root complexes, which will increase max # of PCI slots even more.
But virtio-SCSI really is the best way in the future.
Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list
participants (3)
-
Daniel P. Berrange
-
Fong Vang
-
Osier Yang