2. What’s New

The key changes in Virtuozzo 7 are:

  • Virtuozzo 7 is based on RHEL 7 and Kernel 3.10+.
  • Virtuozzo 7 uses the KVM/QEMU hypervisor and enables customers to manage virtual machines via the libvirt API and VirtManager.
  • Containers use cgroups and namespaces that limit, account for, and isolate resource usage as isolated namespaces of a collection of processes. The beancounters interface remains in place for backward compatibility. At the same time, it acts as a proxy for actual cgroups and namespaces implementation.
  • UUIDs are used to identify both virtual machines and containers. With containers, prlctl treats the former VEID parameter as name.
  • VCMMD, the fourth-generation unified memory manager, and vcmmd, a single daemon for managing memory of both virtual machines and containers. Virtuozzo 7 uses memcg. Balancing and configuring memcg limits enables getting the exact overcommit, shadow gangs, swap, page cache overuse Virtuozzo parameters.
  • Virtual machine HDD images are stored in the QCOW2 format.
  • Backups are stored now in QCOW2 format.
  • ReadyKernel (starting from Virtuozzo 7.0 RTM Hotfix 1 and kernel 3.10.0-327.18.2.vz7.15.2). ReadyKernel is a new way of applying kernel updates without the need to reboot the physical server. For comparison, the previous versions of Virtuozzo support rebootless kernel upgrade that delivers a complete new kernel to the server, freezes all running instances, and tries to swap the kernel. While simple, this approach has a significant drawback of having to freeze running containers for a couple of minutes. In turn, ReadyKernel is based on a new upstream technology called kpatch. It does not require freezing running processes as it swaps calls one by one using ftrace. The overall patching process may take longer but end users would see no downtime. In addition, each ReadyKernel update is prepared and tested by kernel engineers.
  • Container live migration via CRIU. In the previous versions of Virtuozzo, most operations performed during migration were done in the kernel space. As a result, the migration process imposed a lot of restrictions. Transfers of running instances were only possible between similar servers with the same kernel version. Any errors during the process could lead to a kernel and physical server crash. To improve upon migration, Virtuozzo launched a new project aiming to move most of the migration code to the user space, make the migration process reliable, and remove excessive restrictions. CRIU (which stands for Checkpoint/Restore in Userspace) became a huge success and is being widely adopted by the open-source community as well as commercial companies. As of today, the most active contributors to the project are engineers working at Ubuntu, Google, and Docker.
  • Libvirt support. Libvirt is an open-source API, daemon, and management tool for managing virtualization platforms. The API is widely used in the orchestration layer of hypervisors for cloud-based solutions. Virtuozzo considers libvirt as a standard API for managing both virtual machines and containers. For demonstration or proof-of-concept purposes, you can use the Virtual Machine Manager to manage Virtuozzo hosts.
  • Any backup (full or incremental) can now be deleted from the backup chain.
  • Virtuozzo provides guest tools for virtual machines that currently allow the following: to execute commands in VMs from the host, to set user passwords, to set and obtain network settings, to change SIDs, to enter VMs.
  • Automatic memory management (technical preview). Virtuozzo 7 features a technical preview of automatic memory management for virtual machines and containers. In older versions of Virtuozzo, overcommitted memory was reclaimed by means of swapping. Now several policies for the vcmmd daemon are available, enabling optimized balancing of VM and container memory in various environments. The policies involve the use of cgroups limits, swap, ballooning for virtual machines, and kernel same-page merging.
  • Memory guarantees. A memory guarantee is a percentage of container or virtual machine’s RAM that said container or VM is guaranteed to have. For virtual machines, the memory guarantee value is set to 80% by default; For containers, the default memory guarantee value is 0%. To change the default value, use the new prlctl set --memguarantee command.
  • Memory hotplugging. The new and improved memory hotplugging techique allows both increasing and reducing virtual machine RAM size on the fly, without the need to reboot the VM. Configured by the command prlctl --mem-hotplug, memory hotplugging is implemented as a combination of ballooning and addition of virtual DIMM slots. When a command to increase VM memory size is run, the memory is first expanded by deflating the VM’s balloon. If fully deflating the balloon is not enough to get the requested memory size, virtual DIMM slots are added. When a command to reduce VM memory size is run, the memory is shrunk by inflating the VM’s balloon. This feature is disabled by default and only supported for virtual machines with at least 1GB of RAM.
  • Kernel same-page merging. To optimize memory usage by virtual machines, Virtuozzo uses a feature of Linux called Kernel Same-Page Merging (KSM). The KSM daemon ksmd periodically scans memory for pages with identical content and merges those into a single page. Said page is marked as copy-on-write (COW), so when its contents are changed by a virtual machine, the kernel creates a new copy for that virtual machine. KSM enables the host to: avoid swapping due to merging of identical pages, run more virtual machines, overcommit virtual machine memory, and speed up RAM and hence certain applications and guest operating systems.