Skip to content

Tags: firecracker-microvm/firecracker

Tags

v1.11.0

Toggle v1.11.0's commit message
Added

* [#4987](#4987): Reset
  physical counter register (`CNTPCT_EL0`) on VM startup. This avoids VM reading
  the host physical counter value. This is only possible on 6.4 and newer
  kernels. For older kernels physical counter will still be passed to the guest
  unmodified. See more info
  [here](https://github.com/firecracker-microvm/firecracker/blob/main/docs/prod-host-setup.md#arm-only-vm-physical-counter-behaviour)
* [#5088](#5088): Added
  AMD Genoa as a supported and tested platform for Firecracker.

Changed

* [#4913](#4913): Removed
  unnecessary fields (`max_connections` and `max_pending_resets`) from the
  snapshot format, bumping the snapshot version to 5.0.0. Users need to
  regenerate snapshots.
* [#4926](#4926): Replace
  underlying implementation for seccompiler from in house one in favor of
  `libseccomp` which produces smaller and more optimized BPF code.

Deprecated

Removed

Fixed

* [#4921](#4921): Fixed
  swagger `CpuConfig` definition to include missing aarch64-specific fields.
* [#4916](#4916): Fixed
  `IovDeque` implementation to work with any host page size. This fixes
  virtio-net device on non 4K host kernels.
* [#4991](#4991): Fixed
  `mem_size_mib` and `track_dirty_pages` being mandatory for all
  `PATCH /machine-config` requests. Now, they can be omitted which leaves these
  parts of the machine configuration unchanged.
* [#5007](#5007): Fixed
  watchdog softlockup warning on x86_64 guests when a vCPU is paused during GDB
  debugging.
* [#5021](#5021) If a
  balloon device is inflated post UFFD-backed snapshot restore, Firecracker now
  causes `remove` UFFD messages to be sent to the UFFD handler. Previously, no
  such message would be sent.
* [#5034](#5034): Fix an
  integer underflow in the jailer when computing the value it passes to
  Firecracker's `--parent-cpu-time-us` values, which caused development builds
  of Firecracker to crash (but production builds were unaffected as underflows
  do not panic in release mode).
* [#5045](#5045): Fixed
  an issue where firecracker intermittently receives SIGHUP when using jailer
  with `--new-pid-ns` but without `--daemonize`.
* [#4995](#4995):
  Firecracker no longer overwrites CPUID leaf 0x80000000 when running AMD
  hardware, meaning the guest can now discover a greater range of CPUID leaves
  in the extended function range (this range is host kernel dependent).
* [#5046](#5046): Retry
  KVM_CREATE_VM on EINTR that occasionally happen on heavily loaded hosts to
  improve reliability of microVM creation.
* [#5052](#5052): Build
  the empty seccomp policy as default for debug builds to avoid crashes on
  syscalls introduced by debug assertions from Rust 1.80.0.

v1.12.0-dev

Toggle v1.12.0-dev's commit message
Started development of v1.12

v1.10.1

Toggle v1.10.1's commit message
Changed

* [#4907](#4907): Bump
  snapshot version to 4.0.0.

v1.11.0-dev

Toggle v1.11.0-dev's commit message
Started development of v1.11.0

v1.10.0

Toggle v1.10.0's commit message
Added

* [#4834](#4834): Add
  `VIRTIO_NET_F_RX_MRGBUF` support to the `virtio-net` device. When this feature
  is negotiated, guest `virtio-net` driver can perform more efficient memory
  management which in turn improves RX and TX performance.
* [#4460](#4460): Add a
  call to
  [`KVM_KVMCLOCK_CTRL`](https://docs.kernel.org/virt/kvm/api.html#kvm-kvmclock-ctrl)
  after pausing vCPUs on x86_64 architectures. This ioctl sets a flag in the KVM
  state of the vCPU indicating that it has been paused by the host userspace. In
  guests that use kvmclock, the soft lockup watchdog checks this flag. If it is
  set, it won't trigger the lockup condition. Calling the ioctl for guests that
  don't use kvmclock will fail. These failures are not fatal. We log the failure
  and increase the `vcpu.kvmclock_ctrl_fails` metric.
* [#4869](#4869): Added
  support for Aarch64 systems which feature CPU caches with a number of sets
  higher than `u16::MAX`.
* [#4797](#4797),
  [#4854](#4854): Added
  GDB debugging support for a microVM guest kernel. Please see our
  [GDB debugging documentation](docs/gdb-debugging.md) for more information.

Changed

* [#4844](#4844): Upgrade
  `virtio-net` device to use `readv` syscall to avoid unnecessary memory copies
  on RX path, increasing the RX performance.

Deprecated

Removed

* [#4804](#4804): Drop
  Support for guest kernel 4.14. Linux 4.14 reached end-of-life in
  [January 2024](https://lore.kernel.org/lkml/2024011046-ecology-tiptoeing-ce50@gregkh/)
  The minimum supported guest kernel now is 5.10.

Fixed

* [#4796](#4796): Fixed
  Vsock not notifying guest about `TRANSPORT_RESET_EVENT` event after snapshot
  restore. This resulted in guest waiting indefinitely on a connection which was
  reset during snapshot creation.
* [#4790](#4790): v1.9.0
  was missing most of the debugging information in the debuginfo file, due to a
  change in the Cargo defaults. This has been corrected.
* [#4826](#4826): Add
  missing configuration of tap offload features when restoring from a snapshot.
  Setting the features was previously
  [moved](49ed5ea)
  from net device creation to device activation time, but it was not reflected
  in the restore path. This was leading to inability to connect to the restored
  VM if the offload features were used.

v1.9.1

Toggle v1.9.1's commit message
Fixed

* [#4824](#4824): Add
  missing configuration of tap offload features when restoring from a snapshot.
  Setting the features was previously
  [moved](49ed5ea)
  from net device creation to device activation time, but it was not reflected
  in the restore path. This was leading to inability to connect to the restored
  VM if the offload features were used.
* [#4829](#4829): v1.9.0
  was missing most of the debugging information in the debuginfo file, due to a
  change in the Cargo defaults. This has been corrected.

v1.9.0

Toggle v1.9.0's commit message
Added

* [#4687](#4687): Added
  VMGenID support for microVMs running on ARM hosts with 6.1 guest kernels.
  Support for VMGenID via DeviceTree bindings exists only on mainline 6.10 Linux
  onwards. Users of Firecracker will need to backport the relevant patches on
  top of their 6.1 kernels to make use of the feature.
* [#4732](#4732),
  [#4733](#4733),
  [#4741](#4741),
  [#4746](#4746): Added
  official support for 6.1 microVM guest kernels.

Changed

Deprecated

* Support for guest kernel 4.14 is now deprecated. We will completely remove
  4.14 support with Firecracker version v1.10

Removed

* [#4689](#4689): Drop
  support for host kernel 4.14. Linux 4.14 reached end-of-life in
  [January 2024](https://lore.kernel.org/lkml/2024011046-ecology-tiptoeing-ce50@gregkh/).
  The minimum supported kernel now is 5.10. Guest kernel 4.14 is still
  supported.

Fixed

* [4680](#4680): Fixed an
  issue
  ([#4659](#4659))
  where the virtio-net device implementation would always assume the guest
  accepts all VirtIO features the device offers. This is always true with the
  Linux guest kernels we are testing but other kernels, like FreeBSD make
  different assumptions. This PR fixes the emulation code to set the TAP
  features based on the features accepted by the guest.

v1.10.0-dev

Toggle v1.10.0-dev's commit message
Started development of v1.10

v1.8.0

Toggle v1.8.0's commit message
Added

* [#4428](#4428): Added
  ACPI support to Firecracker for x86_64 microVMs. Currently, we pass ACPI
  tables with information about the available vCPUs, interrupt controllers,
  VirtIO and legacy x86 devices to the guest. This allows booting kernels
  without MPTable support. Please see our
  [kernel policy documentation](docs/kernel-policy.md) for more information
  regarding relevant kernel configurations.
* [#4487](#4487): Added
  support for the Virtual Machine Generation Identifier (VMGenID) device on
  x86_64 platforms. VMGenID is a virtual device that allows VMMs to notify
  guests when they are resumed from a snapshot. Linux includes VMGenID support
  since version 5.18. It uses notifications from the device to reseed its
  internal CSPRNG. Please refer to
  [snapshot support](docs/snapshotting/snapshot-support.md) and
  [random for clones](docs/snapshotting/random-for-clones.md) documention for
  more info on VMGenID. VMGenID state is part of the snapshot format of
  Firecracker. As a result, Firecracker snapshot version is now 2.0.0.

Changed

* [#4492](#4492): Changed
  `--config` parameter of `cpu-template-helper` optional. Users no longer need
  to prepare kernel, rootfs and Firecracker configuration files to use
  `cpu-template-helper`.
* [#4537](#4537) Changed
  T2CL template to pass through bit 27 and 28 of `MSR_IA32_ARCH_CAPABILITIES`
  (`RFDS_NO` and `RFDS_CLEAR`) since KVM consider they are able to be passed
  through and T2CL isn't designed for secure snapshot migration between
  different processors.
* [#4537](#4537) Changed
  T2S template to set bit 27 of `MSR_IA32_ARCH_CAPABILITIES` (`RFDS_NO`) to 1
  since it assumes that the fleet only consists of processors that are not
  affected by RFDS.
* [#4388](#4388): Avoid
  setting `kvm_immediate_exit` to 1 if are already handling an exit, or if the
  vCPU is stopped. This avoids a spurious KVM exit upon restoring snapshots.
* [#4567](#4567): Do not
  initialize vCPUs in powered-off state upon snapshot restore. No functional
  change, as vCPU initialization is only relevant for the booted case (where the
  guest expects CPUs to be powered off).

Deprecated

* Firecracker's `--start-time-cpu-us` and `--start-time-us` parameters are
  deprecated and will be removed in v2.0 or later. They are used by the jailer
  to pass the value that should be subtracted from the (CPU) time, when emitting
  the `start_time_us` and `start_time_cpu_us` metrics. These parameters were
  never meant to be used by end customers, and we recommend doing any such time
  adjustments outside Firecracker.
* Booting with microVM kernels that rely on MPTable on x86_64 is deprecated and
  support will be removed in v2.0 or later. We suggest to users of Firecracker
  to use guest kernels with ACPI support. For x86_64 microVMs, ACPI will be the
  only way Firecracker passes hardware information to the guest once MPTable
  support is removed.

Fixed

* [#4526](#4526): Added a
  check in the network TX path that the size of the network frames the guest
  passes to us is not bigger than the maximum frame the device expects to
  handle. On the TX path, we copy frames destined to MMDS from guest memory to
  Firecracker memory. Without the check, a mis-behaving virtio-net driver could
  cause an increase in the memory footprint of the Firecracker process. Now, if
  we receive such a frame, we ignore it and increase `Net::tx_malformed_frames`
  metric.
* [#4536](#4536): Make
  the first differential snapshot taken after a full snapshot contain only the
  set of memory pages changed since the full snapshot. Previously, these
  differential snapshots would contain all memory pages. This will result in
  potentially much smaller differential snapshots after a full snapshot.
* [#4578](#4578): Fix
  UFFD support not being forward-compatible with new ioctl options introduced in
  Linux 6.6. See also
  bytecodealliance/userfaultfd-rs#61.
* [#4630](#4630): On
  x86_64, when taking a snapshot, if a vCPU has MSR_IA32_TSC_DEADLINE set to 0,
  Firecracker will replace it with the MSR_IA32_TSC value from the same vCPU.
  This is to guarantee that the vCPU will continue receiving TSC interrupts
  after restoring from the snapshot even if an interrupt is lost when taking a
  snapshot.
* [#4666](#4666): Fixed
  Firecracker sometimes restoring `MSR_IA32_TSC_DEADLINE` before `MSR_IA32_TSC`.
  Now it always restores `MSR_IA32_TSC_DEADLINE` MSR after `MSR_IA32_TSC`, as
  KVM relies on the guest TSC for correct restoration of
  `MSR_IA32_TSC_DEADLINE`. This fixed guests using the `TSC_DEADLINE` hardware
  feature receiving incorrect timer interrupts after snapshot restoration, which
  could lead to them seemingly getting stuck in sleep-related syscalls (see also
  #4099).

v1.9.0-dev

Toggle v1.9.0-dev's commit message
Started development of v1.9