Tags · firecracker-microvm/firecracker · GitHub
Skip to content

Tags: firecracker-microvm/firecracker

Tags

v1.17.0

Toggle v1.17.0's commit message
Added

* [#5891](#5891): Added
  support for virtio device reset.
* [#5983](#5983): Add two
  optional metrics fields, set via `PUT /metrics` or a config file: `emit_id`
  emits the microVM instance id under a top-level `id` field, and `properties`
  emits operator-defined key-value pairs under a top-level `properties` field.
  Each is opt-in and independent. See [metrics documentation](docs/metrics.md).
* [#6003](#6003): Added a
  new option `Transparent` for the `huge_pages` setting. If set, Firecracker
  will use transparent huge pages for the guest memory via
  `madvise(MADV_HUGEPAGE)`. Guest memory must be a multiple of 2MB when using
  this option.
* [#6013](#6013),
  [#6017](#6017),
  [#6021](#6021): Added
  official support for 6.18 microVM guest kernels.
* [#6037](#6037): Added
  support for booting `bzImage` guest kernels on x86_64, in addition to the
  existing uncompressed ELF (`vmlinux`) images. The kernel image format is
  detected automatically, so no configuration change is required.
* [#6064](#6064): Added
  the `huge_pages` field to `PUT /snapshot/load`, allowing the restored microVM
  to reuse the snapshot's host page configuration or select `None`,
  `Transparent`, or `2M`.
* [#6109](#6109): Added
  an optional `sync_snapshot_files` field to the `PUT /snapshot/create` API,
  defaulting to `true`. It controls whether the snapshot state and guest memory
  files are synced to disk (`fsync`) before the request returns. Setting it to
  `false` returns without waiting for the writeback, making snapshot creation
  faster at the cost of durability across a host crash; the data stays in the
  host page cache, so same-host reads still see the full contents. Block device
  backing files are always `fsync`'d regardless. See
  [snapshot documentation](docs/snapshotting/snapshot-support.md).
* [#6116](#6116): On
  aarch64, enable `KVM_CAP_ARM_WRITABLE_IMP_ID_REGS` when the host kernel offers
  it (Linux 6.15 and later), adding support for custom CPU templates that modify
  the implementation ID registers (`MIDR_EL1`, `REVIDR_EL1`, `AIDR_EL1`). Such
  templates previously failed at boot with
  `Failed to set register ... Invalid argument` because KVM rejects the write
  unless the capability is enabled on the VM.
* [#6145](#6145): Added
  official support for AWS Graviton5 (m9g.metal-48xl) instances.
* [#6098](#6098): Added
  new VIRTIO_BLK_F_BLK_SIZE and VIRTIO_BLK_F_TOPOLOGY features to the
  virtio-block device. More information is in the new [block](docs/block.md)
  documentation.
* [#6142](#6142): Add
  opt-in virtio-blk discard support for writable `Sync` IO engine drives through
  the `discard` drive configuration field. See the
  [block discard documentation](docs/api_requests/block-discard.md).

Changed

* [#6115](#6115): Changed
  the T2S CPU template to set the `FB_CLEAR` bit of `MSR_IA32_ARCH_CAPABILITIES`
  to 1. This lets guest kernels recognize that the `VERW` instruction clears
  fill buffers, including on host kernels before v6.4 that cannot expose
  `FLUSH_L1D`.
* [#6172](#6172): Gate
  CLIRD_EL1 override to only happen on host kernels equal or newer than 6.10
  release. This aliviates the guest performance regression seen on host kernels
  in range \[6.3..6.10) correlated to incorrect cpu cache topology presented to
  the guest.

Deprecated

Removed

Fixed

* [#6100](#6100): Fixed
  the vsock device permanently suppressing RX (host-to-guest) delivery after a
  bare pause/resume cycle (`PATCH /vm` with `Paused` then `Resumed`, without a
  snapshot). The resume kick armed the `TRANSPORT_RESET` RX gate even though no
  reset event had been sent, so the guest could never acknowledge it and every
  new host-initiated connection made after the resume hung forever. The gate is
  now part of the persisted device state and the resume kick respects it instead
  of arming it.
* [#6174](#6174): Fixed
  `virtio-mem` leaving unplugged memory writable by the VMM, and potentially
  unmapped, on microVMs restored from a snapshot memory file. Firecracker now
  maps each slot straight to the protection it should have, with the
  `MAP_NORESERVE` flag, and aborts if the re-map fails.
* [#6174](#6174): Fixed
  `virtio-mem` discarding the whole hotpluggable region on every `UNPLUG_ALL`
  request, even when nothing was plugged. The discard is now skipped when the
  range has no plugged blocks.
* [#6176](#6176): Fixed
  `virtio-mem` leaving its block accounting inconsistent with the KVM memory
  slots if a plug or unplug request failed part way through. Firecracker now
  commits each slot's state only after its KVM update succeeds, so a partial
  failure leaves the block state and the KVM slots reflecting exactly the slots
  that were updated.
* [#5956](#5956): Fixed a
  TOCTOU race in the aarch64 jailer when setting ownership of the CPU cache and
  `MIDR_EL1` information files copied into the chroot.
* [#6076](#6076): Fixed
  memory hotplug sizes silently wrapping when converted from MiB to bytes.
  `requested_size_mib` on `PATCH /hotplug/memory` and `total_size_mib`,
  `block_size_mib` and `slot_size_mib` on `PUT /hotplug/memory` are now bounded
  to 32 bits. Values above that previously wrapped to a smaller byte count, so a
  large enough request was accepted as a 0-byte region instead of being
  rejected.
* [#6031](#6031),
  [#6041](#6041),
  [#6077](#6077): Fixed
  the vsock device re-arming its host-stream `EPOLLIN` interest while received
  data was still awaiting a guest RX buffer, which could busy-spin the event
  thread until the guest posted buffers. The device now drains the host stream
  fully across successive RX operations instead of one packet per event loop
  iteration, reducing the host-side CPU cost per gigabit of host-to-guest
  traffic by up to ~50% and improving host-to-guest throughput by ~44% (median)
  in most configurations. On single-vcpu microVMs on the newest Intel hosts
  (m7i, m8i), host-to-guest throughput may instead decrease by ~15% (median),
  where the single guest vCPU rather than the host becomes the bottleneck.
  Terminating a connection now also discards its TX buffer, so the device stops
  advertising `EPOLLOUT` for a host stream it will never write to again, which
  could otherwise busy-spin the event thread indefinitely.
* [#6086](#6086),
  [#6143](#6143): Fixed a
  deadlock in the logger: a signal handler that logs while the interrupted
  thread is already logging would hang the VMM and its API socket. This is
  reachable whenever a `SIGPIPE` is raised by Firecracker's own log write, for
  example when logging to `stdout` and the reader of that pipe exits. The logger
  now uses an `RwLock`, and `sigpipe_handler` only increments the
  `signals.sigpipe` metric instead of logging, so it no longer emits a
  `Received signal 13, code 0.` line.
* [#6120](#6120): Fixed a
  bug caused by a KVM behavior change introduced in Linux 6.13, which requires
  guest CPUID to be set before userspace reads CPUID-dependent MSRs. On x86_64
  with Linux 6.18 host kernels, Firecracker read the base values of those MSRs
  before setting guest CPUID, so KVM returned zero for such MSRs and CPU
  templates consequently used zero for bits configured for passthrough.
  Firecracker now sets guest CPUID before reading MSRs to be modified by CPU
  templates, so passthrough bits retain their KVM-provided values and features
  such as eIBRS remain exposed to the guest.

v1.16.2

Toggle v1.16.2's commit message
Added

Changed

* [#6172](#6172): Gate
  CLIRD_EL1 override to only happen on host kernels equal or newer than 6.10
  release. This aliviates the guest performance regression seen on host kernels
  in range \[6.3..6.10) correlated to incorrect cpu cache topology presented to
  the guest.
* [#6100](#6100): Bumped
  the snapshot format version. Snapshots created by this version cannot be
  loaded by 1.16.0 or 1.16.1, and snapshots created by those versions cannot be
  loaded by this one.

Deprecated

Removed

Fixed

* [#6100](#6100): Fixed
  the vsock device permanently suppressing RX (host-to-guest) delivery after a
  bare pause/resume cycle (`PATCH /vm` with `Paused` then `Resumed`, without a
  snapshot). The resume kick armed the `TRANSPORT_RESET` RX gate even though no
  reset event had been sent, so the guest could never acknowledge it and every
  new host-initiated connection made after the resume hung forever. The gate is
  now part of the persisted device state and the resume kick respects it instead
  of arming it.
* [#6174](#6174): Fixed
  `virtio-mem` leaving unplugged memory writable by the VMM, and potentially
  unmapped, on microVMs restored from a snapshot memory file. Firecracker now
  maps each slot straight to the protection it should have, with the
  `MAP_NORESERVE` flag, and aborts if the re-map fails.
* [#6174](#6174): Fixed
  `virtio-mem` discarding the whole hotpluggable region on every `UNPLUG_ALL`
  request, even when nothing was plugged. The discard is now skipped when the
  range has no plugged blocks.
* [#6176](#6176): Fixed
  `virtio-mem` leaving its block accounting inconsistent with the KVM memory
  slots if a plug or unplug request failed part way through. Firecracker now
  commits each slot's state only after its KVM update succeeds, so a partial
  failure leaves the block state and the KVM slots reflecting exactly the slots
  that were updated.
* [#5956](#5956): Fixed a
  TOCTOU race in the aarch64 jailer when setting ownership of the CPU cache and
  `MIDR_EL1` information files copied into the chroot.
* [#6076](#6076): Fixed
  memory hotplug sizes silently wrapping when converted from MiB to bytes.
  `requested_size_mib` on `PATCH /hotplug/memory` and `total_size_mib`,
  `block_size_mib` and `slot_size_mib` on `PUT /hotplug/memory` are now bounded
  to 32 bits. Values above that previously wrapped to a smaller byte count, so a
  large enough request was accepted as a 0-byte region instead of being
  rejected.
* [#6031](#6031),
  [#6041](#6041),
  [#6077](#6077): Fixed
  the vsock device re-arming its host-stream `EPOLLIN` interest while received
  data was still awaiting a guest RX buffer, which could busy-spin the event
  thread until the guest posted buffers. The device now drains the host stream
  fully across successive RX operations instead of one packet per event loop
  iteration, reducing the host-side CPU cost per gigabit of host-to-guest
  traffic by up to ~50% and improving host-to-guest throughput by ~44% (median)
  in most configurations. On single-vcpu microVMs on the newest Intel hosts
  (m7i, m8i), host-to-guest throughput may instead decrease by ~15% (median),
  where the single guest vCPU rather than the host becomes the bottleneck.
  Terminating a connection now also discards its TX buffer, so the device stops
  advertising `EPOLLOUT` for a host stream it will never write to again, which
  could otherwise busy-spin the event thread indefinitely.
* [#6086](#6086),
  [#6143](#6143): Fixed a
  deadlock in the logger: a signal handler that logs while the interrupted
  thread is already logging would hang the VMM and its API socket. This is
  reachable whenever a `SIGPIPE` is raised by Firecracker's own log write, for
  example when logging to `stdout` and the reader of that pipe exits. The logger
  now uses an `RwLock`, and `sigpipe_handler` only increments the
  `signals.sigpipe` metric instead of logging, so it no longer emits a
  `Received signal 13, code 0.` line.
* [#6120](#6120): Fixed a
  bug caused by a KVM behavior change introduced in Linux 6.13, which requires
  guest CPUID to be set before userspace reads CPUID-dependent MSRs. On x86_64
  with Linux 6.18 host kernels, Firecracker read the base values of those MSRs
  before setting guest CPUID, so KVM returned zero for such MSRs and CPU
  templates consequently used zero for bits configured for passthrough.
  Firecracker now sets guest CPUID before reading MSRs to be modified by CPU
  templates, so passthrough bits retain their KVM-provided values and features
  such as eIBRS remain exposed to the guest.

v1.16.1

Toggle v1.16.1's commit message

Verified

This tag was signed with the committer’s verified signature.
not4s Jay Chung
Fixed

* [#5959](#5959):
  Reverted the use of `O_NOFOLLOW` for the jailer's cgroup and network namespace
  file operations, so symlinks are again allowed in these paths.
* [#5958](#5958): Fixed a
  bug that caused vsock guest-to-host connections to time out after snapshot
  restore, triggered by taking a snapshot with a TX descriptor in-flight. On
  restore the device now replays the TX queue notification so in-flight TX
  descriptors are re-processed and notification suppression is re-armed.

v1.16.0

Toggle v1.16.0's commit message
Added

* [#5786](#5786): Added
  developer preview support for hotplugging and hot-unplugging PCI virtio
  devices (block, pmem, net) on a running microVM. The guest must manually
  rescan the PCI bus after hotplug and remove the device before unplug since no
  automatic notification mechanism is implemented yet. More information can be
  found in the [Device Hotplugging](docs/device-hotplug.md) documentation page.
* [#5323](#5323): Add
  support for Vsock Unix domain socket path overriding on snapshot restore. More
  information can be found in the
  [docs](docs/vsock.md/#unix-domain-socket-renaming).
* [#5824](#5824): Add
  optional rate limiting to serial console output, configurable via the
  `rate_limiter` field on `PUT /serial`. A new metric is exposed under `uart`:
  `rate_limiter_dropped_bytes`.
* [#5799](#5799): Add
  per-callsite rate limiting for error, warn, and info level log messages. Each
  callsite independently allows up to 10 messages per 5-second window. When
  logging resumes after suppression, a warn-level summary reports the count of
  suppressed messages. A new `rate_limited_log_count` metric tracks the total
  number of suppressed messages.
* [#5789](#5789): Add
  rate-limiter support to virtio-pmem device to allow control over I/O bandwidth
  generated by the FLUSH requests from the guest.
* [#5872](#5872): Add
  notification suppression support in the virtio-vsock device via the EVENT_IDX
  virtio feature to reduce device overhead.
* [#5828](#5828):
  Advertise MTU to the guest via `VIRTIO_NET_F_MTU` using a new optional `mtu`
  field in the `network-interfaces` API. When set, a compatible guest driver
  will configure the interface with the specified MTU.
* [#5906](#5906): Add
  `rng-seed` FDT node for aarch64 guests which provides an initial random seed
  for the guest to use. This helps older aarch64 machines which do not have
  hardware random generators.
* Added support for Linux 6.18 host kernels alongside the existing 5.10 and 6.1
  host kernels. See the [kernel support policy](docs/kernel-policy.md) for
  details.

Changed

Deprecated

Removed

Fixed

* [#5762](#5762): Cap
  virtio-rng per-request entropy to 64 KiB. Previously, a guest could construct
  a descriptor chain that caused Firecracker to allocate more host memory than
  the guest actually provided, potentially leading to excessive host memory
  consumption.
* [#5760](#5760): Fixed
  HID (Hardware ID) of VMGenID device so that it aligns with the upstream Linux
  kernel. This caused the driver not to be bound correctly to the device prior
  to Linux kernel 6.10.
* [#5764](#5764): Fixed a
  bug that caused the guest UART driver to get stuck and stop transmitting after
  snapshot restore. The bug was triggered by taking a snapshot while a serial
  transmission was taking place. On restore the driver would wait for a TX
  interrupt that would never arrive and no output would appear in the serial
  console.
* [#5780](#5780): Fixed
  missing `/sys/devices/system/cpu/cpu*/cache/*` in aarch64 guests when running
  on host kernels >= 6.3 with guest kernels >= 6.1.156.
* [#5793](#5793): Fixed
  virtio-mem plug/unplug skipping KVM slot updates for memory blocks not aligned
  to a slot boundary. On plug, this could leave hotplugged memory inaccessible
  to the guest. On unplug, the guest could retain access to memory that
  Firecracker considered freed.
* [#5794](#5794): Bound
  balloon statistics descriptor length to prevent a guest-controlled oversized
  descriptor from temporarily stalling the VMM event loop. Only affects microVMs
  with `stats_polling_interval_s > 0`.
* [#5809](#5809): Fixed a
  bug on host Linux >= 5.16 for x86_64 guests using the `kvm-clock` clock source
  causing the monotonic clock to jump on restore by the wall-clock time elapsed
  since the snapshot was taken. Users using `kvm-clock` that want to explicitly
  advance the clock with `KVM_CLOCK_REALTIME` can opt back in using the new
  `clock_realtime` flag in `LoadSnapshot` API.
* [#5738](#5738): Fixed
  x86_64 snapshot serialization to cover the full KVM custom MSR range
  (0x4b564d00-0x4b564dff) instead of a small subset. Previously, some KVM MSRs
  such as MSR_KVM_ASYNC_PF_INT and MSR_KVM_ASYNC_PF_ACK were missing from
  snapshots, which could cause issues on restore.
* [#5818](#5818): Enforce
  the virtio device initialization sequence in the PCI transport, matching the
  existing MMIO transport behavior. The PCI transport now validates device
  status transitions, rejects queue configuration writes outside the FEATURES_OK
  to DRIVER_OK window, rejects feature negotiation outside the DRIVER state,
  blocks re-initialization after a failed reset, and sets DEVICE_NEEDS_RESET
  when device activation fails.
* [#5818](#5818): Reject
  device status writes that clear previously set bits in the MMIO transport,
  except for reset.
* [#5884](#5884):
  Corrected the OpenAPI spec for `PATCH /balloon/hinting/start` and
  `PATCH /balloon/hinting/stop` to declare `204 No Content` instead of `200`,
  matching the actual runtime response.
* [#5882](#5882): Fixed a
  race in the vsock device where, after snapshot restore, the RX queue could
  deliver data to the guest before it had acknowledged the TRANSPORT_RESET
  event, causing established connections to break.

v1.15.1

Toggle v1.15.1's commit message
Fixed

* [#5762](#5762): Cap
  virtio-rng per-request entropy to 64 KiB. Previously, a guest could construct
  a descriptor chain that caused Firecracker to allocate more host memory than
  the guest actually provided, potentially leading to excessive host memory
  consumption.
* [#XXXX](https://github.com/firecracker-microvm/firecracker/pull/XXXX): Enforce
  the virtio device initialization sequence in the PCI transport, matching the
  existing MMIO transport behavior. The PCI transport now validates device
  status transitions, rejects queue configuration writes outside the FEATURES_OK
  to DRIVER_OK window, rejects feature negotiation outside the DRIVER state,
  blocks re-initialization after a failed reset, and sets DEVICE_NEEDS_RESET
  when device activation fails.
* [#XXXX](https://github.com/firecracker-microvm/firecracker/pull/XXXX): Reject
  device status writes that clear previously set bits in the MMIO transport,
  except for reset.
* [#5780](#5780): Fixed
  missing `/sys/devices/system/cpu/cpu*/cache/*` in aarch64 guests when running
  on host kernels >= 6.3 with guest kernels >= 6.1.156.
* [#5793](#5793): Fixed
  virtio-mem plug/unplug skipping KVM slot updates for memory blocks not aligned
  to a slot boundary. On plug, this could leave hotplugged memory inaccessible
  to the guest. On unplug, the guest could retain access to memory that
  Firecracker considered freed.
* [#5794](#5794): Bound
  balloon statistics descriptor length to prevent a guest-controlled oversized
  descriptor from temporarily stalling the VMM event loop. Only affects microVMs
  with `stats_polling_interval_s > 0`.
* [#5809](#5809): Fixed a
  bug on host Linux >= 5.16 for x86_64 guests using the `kvm-clock` clock source
  causing the monotonic clock to jump on restore by the wall-clock time elapsed
  since the snapshot was taken. Users using `kvm-clock` that want to explicitly
  advance the clock with `KVM_CLOCK_REALTIME` can opt back in using the new
  `clock_realtime` flag in `LoadSnapshot` API.

v1.14.4

Toggle v1.14.4's commit message
Fixed

* [#5762](#5762): Cap
  virtio-rng per-request entropy to 64 KiB. Previously, a guest could construct
  a descriptor chain that caused Firecracker to allocate more host memory than
  the guest actually provided, potentially leading to excessive host memory
  consumption.
* [#XXXX](https://github.com/firecracker-microvm/firecracker/pull/XXXX): Enforce
  the virtio device initialization sequence in the PCI transport, matching the
  existing MMIO transport behavior. The PCI transport now validates device
  status transitions, rejects queue configuration writes outside the FEATURES_OK
  to DRIVER_OK window, rejects feature negotiation outside the DRIVER state,
  blocks re-initialization after a failed reset, and sets DEVICE_NEEDS_RESET
  when device activation fails.
* [#XXXX](https://github.com/firecracker-microvm/firecracker/pull/XXXX): Reject
  device status writes that clear previously set bits in the MMIO transport,
  except for reset.
* [#5780](#5780): Fixed
  missing `/sys/devices/system/cpu/cpu*/cache/*` in aarch64 guests when running
  on host kernels >= 6.3 with guest kernels >= 6.1.156.
* [#5793](#5793): Fixed
  virtio-mem plug/unplug skipping KVM slot updates for memory blocks not aligned
  to a slot boundary. On plug, this could leave hotplugged memory inaccessible
  to the guest. On unplug, the guest could retain access to memory that
  Firecracker considered freed.
* [#5794](#5794): Bound
  balloon statistics descriptor length to prevent a guest-controlled oversized
  descriptor from temporarily stalling the VMM event loop. Only affects microVMs
  with `stats_polling_interval_s > 0`.
* [#5809](#5809): Fixed a
  bug on host Linux >= 5.16 for x86_64 guests using the `kvm-clock` clock source
  causing the monotonic clock to jump on restore by the wall-clock time elapsed
  since the snapshot was taken. Users using `kvm-clock` that want to explicitly
  advance the clock with `KVM_CLOCK_REALTIME` can opt back in using the new
  `clock_realtime` flag in `LoadSnapshot` API.

v1.14.3

Toggle v1.14.3's commit message
Fixed

* [#5739](#5739): Fixed
  validation of TCP SYN options length when MMDS is enabled.

v1.15.0

Toggle v1.15.0's commit message
Added

* [#5510](#5510),
  [#5593](#5593),
  [#5564](#5564): Add
  support for the
  [VMClock device](https://uapi-group.org/specifications/specs/vmclock). The
  implementation supports the snapshot safety features proposed
  [here](https://lore.kernel.org/lkml/20260107132514.437-1-bchalios@amazon.es/),
  but doesn't provide currently any clock-specific information for helping the
  guest synchronize its clocks. More information can be found in
  [docs](docs/snapshotting/snapshot-support.md#userspace-notifications-of-loading-virtual-machine-snapshots).

Changed

* [#5564](#5564): which
  added support for VMClock, uses one extra GSI for the VMClock device itself
  which reduces the available GSIs for VirtIO devices. New maximum values is 92
  devices on Aarch64 and 17 devices on x86.
* [#5631](#5631): Update
  binary copy process inside Jailer to disallow symlinks and hardlinks at the
  destination path and change ownership of the copied binary to the specified
  uid/gid.

Deprecated

Removed

Fixed

* [#5698](#5698): Fixed
  the possible ENXIO error which could occur during file open operation if the
  underlying file is FIFO without active readers already attached.
* [#5688](#5688): Fixed
  vsock local port reuse across snapshot restore by saving the last used local
  port into the snapshot, so users need to regenerate snapshots.
* [#5705](#5705): Fixed a
  bug that caused Firecracker to corrupt the memory files of differential
  snapshots for VMs with multiple memory slots. This affected VMs using memory
  hot-plugging or any x86 VMs with a memory size larger than 3GiB.
* [#5739](#5739): Fixed
  validation of TCP SYN options length when MMDS is enabled.

v1.14.2

Toggle v1.14.2's commit message
Fixed

* [#5698](#5698): Fixed
  the possible ENXIO error which could occur during file open operation if the
  underlying file is FIFO without active readers already attached.
* [#5705](#5705): Fixed a
  bug that caused Firecracker to corrupt the memory files of differential
  snapshots for VMs with multiple memory slots. This affected VMs using memory
  hot-plugging or any x86 VMs with a memory size larger than 3GiB.

v1.16.0-dev

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