1*8e8a7b6dSSamuel Ortiz- [v0.3.0](#v030) 2*8e8a7b6dSSamuel Ortiz + [Block device offloading](#block-device-offloading) 3*8e8a7b6dSSamuel Ortiz + [Network device backend](#network-device-backend) 4*8e8a7b6dSSamuel Ortiz + [Virtual sockets](#virtual-sockets) 5*8e8a7b6dSSamuel Ortiz + [HTTP based API](#http-based-api) 6*8e8a7b6dSSamuel Ortiz + [Memory mapped virtio transport](#memory-mapped-virtio-transport) 7*8e8a7b6dSSamuel Ortiz + [Paravirtualized IOMMU](#paravirtualized-iommu) 8*8e8a7b6dSSamuel Ortiz + [Ubuntu 19.10](#ubuntu-1910) 9*8e8a7b6dSSamuel Ortiz + [Guest large memory](#guest-large-memory) 107688e6e2SSamuel Ortiz- [v0.2.0](#v020) 11*8e8a7b6dSSamuel Ortiz + [Network device offloading](#network-device-offloading) 12*8e8a7b6dSSamuel Ortiz + [Minimal hardware-reduced ACPI](#minimal-hardware-reduced-acpi) 13*8e8a7b6dSSamuel Ortiz + [Debug I/O port](#debug-i-o-port) 14*8e8a7b6dSSamuel Ortiz + [Improved direct device assignment](#improved-direct-device-assignment) 15*8e8a7b6dSSamuel Ortiz + [Improved shared filesystem](#improved-shared-filesystem) 16*8e8a7b6dSSamuel Ortiz + [Ubuntu bionic based CI](#ubuntu-bionic-based-ci) 177688e6e2SSamuel Ortiz- [v0.1.0](#v010) 18*8e8a7b6dSSamuel Ortiz + [Shared filesystem](#shared-filesystem) 19*8e8a7b6dSSamuel Ortiz + [Initial direct device assignment support](#initial-direct-device-assignment-support) 20*8e8a7b6dSSamuel Ortiz + [Userspace IOAPIC](#userspace-ioapic) 21*8e8a7b6dSSamuel Ortiz + [Virtual persistent memory](#virtual-persistent-memory) 22*8e8a7b6dSSamuel Ortiz + [Linux kernel bzImage](#linux-kernel-bzimage) 23*8e8a7b6dSSamuel Ortiz + [Console over virtio](#console-over-virtio) 24*8e8a7b6dSSamuel Ortiz + [Unit testing](#unit-testing) 25*8e8a7b6dSSamuel Ortiz + [Integration tests parallelization](#integration-tests-parallelization) 26*8e8a7b6dSSamuel Ortiz 27*8e8a7b6dSSamuel Ortiz# v0.3.0 28*8e8a7b6dSSamuel Ortiz 29*8e8a7b6dSSamuel OrtizThis release has been tracked through the [0.3.0 project](https://github.com/intel/cloud-hypervisor/projects/3). 30*8e8a7b6dSSamuel Ortiz 31*8e8a7b6dSSamuel OrtizHighlights for `cloud-hypervisor` version 0.3.0 include: 32*8e8a7b6dSSamuel Ortiz 33*8e8a7b6dSSamuel Ortiz### Block device offloading 34*8e8a7b6dSSamuel Ortiz 35*8e8a7b6dSSamuel OrtizWe continue to work on offloading paravirtualized I/O to external processes, 36*8e8a7b6dSSamuel Ortizand we added support for 37*8e8a7b6dSSamuel Ortiz[vhost-user-blk](https://access.redhat.com/solutions/3394851) backends. 38*8e8a7b6dSSamuel OrtizThis enables `cloud-hypervisor` users to plug a `vhost-user` based block device 39*8e8a7b6dSSamuel Ortizlike [SPDK](https://spdk.io)) into the VMM as their paravirtualized storage 40*8e8a7b6dSSamuel Ortizbackend. 41*8e8a7b6dSSamuel Ortiz 42*8e8a7b6dSSamuel Ortiz### Network device backend 43*8e8a7b6dSSamuel Ortiz 44*8e8a7b6dSSamuel OrtizThe previous release provided support for 45*8e8a7b6dSSamuel Ortiz[vhost-user-net](https://access.redhat.com/solutions/3394851) backends. Now we 46*8e8a7b6dSSamuel Ortizalso provide a TAP based vhost-user-net backend, implemented in Rust. Together 47*8e8a7b6dSSamuel Ortizwith the vhost-user-net device implementation, this will eventually become the 48*8e8a7b6dSSamuel OrtizCloud Hypervisor default paravirtualized networking architecture. 49*8e8a7b6dSSamuel Ortiz 50*8e8a7b6dSSamuel Ortiz### Virtual sockets 51*8e8a7b6dSSamuel Ortiz 52*8e8a7b6dSSamuel OrtizIn order to more efficiently and securely communicate between host and guest, 53*8e8a7b6dSSamuel Ortizwe added an hybrid implementation of the 54*8e8a7b6dSSamuel Ortiz[VSOCK](http://man7.org/linux/man-pages/man7/vsock.7.html) socket address 55*8e8a7b6dSSamuel Ortizfamily over virtio. Credits go to the 56*8e8a7b6dSSamuel Ortiz[Firecracker](https://github.com/firecracker-microvm/firecracker/blob/master/docs/vsock.md) 57*8e8a7b6dSSamuel Ortizproject as our implementation is a copy of theirs. 58*8e8a7b6dSSamuel Ortiz 59*8e8a7b6dSSamuel Ortiz### HTTP based API 60*8e8a7b6dSSamuel Ortiz 61*8e8a7b6dSSamuel OrtizIn anticipation of the need to support asynchronous operations to Cloud 62*8e8a7b6dSSamuel OrtizHypervisor guests (e.g. resources hotplug and guest migration), we added a HTTP 63*8e8a7b6dSSamuel Ortizbased API to the VMM. The API will be more extensively documented during the 64*8e8a7b6dSSamuel Ortiznext release cycle. 65*8e8a7b6dSSamuel Ortiz 66*8e8a7b6dSSamuel Ortiz### Memory mapped virtio transport 67*8e8a7b6dSSamuel Ortiz 68*8e8a7b6dSSamuel OrtizIn order to support potential PCI-free use cases, we added support for the 69*8e8a7b6dSSamuel Ortiz[virtio MMIO](https://docs.oasis-open.org/virtio/virtio/v1.1/cs01/virtio-v1.1-cs01.html#x1-1440002) 70*8e8a7b6dSSamuel Ortiztransport layer. This will allow us to support simple, minimal guest 71*8e8a7b6dSSamuel Ortizconfigurations that do not require a PCI bus emulation. 72*8e8a7b6dSSamuel Ortiz 73*8e8a7b6dSSamuel Ortiz### Paravirtualized IOMMU 74*8e8a7b6dSSamuel Ortiz 75*8e8a7b6dSSamuel OrtizAs we want to improve our nested guests support, we added support for exposing 76*8e8a7b6dSSamuel Ortiza [paravirtualized IOMMU](https://github.com/intel/cloud-hypervisor/blob/master/docs/iommu.md) 77*8e8a7b6dSSamuel Ortizdevice through virtio. This allows for a safer nested virtio and directly 78*8e8a7b6dSSamuel Ortizassigned devices support. 79*8e8a7b6dSSamuel Ortiz 80*8e8a7b6dSSamuel OrtizTo add the IOMMU support, we had to make some CLI changes for Cloud Hypervisor 81*8e8a7b6dSSamuel Ortizusers to be able to specify if devices had to be handled through this virtual 82*8e8a7b6dSSamuel OrtizIOMMU or not. In particular, the `--disk` option now expects disk paths to be 83*8e8a7b6dSSamuel Ortizprefixed with a `path=` string, and supports an optional `iommu=[on|off]` 84*8e8a7b6dSSamuel Ortizsetting. 85*8e8a7b6dSSamuel Ortiz 86*8e8a7b6dSSamuel Ortiz### Ubuntu 19.10 87*8e8a7b6dSSamuel Ortiz 88*8e8a7b6dSSamuel OrtizWith the latest [hypervisor firmware](https://github.com/intel/rust-hypervisor-firmware), 89*8e8a7b6dSSamuel Ortizwe can now support the latest 90*8e8a7b6dSSamuel Ortiz[Ubuntu 19.10 (Eoan Ermine)](http://releases.ubuntu.com/19.10/) cloud images. 91*8e8a7b6dSSamuel Ortiz 92*8e8a7b6dSSamuel Ortiz### Large memory guests 93*8e8a7b6dSSamuel Ortiz 94*8e8a7b6dSSamuel OrtizAfter simplifying and changing our guest address space handling, we can now 95*8e8a7b6dSSamuel Ortizsupport guests with large amount of memory (more than 64GB). 967688e6e2SSamuel Ortiz 97d784ac29SSamuel Ortiz# v0.2.0 98d784ac29SSamuel Ortiz 99d784ac29SSamuel OrtizThis release has been tracked through the [0.2.0 project](https://github.com/intel/cloud-hypervisor/projects/2). 100d784ac29SSamuel Ortiz 101d784ac29SSamuel OrtizHighlights for `cloud-hypervisor` version 0.2.0 include: 102d784ac29SSamuel Ortiz 103d784ac29SSamuel Ortiz### Network device offloading 104d784ac29SSamuel Ortiz 105d784ac29SSamuel OrtizAs part of our general effort to offload paravirtualized I/O to external 106d784ac29SSamuel Ortizprocesses, we added support for 107d784ac29SSamuel Ortiz[vhost-user-net](https://access.redhat.com/solutions/3394851) backends. This 108d784ac29SSamuel Ortizenables `cloud-hypervisor` users to plug a `vhost-user` based networking device 109d784ac29SSamuel Ortiz(e.g. [DPDK](https://dpdk.org)) into the VMM as their virtio network backend. 110d784ac29SSamuel Ortiz 111d784ac29SSamuel Ortiz### Minimal hardware-reduced ACPI 112d784ac29SSamuel Ortiz 113d784ac29SSamuel OrtizIn order to properly implement and guest reset and shutdown, we implemented 114d784ac29SSamuel Ortiza minimal version of the hardware-reduced ACPI specification. Together with 115d784ac29SSamuel Ortiza tiny I/O port based ACPI device, this allows `cloud-hypervisor` guests to 116d784ac29SSamuel Ortizcleanly reboot and shutdown. 117d784ac29SSamuel Ortiz 118d784ac29SSamuel OrtizThe ACPI implementation is a `cloud-hypervisor` build time option that is 119d784ac29SSamuel Ortizenabled by default. 120d784ac29SSamuel Ortiz 121d784ac29SSamuel Ortiz### Debug I/O port 122d784ac29SSamuel Ortiz 123d784ac29SSamuel OrtizBased on the Firecracker idea of using a dedicated I/O port to measure guest 124d784ac29SSamuel Ortizboot times, we added support for logging guest events through the 125d784ac29SSamuel Ortiz[0x80](https://www.intel.com/content/www/us/en/support/articles/000005500/boards-and-kits.html) 126d784ac29SSamuel OrtizPC debug port. This allows, among other things, for granular guest boot time 127d784ac29SSamuel Ortizmeasurements. See our [debug port documentation](https://github.com/intel/cloud-hypervisor/blob/master/docs/debug-port.md) 128d784ac29SSamuel Ortizfor more details. 129d784ac29SSamuel Ortiz 130d784ac29SSamuel Ortiz### Improved direct device assignment 131d784ac29SSamuel Ortiz 132d784ac29SSamuel OrtizWe fixed a major performance issue with our initial VFIO implementation: When 133d784ac29SSamuel Ortizenabling VT-d through the KVM and VFIO APIs, our guest memory writes and reads 134d784ac29SSamuel Ortizwere (in many cases) not cached. After correctly tagging the guest memory from 135d784ac29SSamuel Ortiz`cloud-hypervisor` we're now able to reach the expected performance from 136d784ac29SSamuel Ortizdirectly assigned devices. 137d784ac29SSamuel Ortiz 138d784ac29SSamuel Ortiz### Improved shared filesystem 139d784ac29SSamuel Ortiz 140d784ac29SSamuel OrtizWe added shared memory region with [DAX](https://www.kernel.org/doc/Documentation/filesystems/dax.txt) 141d784ac29SSamuel Ortizsupport to our [virtio-fs](https://virtio-fs.gitlab.io/) shared file system. 142d784ac29SSamuel OrtizThis provides better shared filesystem IO performance with a smaller guest 143d784ac29SSamuel Ortizmemory footprint. 144d784ac29SSamuel Ortiz 145d784ac29SSamuel Ortiz### Ubuntu bionic based CI 146d784ac29SSamuel Ortiz 147d784ac29SSamuel OrtizThanks to our [simple KVM firmware](https://github.com/intel/rust-hypervisor-firmware) 148d784ac29SSamuel Ortizimprovements, we are now able to boot Ubuntu bionic images. We added those to 149d784ac29SSamuel Ortizour CI pipeline. 150d784ac29SSamuel Ortiz 15193b77530SSamuel Ortiz# v0.1.0 15293b77530SSamuel Ortiz 15393b77530SSamuel OrtizThis release has been tracked through the [0.1.0 project](https://github.com/intel/cloud-hypervisor/projects/1). 15493b77530SSamuel Ortiz 15593b77530SSamuel OrtizHighlights for `cloud-hypervisor` version 0.1.0 include: 15693b77530SSamuel Ortiz 15793b77530SSamuel Ortiz### Shared filesystem 15893b77530SSamuel Ortiz 15993b77530SSamuel OrtizWe added support for the [virtio-fs](https://virtio-fs.gitlab.io/) shared file 16093b77530SSamuel Ortizsystem, allowing for an efficient and reliable way of sharing a filesystem 16193b77530SSamuel Ortizbetween the host and the `cloud-hypervisor` guest. 16293b77530SSamuel Ortiz 16393b77530SSamuel OrtizSee our [filesystem sharing](https://github.com/intel/cloud-hypervisor/blob/master/docs/fs.md) 16493b77530SSamuel Ortizdocumentation for more details on how to use virtio-fs with `cloud-hypervisor`. 16593b77530SSamuel Ortiz 16693b77530SSamuel Ortiz### Initial direct device assignment support 16793b77530SSamuel Ortiz 16893b77530SSamuel OrtizVFIO (Virtual Function I/O) is a kernel framework that exposes direct device 16993b77530SSamuel Ortizaccess to userspace. `cloud-hypervisor` uses VFIO to directly assign host 17093b77530SSamuel Ortizphysical devices into its guest. 17193b77530SSamuel Ortiz 17293b77530SSamuel OrtizSee our [VFIO](https://github.com/intel/cloud-hypervisor/blob/master/docs/vfio.md) 17393b77530SSamuel Ortizdocumentation for more detail on how to directly assign host devices to 17493b77530SSamuel Ortiz`cloud-hypervisor` guests. 17593b77530SSamuel Ortiz 17693b77530SSamuel Ortiz### Userspace IOAPIC 17793b77530SSamuel Ortiz 17893b77530SSamuel Ortiz`cloud-hypervisor` supports a so-called split IRQ chip implementation by 17993b77530SSamuel Ortizimplementing support for the [IOAPIC](https://wiki.osdev.org/IOAPIC). 18093b77530SSamuel OrtizBy moving part of the IRQ chip implementation from kernel space to user space, 18193b77530SSamuel Ortizthe IRQ chip emulation does not always run in a fully privileged mode. 18293b77530SSamuel Ortiz 18393b77530SSamuel Ortiz### Virtual persistent memory 18493b77530SSamuel Ortiz 18593b77530SSamuel OrtizThe `virtio-pmem` implementation emulates a virtual persistent memory device 18693b77530SSamuel Ortizthat `cloud-hypervisor` can e.g. boot from. Booting from a `virtio-pmem` device 18793b77530SSamuel Ortizallows to bypass the guest page cache and improve the guest memory footprint. 18893b77530SSamuel Ortiz 18993b77530SSamuel Ortiz### Linux kernel bzImage 19093b77530SSamuel Ortiz 19193b77530SSamuel OrtizThe `cloud-hypervisor` linux kernel loader now supports direct kernel boot from 19293b77530SSamuel Ortiz`bzImage` kernel images, which is usually the format that Linux distributions 19393b77530SSamuel Ortizuse to ship their kernels. For example, this allows for booting from the host 19493b77530SSamuel Ortizdistribution kernel image. 19593b77530SSamuel Ortiz 19693b77530SSamuel Ortiz### Console over virtio 19793b77530SSamuel Ortiz 19893b77530SSamuel Ortiz`cloud-hypervisor` now exposes a `virtio-console` device to the guest. Although 19993b77530SSamuel Ortizusing this device as a guest console can potentially cut some early boot 20093b77530SSamuel Ortizmessages, it can reduce the guest boot time and provides a complete console 20193b77530SSamuel Ortizimplementation. 20293b77530SSamuel Ortiz 20393b77530SSamuel OrtizThe `virtio-console` device is enabled by default for the guest console. 20493b77530SSamuel OrtizSwitching back to the legacy serial port is done by selecting 20593b77530SSamuel Ortiz`--serial tty --console off` from the command line. 20693b77530SSamuel Ortiz 20793b77530SSamuel Ortiz### Unit testing 20893b77530SSamuel Ortiz 20993b77530SSamuel OrtizWe now run all unit tests from all our crates directly from our CI. 21093b77530SSamuel Ortiz 21193b77530SSamuel Ortiz### Integration tests parallelization 21293b77530SSamuel Ortiz 21393b77530SSamuel OrtizThe CI cycle run time has been significantly reduced by refactoring our 21493b77530SSamuel Ortizintegration tests; allowing them to all be run in parallel. 215