I think explanation very easy. PCI itself can handle up to 32 devices. If you run lspci inside empty (fresh created) VM - you will see, that 8 slots already occupied [root@test-virtio-blk ~]# lspci 00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02) 00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II] 00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II] 00:01.2 USB controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev 01) 00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03) 00:02.0 VGA compatible controller: Cirrus Logic GD 5446 00:03.0 Ethernet controller: Red Hat, Inc Virtio network device 00:04.0 SCSI storage controller: Red Hat, Inc Virtio block device
[root@test-virtio-blk ~]# lspci | wc -l 8 So, 7 system devices + 1 ROOT disk in current implementation, we used virtio-blk, which can handle only 1 device per instance. So, we have 32-8 == 24 free slots... As Cloudstack support more than 1 eth cards - 8 of them reserved for network cards and 16 available for virtio-blk So, practical limit equal 16 devices (for DATA disks) Why 2 devices (0 + 3) excluded - interesting question... I will try to research and post explanation 2017-02-15 18:27 GMT+02:00 Rafael Weingärtner <rafaelweingart...@gmail.com>: > I hate to say this, but probably no one knows why. > I looked at the history and this method has always being like this. > > The device ID 3 seems to be something reserved, probably for Xen tools (big > guess here)? > > Also, regarding the limit; I could speculate two explanations for the > limit. A developer did not get the full specs and decided to do whatever > he/she wanted. Or, maybe, at the time of coding (long, long time ago) there > was a hypervisor that limited (maybe still limits) the number of devices > that could be plugged to a VM and the first developers decided to level > everything by that spec. > > It may be worth checking with KVM, XenServer, Hyper-V, and VMware if they > have such limitation on disks that can be attached to a VM. If they do not > have, we could remove that, or at least externalize the limit in a > parameter. > > On Wed, Feb 15, 2017 at 5:54 AM, Friðvin Logi Oddbjörnsson < > frid...@greenqloud.com> wrote: > > > CloudStack is currently limiting the number of data volumes, that can be > > attached to an instance, to 14. > > More specifically, this limitation relates to the device ids that > > CloudStack considers valid for data volumes. > > In method VolumeApiServiceImpl.getDeviceId(long, Long), only device ids > 1, > > 2, and 4-15 are considered valid. > > What I would like to know is: is there a reason for this limitation? (of > > not going higher than device id 15) > > > > Note that the current number of attached data volumes is already being > > checked against the maximum number of data volumes per instance, as > > specified by the relevant hypervisor’s capabilities. > > E.g. if the relevant hypervisor’s capabilities specify that it only > > supports 6 data volumes per instance, CloudStack rejects attaching a > > seventh data volume. > > > > > > Friðvin Logi Oddbjörnsson > > > > Senior Developer > > > > Tel: (+354) 415 0200 | frid...@greenqloud.com <jaros...@greenqloud.com> > > > > Mobile: (+354) 696 6528 | PGP Key: 57CA1B00 > > <https://sks-keyservers.net/pks/lookup?op=vindex&search= > > frid...@greenqloud.com> > > > > Twitter: @greenqloud <https://twitter.com/greenqloud> | @qstackcloud > > <https://twitter.com/qstackcloud> > > > > www.greenqloud.com | www.qstack.com > > > > [image: qstack_blue_landscape_byqreenqloud-01.png] > > > > > > -- > Rafael Weingärtner >