xref: /cloud-hypervisor/release-notes.md (revision 94f2fc3308894fe6419a4e17d5a8a25e85101e2c)
1*94f2fc33SRob Bradford- [v0.5.1](#v051)
22f395e60SSamuel Ortiz- [v0.5.0](#v050)
3*94f2fc33SRob Bradford    - [Virtual Machine Dynamic Resizing](#virtual-machine-dynamic-resizing)
4*94f2fc33SRob Bradford    - [Multi-Queue, Multi-Threaded Paravirtualization](#multi-queue-multi-threaded-paravirtualization)
5*94f2fc33SRob Bradford    - [New Interrupt Management Framework](#new-interrupt-management-framework)
6*94f2fc33SRob Bradford    - [Development Tools](#development-tools)
7*94f2fc33SRob Bradford    - [Kata Containers Integration](#kata-containers-integration)
8*94f2fc33SRob Bradford    - [Contributors](#contributors)
9cec884e8SSamuel Ortiz- [v0.4.0](#v040)
10*94f2fc33SRob Bradford    - [Dynamic virtual CPUs addition](#dynamic-virtual-cpus-addition)
11*94f2fc33SRob Bradford    - [Programmatic firmware tables generation](#programmatic-firmware-tables-generation)
12*94f2fc33SRob Bradford    - [Filesystem and block devices vhost-user backends](#filesystem-and-block-devices-vhost-user-backends)
13*94f2fc33SRob Bradford    - [Guest pause and resume](#guest-pause-and-resume)
14*94f2fc33SRob Bradford    - [Userspace IOAPIC by default](#userspace-ioapic-by-default)
15*94f2fc33SRob Bradford    - [PCI BAR reprogramming](#pci-bar-reprogramming)
16*94f2fc33SRob Bradford    - [New `cloud-hypervisor` organization](#new-cloud-hypervisor-organization)
17*94f2fc33SRob Bradford    - [Contributors](#contributors-1)
188e8a7b6dSSamuel Ortiz- [v0.3.0](#v030)
19*94f2fc33SRob Bradford    - [Block device offloading](#block-device-offloading)
20*94f2fc33SRob Bradford    - [Network device backend](#network-device-backend)
21*94f2fc33SRob Bradford    - [Virtual sockets](#virtual-sockets)
22*94f2fc33SRob Bradford    - [HTTP based API](#http-based-api)
23*94f2fc33SRob Bradford    - [Memory mapped virtio transport](#memory-mapped-virtio-transport)
24*94f2fc33SRob Bradford    - [Paravirtualized IOMMU](#paravirtualized-iommu)
25*94f2fc33SRob Bradford    - [Ubuntu 19.10](#ubuntu-1910)
26*94f2fc33SRob Bradford    - [Large memory guests](#large-memory-guests)
277688e6e2SSamuel Ortiz- [v0.2.0](#v020)
28*94f2fc33SRob Bradford    - [Network device offloading](#network-device-offloading)
29*94f2fc33SRob Bradford    - [Minimal hardware-reduced ACPI](#minimal-hardware-reduced-acpi)
30*94f2fc33SRob Bradford    - [Debug I/O port](#debug-io-port)
31*94f2fc33SRob Bradford    - [Improved direct device assignment](#improved-direct-device-assignment)
32*94f2fc33SRob Bradford    - [Improved shared filesystem](#improved-shared-filesystem)
33*94f2fc33SRob Bradford    - [Ubuntu bionic based CI](#ubuntu-bionic-based-ci)
347688e6e2SSamuel Ortiz- [v0.1.0](#v010)
35*94f2fc33SRob Bradford    - [Shared filesystem](#shared-filesystem)
36*94f2fc33SRob Bradford    - [Initial direct device assignment support](#initial-direct-device-assignment-support)
37*94f2fc33SRob Bradford    - [Userspace IOAPIC](#userspace-ioapic)
38*94f2fc33SRob Bradford    - [Virtual persistent memory](#virtual-persistent-memory)
39*94f2fc33SRob Bradford    - [Linux kernel bzImage](#linux-kernel-bzimage)
40*94f2fc33SRob Bradford    - [Console over virtio](#console-over-virtio)
41*94f2fc33SRob Bradford    - [Unit testing](#unit-testing)
42*94f2fc33SRob Bradford    - [Integration tests parallelization](#integration-tests-parallelization)
43*94f2fc33SRob Bradford
44*94f2fc33SRob Bradford# v0.5.1
45*94f2fc33SRob Bradford
46*94f2fc33SRob BradfordThis is a bugfix release branched off v0.5.0. It contains the following fixes:
47*94f2fc33SRob Bradford
48*94f2fc33SRob Bradford* Update DiskConfig to contain missing disk control features (#790) - Samuel Ortiz and Sergio Lopez
49*94f2fc33SRob Bradford* Prevent memory overcommit via virtio-fs (#763) - Sebastien Boeuf
50*94f2fc33SRob Bradford* Fixed error reporting for resize command - Samuel Ortiz
51*94f2fc33SRob Bradford* Double reboot workaround (#783) - Rob Bradford
52*94f2fc33SRob Bradford* Various CI and development tooling fixes - Sebastien Boeuf, Samuel Ortiz, Rob Bradford
538e8a7b6dSSamuel Ortiz
542f395e60SSamuel Ortiz# v0.5.0
552f395e60SSamuel Ortiz
562f395e60SSamuel OrtizThis release has been tracked through the [0.5.0 project](https://github.com/cloud-hypervisor/cloud-hypervisor/projects/6).
572f395e60SSamuel Ortiz
582f395e60SSamuel OrtizHighlights for `cloud-hypervisor` version 0.5.0 include:
592f395e60SSamuel Ortiz
602f395e60SSamuel Ortiz### Virtual Machine Dynamic Resizing
612f395e60SSamuel Ortiz
622f395e60SSamuel OrtizWith 0.4.0 we added support for CPU hot plug, and 0.5.0 adds CPU hot unplug and
632f395e60SSamuel Ortizmemory hot plug as well. This allows to dynamically resize Cloud Hypervisor
642f395e60SSamuel Ortizguests which is needed for e.g. Kubernetes related use cases.
652f395e60SSamuel OrtizThe memory hot plug implementation is based on the same framework as the CPU hot
662f395e60SSamuel Ortizplug/unplug one, i.e. hardware-reduced ACPI notifications to the guest.
672f395e60SSamuel Ortiz
682f395e60SSamuel OrtizNext on our VM resizing roadmap is the PCI devices hotplug feature.
692f395e60SSamuel Ortiz
702f395e60SSamuel Ortiz### Multi-Queue, Multi-Threaded Paravirtualization
712f395e60SSamuel Ortiz
722f395e60SSamuel OrtizWe enhanced our virtio networking and block support by having both devices use
732f395e60SSamuel Ortizmultiple I/O queues handled by multiple threads. This improves our default
742f395e60SSamuel Ortizparavirtualized networking and block devices throughput.
752f395e60SSamuel Ortiz
762f395e60SSamuel Ortiz### New Interrupt Management Framework
772f395e60SSamuel Ortiz
782f395e60SSamuel OrtizWe improved our interrupt management implementation by introducing an Interrupt
792f395e60SSamuel OrtizManager framework, based on the currently on-going [rust-vmm vm-device](https://github.com/rust-vmm/vm-device)
802f395e60SSamuel Ortizcrates discussions. This move made the code significantly cleaner, and allowed
812f395e60SSamuel Ortizus to remove several KVM related dependencies from crates like the PCI and
822f395e60SSamuel Ortizvirtio ones.
832f395e60SSamuel Ortiz
842f395e60SSamuel Ortiz### Development Tools
852f395e60SSamuel Ortiz
862f395e60SSamuel OrtizIn order to provide a better developer experience, we worked on improving our
872f395e60SSamuel Ortizbuild, development and testing tools.
882f395e60SSamuel OrtizSomehow similar to the excellent
892f395e60SSamuel Ortiz[Firecracker's devtool](https://github.com/firecracker-microvm/firecracker/blob/master/tools/devtool),
902f395e60SSamuel Ortizwe now provide a [dev_cli script](https://github.com/cloud-hypervisor/cloud-hypervisor/blob/master/scripts/dev_cli.sh).
912f395e60SSamuel Ortiz
922f395e60SSamuel OrtizWith this new tool, our users and contributors will be able to build and test
932f395e60SSamuel OrtizCloud Hypervisor through a containerized environment.
942f395e60SSamuel Ortiz
952f395e60SSamuel Ortiz### Kata Containers Integration
962f395e60SSamuel Ortiz
972f395e60SSamuel OrtizWe spent some significant time and efforts debugging and fixing our integration
982f395e60SSamuel Ortizwith the [Kata Containers](https://github.com/kata-containers) project. Cloud
992f395e60SSamuel OrtizHypervisor is now a fully supported Kata Containers hypervisor, and is
1002f395e60SSamuel Ortizintegrated into the project's CI.
1012f395e60SSamuel Ortiz
1022f395e60SSamuel Ortiz### Contributors
1032f395e60SSamuel Ortiz
1042f395e60SSamuel OrtizMany thanks to everyone that contributed to the 0.5.0 release:
1052f395e60SSamuel Ortiz
1062f395e60SSamuel Ortiz* Bo Chen <chen.bo@intel.com>
1072f395e60SSamuel Ortiz* Cathy Zhang <cathy.zhang@intel.com>
1082f395e60SSamuel Ortiz* Qiu Wenbo <qiuwenbo@phytium.com.cn>
1092f395e60SSamuel Ortiz* Rob Bradford <robert.bradford@intel.com>
1102f395e60SSamuel Ortiz* Samuel Ortiz <sameo@linux.intel.com>
1112f395e60SSamuel Ortiz* Sebastien Boeuf <sebastien.boeuf@intel.com>
1122f395e60SSamuel Ortiz* Sergio Lopez <slp@redhat.com>
1132f395e60SSamuel Ortiz* Yang Zhong <yang.zhong@intel.com>
1142f395e60SSamuel Ortiz
115cec884e8SSamuel Ortiz# v0.4.0
116cec884e8SSamuel Ortiz
117cec884e8SSamuel OrtizThis release has been tracked through the [0.4.0 project](https://github.com/cloud-hypervisor/cloud-hypervisor/projects/4).
118cec884e8SSamuel Ortiz
119cec884e8SSamuel OrtizHighlights for `cloud-hypervisor` version 0.4.0 include:
120cec884e8SSamuel Ortiz
121cec884e8SSamuel Ortiz### Dynamic virtual CPUs addition
122cec884e8SSamuel Ortiz
123cec884e8SSamuel OrtizAs a way to vertically scale Cloud-Hypervisor guests, we now support dynamically
124cec884e8SSamuel Ortizadding virtual CPUs to the guests, a mechanism also known as CPU hot plug.
125cec884e8SSamuel OrtizThrough hardware-reduced ACPI notifications, Cloud Hypervisor can now add CPUs
126cec884e8SSamuel Ortizto an already running guest and the high level operations for that process are
127cec884e8SSamuel Ortizdocumented [here](https://github.com/cloud-hypervisor/cloud-hypervisor/blob/master/docs/hotplug.md)
128cec884e8SSamuel Ortiz
129cec884e8SSamuel OrtizDuring the next release cycles we are planning to extend Cloud Hypervisor
130cec884e8SSamuel Ortizhot plug framework to other resources, namely PCI devices and memory.
131cec884e8SSamuel Ortiz
132cec884e8SSamuel Ortiz### Programmatic firmware tables generation
133cec884e8SSamuel Ortiz
134cec884e8SSamuel OrtizAs part of the CPU hot plug feature enablement, and as a requirement for hot
135cec884e8SSamuel Ortizplugging other resources like devices or RAM, we added support for
136cec884e8SSamuel Ortizprogrammatically generating the needed ACPI tables. Through a dedicated
137cec884e8SSamuel Ortiz`acpi-tables` crate, we now have a flexible and clean way of generating those
138cec884e8SSamuel Ortiztables based on the VMM device model and topology.
139cec884e8SSamuel Ortiz
140cec884e8SSamuel Ortiz### Filesystem and block devices vhost-user backends
141cec884e8SSamuel Ortiz
142cec884e8SSamuel OrtizOur objective of running all Cloud Hypervisor paravirtualized I/O to a
143cec884e8SSamuel Ortizvhost-user based framework is getting closer as we've added Rust based
144cec884e8SSamuel Ortizimplementations for vhost-user-blk and virtiofs backends. Together with the
145cec884e8SSamuel Ortizvhost-user-net backend that came with the 0.3.0 release, this will form the
146cec884e8SSamuel Ortizdefault Cloud Hypervisor I/O architecture.
147cec884e8SSamuel Ortiz
148cec884e8SSamuel Ortiz### Guest pause and resume
149cec884e8SSamuel Ortiz
150cec884e8SSamuel OrtizAs an initial requiremnt for enabling live migration, we added support for
151cec884e8SSamuel Ortizpausing and resuming any VMM components. As an intermediate step towards live
152cec884e8SSamuel Ortizmigration, the upcoming guest snapshotting feature will be based on the pause
153cec884e8SSamuel Ortizand resume capabilities.
154cec884e8SSamuel Ortiz
155cec884e8SSamuel Ortiz### Userspace IOAPIC by default
156cec884e8SSamuel Ortiz
157cec884e8SSamuel OrtizAs a way to simplify our device manager implementation, but also in order to
158cec884e8SSamuel Ortizstay away from privileged rings as often as possible, any device that relies on
159cec884e8SSamuel Ortizpin based interrupts will be using the userspace IOAPIC implementation by
160cec884e8SSamuel Ortizdefault.
161cec884e8SSamuel Ortiz
162cec884e8SSamuel Ortiz### PCI BAR reprogramming
163cec884e8SSamuel Ortiz
164cec884e8SSamuel OrtizIn order to allow for a more flexible device model, and also support guests
165cec884e8SSamuel Ortizthat would want to move PCI devices, we added support for PCI devices BAR
166cec884e8SSamuel Ortizreprogramming.
167cec884e8SSamuel Ortiz
168cec884e8SSamuel Ortiz### New `cloud-hypervisor` organization
169cec884e8SSamuel Ortiz
170cec884e8SSamuel OrtizAs we wanted to be more flexible on how we manage the Cloud Hypervisor project,
171cec884e8SSamuel Ortizwe decided to move it under a [dedicated GitHub organization](https://github.com/cloud-hypervisor).
172cec884e8SSamuel OrtizTogether with the [cloud-hypervisor](https://github.com/cloud-hypervisor/cloud-hypervisor)
173cec884e8SSamuel Ortizproject, this new organization also now hosts our [kernel](https://github.com/cloud-hypervisor/linux)
174cec884e8SSamuel Ortizand [firmware](https://github.com/cloud-hypervisor/rust-hypervisor-firmware)
175cec884e8SSamuel Ortizrepositories. We may also use it to host any rust-vmm that we'd need to
176cec884e8SSamuel Ortiztemporarily fork.
177cec884e8SSamuel OrtizThanks to GitHub's seamless repository redirections, the move is completely
178cec884e8SSamuel Ortiztransparent to all Cloud Hypervisor contributors, users and followers.
179cec884e8SSamuel Ortiz
180cec884e8SSamuel Ortiz### Contributors
181cec884e8SSamuel Ortiz
182cec884e8SSamuel OrtizMany thanks to everyone that contributed to the 0.4.0 release:
183cec884e8SSamuel Ortiz
184cec884e8SSamuel Ortiz* Cathy Zhang <cathy.zhang@intel.com>
185cec884e8SSamuel Ortiz* Emin Ghuliev <drmint80@gmail.com>
186cec884e8SSamuel Ortiz* Jose Carlos Venegas Munoz <jose.carlos.venegas.munoz@intel.com>
187cec884e8SSamuel Ortiz* Qiu Wenbo <qiuwenbo@phytium.com.cn>
188cec884e8SSamuel Ortiz* Rob Bradford <robert.bradford@intel.com>
189cec884e8SSamuel Ortiz* Samuel Ortiz <sameo@linux.intel.com>
190cec884e8SSamuel Ortiz* Sebastien Boeuf <sebastien.boeuf@intel.com>
191cec884e8SSamuel Ortiz* Sergio Lopez <slp@redhat.com>
192cec884e8SSamuel Ortiz* Wu Zongyong <wuzongyong@linux.alibaba.com>
193cec884e8SSamuel Ortiz
1948e8a7b6dSSamuel Ortiz# v0.3.0
1958e8a7b6dSSamuel Ortiz
1968ec89bc8SRob BradfordThis release has been tracked through the [0.3.0 project](https://github.com/cloud-hypervisor/cloud-hypervisor/projects/3).
1978e8a7b6dSSamuel Ortiz
1988e8a7b6dSSamuel OrtizHighlights for `cloud-hypervisor` version 0.3.0 include:
1998e8a7b6dSSamuel Ortiz
2008e8a7b6dSSamuel Ortiz### Block device offloading
2018e8a7b6dSSamuel Ortiz
2028e8a7b6dSSamuel OrtizWe continue to work on offloading paravirtualized I/O to external processes,
2038e8a7b6dSSamuel Ortizand we added support for
2048e8a7b6dSSamuel Ortiz[vhost-user-blk](https://access.redhat.com/solutions/3394851) backends.
2058e8a7b6dSSamuel OrtizThis enables `cloud-hypervisor` users to plug a `vhost-user` based block device
2068e8a7b6dSSamuel Ortizlike [SPDK](https://spdk.io)) into the VMM as their paravirtualized storage
2078e8a7b6dSSamuel Ortizbackend.
2088e8a7b6dSSamuel Ortiz
2098e8a7b6dSSamuel Ortiz### Network device backend
2108e8a7b6dSSamuel Ortiz
2118e8a7b6dSSamuel OrtizThe previous release provided support for
2128e8a7b6dSSamuel Ortiz[vhost-user-net](https://access.redhat.com/solutions/3394851) backends. Now we
2138e8a7b6dSSamuel Ortizalso provide a TAP based vhost-user-net backend, implemented in Rust. Together
2148e8a7b6dSSamuel Ortizwith the vhost-user-net device implementation, this will eventually become the
2158e8a7b6dSSamuel OrtizCloud Hypervisor default paravirtualized networking architecture.
2168e8a7b6dSSamuel Ortiz
2178e8a7b6dSSamuel Ortiz### Virtual sockets
2188e8a7b6dSSamuel Ortiz
2198e8a7b6dSSamuel OrtizIn order to more efficiently and securely communicate between host and guest,
2208e8a7b6dSSamuel Ortizwe added an hybrid implementation of the
2218e8a7b6dSSamuel Ortiz[VSOCK](http://man7.org/linux/man-pages/man7/vsock.7.html) socket address
2228e8a7b6dSSamuel Ortizfamily over virtio. Credits go to the
2238e8a7b6dSSamuel Ortiz[Firecracker](https://github.com/firecracker-microvm/firecracker/blob/master/docs/vsock.md)
2248e8a7b6dSSamuel Ortizproject as our implementation is a copy of theirs.
2258e8a7b6dSSamuel Ortiz
2268e8a7b6dSSamuel Ortiz### HTTP based API
2278e8a7b6dSSamuel Ortiz
2288e8a7b6dSSamuel OrtizIn anticipation of the need to support asynchronous operations to Cloud
2298e8a7b6dSSamuel OrtizHypervisor guests (e.g. resources hotplug and guest migration), we added a HTTP
2308e8a7b6dSSamuel Ortizbased API to the VMM. The API will be more extensively documented during the
2318e8a7b6dSSamuel Ortiznext release cycle.
2328e8a7b6dSSamuel Ortiz
2338e8a7b6dSSamuel Ortiz### Memory mapped virtio transport
2348e8a7b6dSSamuel Ortiz
2358e8a7b6dSSamuel OrtizIn order to support potential PCI-free use cases, we added support for the
2368e8a7b6dSSamuel Ortiz[virtio MMIO](https://docs.oasis-open.org/virtio/virtio/v1.1/cs01/virtio-v1.1-cs01.html#x1-1440002)
2378e8a7b6dSSamuel Ortiztransport layer. This will allow us to support simple, minimal guest
2388e8a7b6dSSamuel Ortizconfigurations that do not require a PCI bus emulation.
2398e8a7b6dSSamuel Ortiz
2408e8a7b6dSSamuel Ortiz### Paravirtualized IOMMU
2418e8a7b6dSSamuel Ortiz
2428e8a7b6dSSamuel OrtizAs we want to improve our nested guests support, we added support for exposing
2438ec89bc8SRob Bradforda [paravirtualized IOMMU](https://github.com/cloud-hypervisor/cloud-hypervisor/blob/master/docs/iommu.md)
2448e8a7b6dSSamuel Ortizdevice through virtio. This allows for a safer nested virtio and directly
2458e8a7b6dSSamuel Ortizassigned devices support.
2468e8a7b6dSSamuel Ortiz
2478e8a7b6dSSamuel OrtizTo add the IOMMU support, we had to make some CLI changes for Cloud Hypervisor
2488e8a7b6dSSamuel Ortizusers to be able to specify if devices had to be handled through this virtual
2498e8a7b6dSSamuel OrtizIOMMU or not. In particular, the `--disk` option now expects disk paths to be
2508e8a7b6dSSamuel Ortizprefixed with a `path=` string, and supports an optional `iommu=[on|off]`
2518e8a7b6dSSamuel Ortizsetting.
2528e8a7b6dSSamuel Ortiz
2538e8a7b6dSSamuel Ortiz### Ubuntu 19.10
2548e8a7b6dSSamuel Ortiz
2558ec89bc8SRob BradfordWith the latest [hypervisor firmware](https://github.com/cloud-hypervisor/rust-hypervisor-firmware),
2568e8a7b6dSSamuel Ortizwe can now support the latest
2578e8a7b6dSSamuel Ortiz[Ubuntu 19.10 (Eoan Ermine)](http://releases.ubuntu.com/19.10/) cloud images.
2588e8a7b6dSSamuel Ortiz
2598e8a7b6dSSamuel Ortiz### Large memory guests
2608e8a7b6dSSamuel Ortiz
2618e8a7b6dSSamuel OrtizAfter simplifying and changing our guest address space handling, we can now
2628e8a7b6dSSamuel Ortizsupport guests with large amount of memory (more than 64GB).
2637688e6e2SSamuel Ortiz
264d784ac29SSamuel Ortiz# v0.2.0
265d784ac29SSamuel Ortiz
2668ec89bc8SRob BradfordThis release has been tracked through the [0.2.0 project](https://github.com/cloud-hypervisor/cloud-hypervisor/projects/2).
267d784ac29SSamuel Ortiz
268d784ac29SSamuel OrtizHighlights for `cloud-hypervisor` version 0.2.0 include:
269d784ac29SSamuel Ortiz
270d784ac29SSamuel Ortiz### Network device offloading
271d784ac29SSamuel Ortiz
272d784ac29SSamuel OrtizAs part of our general effort to offload paravirtualized I/O to external
273d784ac29SSamuel Ortizprocesses, we added support for
274d784ac29SSamuel Ortiz[vhost-user-net](https://access.redhat.com/solutions/3394851) backends. This
275d784ac29SSamuel Ortizenables `cloud-hypervisor` users to plug a `vhost-user` based networking device
276d784ac29SSamuel Ortiz(e.g. [DPDK](https://dpdk.org)) into the VMM as their virtio network backend.
277d784ac29SSamuel Ortiz
278d784ac29SSamuel Ortiz### Minimal hardware-reduced ACPI
279d784ac29SSamuel Ortiz
280d784ac29SSamuel OrtizIn order to properly implement and guest reset and shutdown, we implemented
281d784ac29SSamuel Ortiza minimal version of the hardware-reduced ACPI specification. Together with
282d784ac29SSamuel Ortiza tiny I/O port based ACPI device, this allows `cloud-hypervisor` guests to
283d784ac29SSamuel Ortizcleanly reboot and shutdown.
284d784ac29SSamuel Ortiz
285d784ac29SSamuel OrtizThe ACPI implementation is a `cloud-hypervisor` build time option that is
286d784ac29SSamuel Ortizenabled by default.
287d784ac29SSamuel Ortiz
288d784ac29SSamuel Ortiz### Debug I/O port
289d784ac29SSamuel Ortiz
290d784ac29SSamuel OrtizBased on the Firecracker idea of using a dedicated I/O port to measure guest
291d784ac29SSamuel Ortizboot times, we added support for logging guest events through the
292d784ac29SSamuel Ortiz[0x80](https://www.intel.com/content/www/us/en/support/articles/000005500/boards-and-kits.html)
293d784ac29SSamuel OrtizPC debug port. This allows, among other things, for granular guest boot time
2948ec89bc8SRob Bradfordmeasurements. See our [debug port documentation](https://github.com/cloud-hypervisor/cloud-hypervisor/blob/master/docs/debug-port.md)
295d784ac29SSamuel Ortizfor more details.
296d784ac29SSamuel Ortiz
297d784ac29SSamuel Ortiz### Improved direct device assignment
298d784ac29SSamuel Ortiz
299d784ac29SSamuel OrtizWe fixed a major performance issue with our initial VFIO implementation: When
300d784ac29SSamuel Ortizenabling VT-d through the KVM and VFIO APIs, our guest memory writes and reads
301d784ac29SSamuel Ortizwere (in many cases) not cached. After correctly tagging the guest memory from
302d784ac29SSamuel Ortiz`cloud-hypervisor` we're now able to reach the expected performance from
303d784ac29SSamuel Ortizdirectly assigned devices.
304d784ac29SSamuel Ortiz
305d784ac29SSamuel Ortiz### Improved shared filesystem
306d784ac29SSamuel Ortiz
307d784ac29SSamuel OrtizWe added shared memory region with [DAX](https://www.kernel.org/doc/Documentation/filesystems/dax.txt)
308d784ac29SSamuel Ortizsupport to our [virtio-fs](https://virtio-fs.gitlab.io/) shared file system.
309d784ac29SSamuel OrtizThis provides better shared filesystem IO performance with a smaller guest
310d784ac29SSamuel Ortizmemory footprint.
311d784ac29SSamuel Ortiz
312d784ac29SSamuel Ortiz### Ubuntu bionic based CI
313d784ac29SSamuel Ortiz
3148ec89bc8SRob BradfordThanks to our [simple KVM firmware](https://github.com/cloud-hypervisor/rust-hypervisor-firmware)
315d784ac29SSamuel Ortizimprovements, we are now able to boot Ubuntu bionic images. We added those to
316d784ac29SSamuel Ortizour CI pipeline.
317d784ac29SSamuel Ortiz
31893b77530SSamuel Ortiz# v0.1.0
31993b77530SSamuel Ortiz
3208ec89bc8SRob BradfordThis release has been tracked through the [0.1.0 project](https://github.com/cloud-hypervisor/cloud-hypervisor/projects/1).
32193b77530SSamuel Ortiz
32293b77530SSamuel OrtizHighlights for `cloud-hypervisor` version 0.1.0 include:
32393b77530SSamuel Ortiz
32493b77530SSamuel Ortiz### Shared filesystem
32593b77530SSamuel Ortiz
32693b77530SSamuel OrtizWe added support for the [virtio-fs](https://virtio-fs.gitlab.io/) shared file
32793b77530SSamuel Ortizsystem, allowing for an efficient and reliable way of sharing a filesystem
32893b77530SSamuel Ortizbetween the host and the `cloud-hypervisor` guest.
32993b77530SSamuel Ortiz
3308ec89bc8SRob BradfordSee our [filesystem sharing](https://github.com/cloud-hypervisor/cloud-hypervisor/blob/master/docs/fs.md)
33193b77530SSamuel Ortizdocumentation for more details on how to use virtio-fs with `cloud-hypervisor`.
33293b77530SSamuel Ortiz
33393b77530SSamuel Ortiz### Initial direct device assignment support
33493b77530SSamuel Ortiz
33593b77530SSamuel OrtizVFIO (Virtual Function I/O) is a kernel framework that exposes direct device
33693b77530SSamuel Ortizaccess to userspace. `cloud-hypervisor` uses VFIO to directly assign host
33793b77530SSamuel Ortizphysical devices into its guest.
33893b77530SSamuel Ortiz
3398ec89bc8SRob BradfordSee our [VFIO](https://github.com/cloud-hypervisor/cloud-hypervisor/blob/master/docs/vfio.md)
34093b77530SSamuel Ortizdocumentation for more detail on how to directly assign host devices to
34193b77530SSamuel Ortiz`cloud-hypervisor` guests.
34293b77530SSamuel Ortiz
34393b77530SSamuel Ortiz### Userspace IOAPIC
34493b77530SSamuel Ortiz
34593b77530SSamuel Ortiz`cloud-hypervisor` supports a so-called split IRQ chip implementation by
34693b77530SSamuel Ortizimplementing support for the [IOAPIC](https://wiki.osdev.org/IOAPIC).
34793b77530SSamuel OrtizBy moving part of the IRQ chip implementation from kernel space to user space,
34893b77530SSamuel Ortizthe IRQ chip emulation does not always run in a fully privileged mode.
34993b77530SSamuel Ortiz
35093b77530SSamuel Ortiz### Virtual persistent memory
35193b77530SSamuel Ortiz
35293b77530SSamuel OrtizThe `virtio-pmem` implementation emulates a virtual persistent memory device
35393b77530SSamuel Ortizthat `cloud-hypervisor` can e.g. boot from. Booting from a `virtio-pmem` device
35493b77530SSamuel Ortizallows to bypass the guest page cache and improve the guest memory footprint.
35593b77530SSamuel Ortiz
35693b77530SSamuel Ortiz### Linux kernel bzImage
35793b77530SSamuel Ortiz
35893b77530SSamuel OrtizThe `cloud-hypervisor` linux kernel loader now supports direct kernel boot from
35993b77530SSamuel Ortiz`bzImage` kernel images, which is usually the format that Linux distributions
36093b77530SSamuel Ortizuse to ship their kernels. For example, this allows for booting from the host
36193b77530SSamuel Ortizdistribution kernel image.
36293b77530SSamuel Ortiz
36393b77530SSamuel Ortiz### Console over virtio
36493b77530SSamuel Ortiz
36593b77530SSamuel Ortiz`cloud-hypervisor` now exposes a `virtio-console` device to the guest. Although
36693b77530SSamuel Ortizusing this device as a guest console can potentially cut some early boot
36793b77530SSamuel Ortizmessages, it can reduce the guest boot time and provides a complete console
36893b77530SSamuel Ortizimplementation.
36993b77530SSamuel Ortiz
37093b77530SSamuel OrtizThe `virtio-console` device is enabled by default for the guest console.
37193b77530SSamuel OrtizSwitching back to the legacy serial port is done by selecting
37293b77530SSamuel Ortiz`--serial tty --console off` from the command line.
37393b77530SSamuel Ortiz
37493b77530SSamuel Ortiz### Unit testing
37593b77530SSamuel Ortiz
37693b77530SSamuel OrtizWe now run all unit tests from all our crates directly from our CI.
37793b77530SSamuel Ortiz
37893b77530SSamuel Ortiz### Integration tests parallelization
37993b77530SSamuel Ortiz
38093b77530SSamuel OrtizThe CI cycle run time has been significantly reduced by refactoring our
38193b77530SSamuel Ortizintegration tests; allowing them to all be run in parallel.
382