1*cec884e8SSamuel Ortiz- [v0.4.0](#v040) 2*cec884e8SSamuel Ortiz + [Dynamic virtual CPUs addition](#dynamic-virtual-cpus-addition) 3*cec884e8SSamuel Ortiz + [Programmatic firmware tables generation](#programmatic-firmware-tables-generation) 4*cec884e8SSamuel Ortiz + [Filesystem and block devices vhost-user backends](#filesystem-and-block-devices-vhost-user-backends) 5*cec884e8SSamuel Ortiz + [Guest pause and resume](#guest-pause-and-resume) 6*cec884e8SSamuel Ortiz + [Userspace IOAPIC by default](#userspace-ioapic-by-default) 7*cec884e8SSamuel Ortiz + [PCI BAR reprogramming](#pci-bar-reprogramming) 8*cec884e8SSamuel Ortiz + [New `cloud-hypervisor` organization](#new--cloud-hypervisor--organization) 9*cec884e8SSamuel Ortiz + [Contributors](#contributors) 108e8a7b6dSSamuel Ortiz- [v0.3.0](#v030) 118e8a7b6dSSamuel Ortiz + [Block device offloading](#block-device-offloading) 128e8a7b6dSSamuel Ortiz + [Network device backend](#network-device-backend) 138e8a7b6dSSamuel Ortiz + [Virtual sockets](#virtual-sockets) 148e8a7b6dSSamuel Ortiz + [HTTP based API](#http-based-api) 158e8a7b6dSSamuel Ortiz + [Memory mapped virtio transport](#memory-mapped-virtio-transport) 168e8a7b6dSSamuel Ortiz + [Paravirtualized IOMMU](#paravirtualized-iommu) 178e8a7b6dSSamuel Ortiz + [Ubuntu 19.10](#ubuntu-1910) 188e8a7b6dSSamuel Ortiz + [Guest large memory](#guest-large-memory) 197688e6e2SSamuel Ortiz- [v0.2.0](#v020) 208e8a7b6dSSamuel Ortiz + [Network device offloading](#network-device-offloading) 218e8a7b6dSSamuel Ortiz + [Minimal hardware-reduced ACPI](#minimal-hardware-reduced-acpi) 228e8a7b6dSSamuel Ortiz + [Debug I/O port](#debug-i-o-port) 238e8a7b6dSSamuel Ortiz + [Improved direct device assignment](#improved-direct-device-assignment) 248e8a7b6dSSamuel Ortiz + [Improved shared filesystem](#improved-shared-filesystem) 258e8a7b6dSSamuel Ortiz + [Ubuntu bionic based CI](#ubuntu-bionic-based-ci) 267688e6e2SSamuel Ortiz- [v0.1.0](#v010) 278e8a7b6dSSamuel Ortiz + [Shared filesystem](#shared-filesystem) 288e8a7b6dSSamuel Ortiz + [Initial direct device assignment support](#initial-direct-device-assignment-support) 298e8a7b6dSSamuel Ortiz + [Userspace IOAPIC](#userspace-ioapic) 308e8a7b6dSSamuel Ortiz + [Virtual persistent memory](#virtual-persistent-memory) 318e8a7b6dSSamuel Ortiz + [Linux kernel bzImage](#linux-kernel-bzimage) 328e8a7b6dSSamuel Ortiz + [Console over virtio](#console-over-virtio) 338e8a7b6dSSamuel Ortiz + [Unit testing](#unit-testing) 348e8a7b6dSSamuel Ortiz + [Integration tests parallelization](#integration-tests-parallelization) 358e8a7b6dSSamuel Ortiz 36*cec884e8SSamuel Ortiz# v0.4.0 37*cec884e8SSamuel Ortiz 38*cec884e8SSamuel OrtizThis release has been tracked through the [0.4.0 project](https://github.com/cloud-hypervisor/cloud-hypervisor/projects/4). 39*cec884e8SSamuel Ortiz 40*cec884e8SSamuel OrtizHighlights for `cloud-hypervisor` version 0.4.0 include: 41*cec884e8SSamuel Ortiz 42*cec884e8SSamuel Ortiz### Dynamic virtual CPUs addition 43*cec884e8SSamuel Ortiz 44*cec884e8SSamuel OrtizAs a way to vertically scale Cloud-Hypervisor guests, we now support dynamically 45*cec884e8SSamuel Ortizadding virtual CPUs to the guests, a mechanism also known as CPU hot plug. 46*cec884e8SSamuel OrtizThrough hardware-reduced ACPI notifications, Cloud Hypervisor can now add CPUs 47*cec884e8SSamuel Ortizto an already running guest and the high level operations for that process are 48*cec884e8SSamuel Ortizdocumented [here](https://github.com/cloud-hypervisor/cloud-hypervisor/blob/master/docs/hotplug.md) 49*cec884e8SSamuel Ortiz 50*cec884e8SSamuel OrtizDuring the next release cycles we are planning to extend Cloud Hypervisor 51*cec884e8SSamuel Ortizhot plug framework to other resources, namely PCI devices and memory. 52*cec884e8SSamuel Ortiz 53*cec884e8SSamuel Ortiz### Programmatic firmware tables generation 54*cec884e8SSamuel Ortiz 55*cec884e8SSamuel OrtizAs part of the CPU hot plug feature enablement, and as a requirement for hot 56*cec884e8SSamuel Ortizplugging other resources like devices or RAM, we added support for 57*cec884e8SSamuel Ortizprogrammatically generating the needed ACPI tables. Through a dedicated 58*cec884e8SSamuel Ortiz`acpi-tables` crate, we now have a flexible and clean way of generating those 59*cec884e8SSamuel Ortiztables based on the VMM device model and topology. 60*cec884e8SSamuel Ortiz 61*cec884e8SSamuel Ortiz### Filesystem and block devices vhost-user backends 62*cec884e8SSamuel Ortiz 63*cec884e8SSamuel OrtizOur objective of running all Cloud Hypervisor paravirtualized I/O to a 64*cec884e8SSamuel Ortizvhost-user based framework is getting closer as we've added Rust based 65*cec884e8SSamuel Ortizimplementations for vhost-user-blk and virtiofs backends. Together with the 66*cec884e8SSamuel Ortizvhost-user-net backend that came with the 0.3.0 release, this will form the 67*cec884e8SSamuel Ortizdefault Cloud Hypervisor I/O architecture. 68*cec884e8SSamuel Ortiz 69*cec884e8SSamuel Ortiz### Guest pause and resume 70*cec884e8SSamuel Ortiz 71*cec884e8SSamuel OrtizAs an initial requiremnt for enabling live migration, we added support for 72*cec884e8SSamuel Ortizpausing and resuming any VMM components. As an intermediate step towards live 73*cec884e8SSamuel Ortizmigration, the upcoming guest snapshotting feature will be based on the pause 74*cec884e8SSamuel Ortizand resume capabilities. 75*cec884e8SSamuel Ortiz 76*cec884e8SSamuel Ortiz### Userspace IOAPIC by default 77*cec884e8SSamuel Ortiz 78*cec884e8SSamuel OrtizAs a way to simplify our device manager implementation, but also in order to 79*cec884e8SSamuel Ortizstay away from privileged rings as often as possible, any device that relies on 80*cec884e8SSamuel Ortizpin based interrupts will be using the userspace IOAPIC implementation by 81*cec884e8SSamuel Ortizdefault. 82*cec884e8SSamuel Ortiz 83*cec884e8SSamuel Ortiz### PCI BAR reprogramming 84*cec884e8SSamuel Ortiz 85*cec884e8SSamuel OrtizIn order to allow for a more flexible device model, and also support guests 86*cec884e8SSamuel Ortizthat would want to move PCI devices, we added support for PCI devices BAR 87*cec884e8SSamuel Ortizreprogramming. 88*cec884e8SSamuel Ortiz 89*cec884e8SSamuel Ortiz### New `cloud-hypervisor` organization 90*cec884e8SSamuel Ortiz 91*cec884e8SSamuel OrtizAs we wanted to be more flexible on how we manage the Cloud Hypervisor project, 92*cec884e8SSamuel Ortizwe decided to move it under a [dedicated GitHub organization](https://github.com/cloud-hypervisor). 93*cec884e8SSamuel OrtizTogether with the [cloud-hypervisor](https://github.com/cloud-hypervisor/cloud-hypervisor) 94*cec884e8SSamuel Ortizproject, this new organization also now hosts our [kernel](https://github.com/cloud-hypervisor/linux) 95*cec884e8SSamuel Ortizand [firmware](https://github.com/cloud-hypervisor/rust-hypervisor-firmware) 96*cec884e8SSamuel Ortizrepositories. We may also use it to host any rust-vmm that we'd need to 97*cec884e8SSamuel Ortiztemporarily fork. 98*cec884e8SSamuel OrtizThanks to GitHub's seamless repository redirections, the move is completely 99*cec884e8SSamuel Ortiztransparent to all Cloud Hypervisor contributors, users and followers. 100*cec884e8SSamuel Ortiz 101*cec884e8SSamuel Ortiz### Contributors 102*cec884e8SSamuel Ortiz 103*cec884e8SSamuel OrtizMany thanks to everyone that contributed to the 0.4.0 release: 104*cec884e8SSamuel Ortiz 105*cec884e8SSamuel Ortiz* Cathy Zhang <cathy.zhang@intel.com> 106*cec884e8SSamuel Ortiz* Emin Ghuliev <drmint80@gmail.com> 107*cec884e8SSamuel Ortiz* Jose Carlos Venegas Munoz <jose.carlos.venegas.munoz@intel.com> 108*cec884e8SSamuel Ortiz* Qiu Wenbo <qiuwenbo@phytium.com.cn> 109*cec884e8SSamuel Ortiz* Rob Bradford <robert.bradford@intel.com> 110*cec884e8SSamuel Ortiz* Samuel Ortiz <sameo@linux.intel.com> 111*cec884e8SSamuel Ortiz* Sebastien Boeuf <sebastien.boeuf@intel.com> 112*cec884e8SSamuel Ortiz* Sergio Lopez <slp@redhat.com> 113*cec884e8SSamuel Ortiz* Wu Zongyong <wuzongyong@linux.alibaba.com> 114*cec884e8SSamuel Ortiz 1158e8a7b6dSSamuel Ortiz# v0.3.0 1168e8a7b6dSSamuel Ortiz 1178ec89bc8SRob BradfordThis release has been tracked through the [0.3.0 project](https://github.com/cloud-hypervisor/cloud-hypervisor/projects/3). 1188e8a7b6dSSamuel Ortiz 1198e8a7b6dSSamuel OrtizHighlights for `cloud-hypervisor` version 0.3.0 include: 1208e8a7b6dSSamuel Ortiz 1218e8a7b6dSSamuel Ortiz### Block device offloading 1228e8a7b6dSSamuel Ortiz 1238e8a7b6dSSamuel OrtizWe continue to work on offloading paravirtualized I/O to external processes, 1248e8a7b6dSSamuel Ortizand we added support for 1258e8a7b6dSSamuel Ortiz[vhost-user-blk](https://access.redhat.com/solutions/3394851) backends. 1268e8a7b6dSSamuel OrtizThis enables `cloud-hypervisor` users to plug a `vhost-user` based block device 1278e8a7b6dSSamuel Ortizlike [SPDK](https://spdk.io)) into the VMM as their paravirtualized storage 1288e8a7b6dSSamuel Ortizbackend. 1298e8a7b6dSSamuel Ortiz 1308e8a7b6dSSamuel Ortiz### Network device backend 1318e8a7b6dSSamuel Ortiz 1328e8a7b6dSSamuel OrtizThe previous release provided support for 1338e8a7b6dSSamuel Ortiz[vhost-user-net](https://access.redhat.com/solutions/3394851) backends. Now we 1348e8a7b6dSSamuel Ortizalso provide a TAP based vhost-user-net backend, implemented in Rust. Together 1358e8a7b6dSSamuel Ortizwith the vhost-user-net device implementation, this will eventually become the 1368e8a7b6dSSamuel OrtizCloud Hypervisor default paravirtualized networking architecture. 1378e8a7b6dSSamuel Ortiz 1388e8a7b6dSSamuel Ortiz### Virtual sockets 1398e8a7b6dSSamuel Ortiz 1408e8a7b6dSSamuel OrtizIn order to more efficiently and securely communicate between host and guest, 1418e8a7b6dSSamuel Ortizwe added an hybrid implementation of the 1428e8a7b6dSSamuel Ortiz[VSOCK](http://man7.org/linux/man-pages/man7/vsock.7.html) socket address 1438e8a7b6dSSamuel Ortizfamily over virtio. Credits go to the 1448e8a7b6dSSamuel Ortiz[Firecracker](https://github.com/firecracker-microvm/firecracker/blob/master/docs/vsock.md) 1458e8a7b6dSSamuel Ortizproject as our implementation is a copy of theirs. 1468e8a7b6dSSamuel Ortiz 1478e8a7b6dSSamuel Ortiz### HTTP based API 1488e8a7b6dSSamuel Ortiz 1498e8a7b6dSSamuel OrtizIn anticipation of the need to support asynchronous operations to Cloud 1508e8a7b6dSSamuel OrtizHypervisor guests (e.g. resources hotplug and guest migration), we added a HTTP 1518e8a7b6dSSamuel Ortizbased API to the VMM. The API will be more extensively documented during the 1528e8a7b6dSSamuel Ortiznext release cycle. 1538e8a7b6dSSamuel Ortiz 1548e8a7b6dSSamuel Ortiz### Memory mapped virtio transport 1558e8a7b6dSSamuel Ortiz 1568e8a7b6dSSamuel OrtizIn order to support potential PCI-free use cases, we added support for the 1578e8a7b6dSSamuel Ortiz[virtio MMIO](https://docs.oasis-open.org/virtio/virtio/v1.1/cs01/virtio-v1.1-cs01.html#x1-1440002) 1588e8a7b6dSSamuel Ortiztransport layer. This will allow us to support simple, minimal guest 1598e8a7b6dSSamuel Ortizconfigurations that do not require a PCI bus emulation. 1608e8a7b6dSSamuel Ortiz 1618e8a7b6dSSamuel Ortiz### Paravirtualized IOMMU 1628e8a7b6dSSamuel Ortiz 1638e8a7b6dSSamuel OrtizAs we want to improve our nested guests support, we added support for exposing 1648ec89bc8SRob Bradforda [paravirtualized IOMMU](https://github.com/cloud-hypervisor/cloud-hypervisor/blob/master/docs/iommu.md) 1658e8a7b6dSSamuel Ortizdevice through virtio. This allows for a safer nested virtio and directly 1668e8a7b6dSSamuel Ortizassigned devices support. 1678e8a7b6dSSamuel Ortiz 1688e8a7b6dSSamuel OrtizTo add the IOMMU support, we had to make some CLI changes for Cloud Hypervisor 1698e8a7b6dSSamuel Ortizusers to be able to specify if devices had to be handled through this virtual 1708e8a7b6dSSamuel OrtizIOMMU or not. In particular, the `--disk` option now expects disk paths to be 1718e8a7b6dSSamuel Ortizprefixed with a `path=` string, and supports an optional `iommu=[on|off]` 1728e8a7b6dSSamuel Ortizsetting. 1738e8a7b6dSSamuel Ortiz 1748e8a7b6dSSamuel Ortiz### Ubuntu 19.10 1758e8a7b6dSSamuel Ortiz 1768ec89bc8SRob BradfordWith the latest [hypervisor firmware](https://github.com/cloud-hypervisor/rust-hypervisor-firmware), 1778e8a7b6dSSamuel Ortizwe can now support the latest 1788e8a7b6dSSamuel Ortiz[Ubuntu 19.10 (Eoan Ermine)](http://releases.ubuntu.com/19.10/) cloud images. 1798e8a7b6dSSamuel Ortiz 1808e8a7b6dSSamuel Ortiz### Large memory guests 1818e8a7b6dSSamuel Ortiz 1828e8a7b6dSSamuel OrtizAfter simplifying and changing our guest address space handling, we can now 1838e8a7b6dSSamuel Ortizsupport guests with large amount of memory (more than 64GB). 1847688e6e2SSamuel Ortiz 185d784ac29SSamuel Ortiz# v0.2.0 186d784ac29SSamuel Ortiz 1878ec89bc8SRob BradfordThis release has been tracked through the [0.2.0 project](https://github.com/cloud-hypervisor/cloud-hypervisor/projects/2). 188d784ac29SSamuel Ortiz 189d784ac29SSamuel OrtizHighlights for `cloud-hypervisor` version 0.2.0 include: 190d784ac29SSamuel Ortiz 191d784ac29SSamuel Ortiz### Network device offloading 192d784ac29SSamuel Ortiz 193d784ac29SSamuel OrtizAs part of our general effort to offload paravirtualized I/O to external 194d784ac29SSamuel Ortizprocesses, we added support for 195d784ac29SSamuel Ortiz[vhost-user-net](https://access.redhat.com/solutions/3394851) backends. This 196d784ac29SSamuel Ortizenables `cloud-hypervisor` users to plug a `vhost-user` based networking device 197d784ac29SSamuel Ortiz(e.g. [DPDK](https://dpdk.org)) into the VMM as their virtio network backend. 198d784ac29SSamuel Ortiz 199d784ac29SSamuel Ortiz### Minimal hardware-reduced ACPI 200d784ac29SSamuel Ortiz 201d784ac29SSamuel OrtizIn order to properly implement and guest reset and shutdown, we implemented 202d784ac29SSamuel Ortiza minimal version of the hardware-reduced ACPI specification. Together with 203d784ac29SSamuel Ortiza tiny I/O port based ACPI device, this allows `cloud-hypervisor` guests to 204d784ac29SSamuel Ortizcleanly reboot and shutdown. 205d784ac29SSamuel Ortiz 206d784ac29SSamuel OrtizThe ACPI implementation is a `cloud-hypervisor` build time option that is 207d784ac29SSamuel Ortizenabled by default. 208d784ac29SSamuel Ortiz 209d784ac29SSamuel Ortiz### Debug I/O port 210d784ac29SSamuel Ortiz 211d784ac29SSamuel OrtizBased on the Firecracker idea of using a dedicated I/O port to measure guest 212d784ac29SSamuel Ortizboot times, we added support for logging guest events through the 213d784ac29SSamuel Ortiz[0x80](https://www.intel.com/content/www/us/en/support/articles/000005500/boards-and-kits.html) 214d784ac29SSamuel OrtizPC debug port. This allows, among other things, for granular guest boot time 2158ec89bc8SRob Bradfordmeasurements. See our [debug port documentation](https://github.com/cloud-hypervisor/cloud-hypervisor/blob/master/docs/debug-port.md) 216d784ac29SSamuel Ortizfor more details. 217d784ac29SSamuel Ortiz 218d784ac29SSamuel Ortiz### Improved direct device assignment 219d784ac29SSamuel Ortiz 220d784ac29SSamuel OrtizWe fixed a major performance issue with our initial VFIO implementation: When 221d784ac29SSamuel Ortizenabling VT-d through the KVM and VFIO APIs, our guest memory writes and reads 222d784ac29SSamuel Ortizwere (in many cases) not cached. After correctly tagging the guest memory from 223d784ac29SSamuel Ortiz`cloud-hypervisor` we're now able to reach the expected performance from 224d784ac29SSamuel Ortizdirectly assigned devices. 225d784ac29SSamuel Ortiz 226d784ac29SSamuel Ortiz### Improved shared filesystem 227d784ac29SSamuel Ortiz 228d784ac29SSamuel OrtizWe added shared memory region with [DAX](https://www.kernel.org/doc/Documentation/filesystems/dax.txt) 229d784ac29SSamuel Ortizsupport to our [virtio-fs](https://virtio-fs.gitlab.io/) shared file system. 230d784ac29SSamuel OrtizThis provides better shared filesystem IO performance with a smaller guest 231d784ac29SSamuel Ortizmemory footprint. 232d784ac29SSamuel Ortiz 233d784ac29SSamuel Ortiz### Ubuntu bionic based CI 234d784ac29SSamuel Ortiz 2358ec89bc8SRob BradfordThanks to our [simple KVM firmware](https://github.com/cloud-hypervisor/rust-hypervisor-firmware) 236d784ac29SSamuel Ortizimprovements, we are now able to boot Ubuntu bionic images. We added those to 237d784ac29SSamuel Ortizour CI pipeline. 238d784ac29SSamuel Ortiz 23993b77530SSamuel Ortiz# v0.1.0 24093b77530SSamuel Ortiz 2418ec89bc8SRob BradfordThis release has been tracked through the [0.1.0 project](https://github.com/cloud-hypervisor/cloud-hypervisor/projects/1). 24293b77530SSamuel Ortiz 24393b77530SSamuel OrtizHighlights for `cloud-hypervisor` version 0.1.0 include: 24493b77530SSamuel Ortiz 24593b77530SSamuel Ortiz### Shared filesystem 24693b77530SSamuel Ortiz 24793b77530SSamuel OrtizWe added support for the [virtio-fs](https://virtio-fs.gitlab.io/) shared file 24893b77530SSamuel Ortizsystem, allowing for an efficient and reliable way of sharing a filesystem 24993b77530SSamuel Ortizbetween the host and the `cloud-hypervisor` guest. 25093b77530SSamuel Ortiz 2518ec89bc8SRob BradfordSee our [filesystem sharing](https://github.com/cloud-hypervisor/cloud-hypervisor/blob/master/docs/fs.md) 25293b77530SSamuel Ortizdocumentation for more details on how to use virtio-fs with `cloud-hypervisor`. 25393b77530SSamuel Ortiz 25493b77530SSamuel Ortiz### Initial direct device assignment support 25593b77530SSamuel Ortiz 25693b77530SSamuel OrtizVFIO (Virtual Function I/O) is a kernel framework that exposes direct device 25793b77530SSamuel Ortizaccess to userspace. `cloud-hypervisor` uses VFIO to directly assign host 25893b77530SSamuel Ortizphysical devices into its guest. 25993b77530SSamuel Ortiz 2608ec89bc8SRob BradfordSee our [VFIO](https://github.com/cloud-hypervisor/cloud-hypervisor/blob/master/docs/vfio.md) 26193b77530SSamuel Ortizdocumentation for more detail on how to directly assign host devices to 26293b77530SSamuel Ortiz`cloud-hypervisor` guests. 26393b77530SSamuel Ortiz 26493b77530SSamuel Ortiz### Userspace IOAPIC 26593b77530SSamuel Ortiz 26693b77530SSamuel Ortiz`cloud-hypervisor` supports a so-called split IRQ chip implementation by 26793b77530SSamuel Ortizimplementing support for the [IOAPIC](https://wiki.osdev.org/IOAPIC). 26893b77530SSamuel OrtizBy moving part of the IRQ chip implementation from kernel space to user space, 26993b77530SSamuel Ortizthe IRQ chip emulation does not always run in a fully privileged mode. 27093b77530SSamuel Ortiz 27193b77530SSamuel Ortiz### Virtual persistent memory 27293b77530SSamuel Ortiz 27393b77530SSamuel OrtizThe `virtio-pmem` implementation emulates a virtual persistent memory device 27493b77530SSamuel Ortizthat `cloud-hypervisor` can e.g. boot from. Booting from a `virtio-pmem` device 27593b77530SSamuel Ortizallows to bypass the guest page cache and improve the guest memory footprint. 27693b77530SSamuel Ortiz 27793b77530SSamuel Ortiz### Linux kernel bzImage 27893b77530SSamuel Ortiz 27993b77530SSamuel OrtizThe `cloud-hypervisor` linux kernel loader now supports direct kernel boot from 28093b77530SSamuel Ortiz`bzImage` kernel images, which is usually the format that Linux distributions 28193b77530SSamuel Ortizuse to ship their kernels. For example, this allows for booting from the host 28293b77530SSamuel Ortizdistribution kernel image. 28393b77530SSamuel Ortiz 28493b77530SSamuel Ortiz### Console over virtio 28593b77530SSamuel Ortiz 28693b77530SSamuel Ortiz`cloud-hypervisor` now exposes a `virtio-console` device to the guest. Although 28793b77530SSamuel Ortizusing this device as a guest console can potentially cut some early boot 28893b77530SSamuel Ortizmessages, it can reduce the guest boot time and provides a complete console 28993b77530SSamuel Ortizimplementation. 29093b77530SSamuel Ortiz 29193b77530SSamuel OrtizThe `virtio-console` device is enabled by default for the guest console. 29293b77530SSamuel OrtizSwitching back to the legacy serial port is done by selecting 29393b77530SSamuel Ortiz`--serial tty --console off` from the command line. 29493b77530SSamuel Ortiz 29593b77530SSamuel Ortiz### Unit testing 29693b77530SSamuel Ortiz 29793b77530SSamuel OrtizWe now run all unit tests from all our crates directly from our CI. 29893b77530SSamuel Ortiz 29993b77530SSamuel Ortiz### Integration tests parallelization 30093b77530SSamuel Ortiz 30193b77530SSamuel OrtizThe CI cycle run time has been significantly reduced by refactoring our 30293b77530SSamuel Ortizintegration tests; allowing them to all be run in parallel. 303