Added
- #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 for more information regarding relevant kernel configurations.
- #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 and random for clones 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: Changed
--config
parameter ofcpu-template-helper
optional. Users no longer need to prepare kernel, rootfs and Firecracker configuration files to usecpu-template-helper
. - #4537 Changed T2CL template to pass through bit 27 and 28 of
MSR_IA32_ARCH_CAPABILITIES
(RFDS_NO
andRFDS_CLEAR
) since KVM consider they are able to be passed through and T2CL isn't designed for secure snapshot migration between different processors. - #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: 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: 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 thestart_time_us
andstart_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: 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: 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: Fix UFFD support not being forward-compatible with new ioctl options introduced in Linux 6.6. See also bytecodealliance/userfaultfd-rs#61.
- #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: Fixed Firecracker sometimes restoring
MSR_IA32_TSC_DEADLINE
beforeMSR_IA32_TSC
. Now it always restoresMSR_IA32_TSC_DEADLINE
MSR afterMSR_IA32_TSC
, as KVM relies on the guest TSC for correct restoration ofMSR_IA32_TSC_DEADLINE
. This fixed guests using theTSC_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).