Adding a burstable VM family with an ability to place multiple VMs in once slice. The two VM sizes we are starting with are:
- burstable-1 - 1 vcpu, 2GB of memory; internally it is limited to 50% of 1 CPU with an ability to burst up to full 100%.
- burstable-2 - 2 vcpus, 4GB of memory; internally it is limited to 100% of CPU with an ability to burst up to 200%.
Both sizes of Burstable VMs are placed in a VmHostSlice allocated for 1 core or 2 CPUs on x64, and 2 cores or 2 CPUs on amd64. Multiple VM instances can be placed inside that slice, up to the 200% CPU capacity. It could be 2 burstable-2s or 4 burstable-1s, or a combination. VMs from multiple customers can share a slice. The VMs running in the same slice are competing for the space to burst into, while having a guaranteed resources for their regular CPU limit. The memory is not shared.
The allocator is updated to select hosts that may be fully used but have some space in existing slices and the VmHostSliceAllocator decides if an existing slice can be reused or a new one needs o be created, for each host. The hosts where an existing slice can be used are preferred.
`cloud_hypervisor_cpu_topology` had to be updated to allow for a 1 vcpu topology. Existing code could not handle that.
We introduce a concept of VmFamilies in Options.rb, which will be expanded upon in subsequent commits to help with UI changes. The VmFamilies also includes a concept of slice overcommit, which permits us to create VM families that place more VM instances into a slice than what normal CPU limit would allow.