Releases: firecracker-microvm/firecracker
Releases · firecracker-microvm/firecracker
Firecracker v1.3.0
Update 03-03: This release contains a bug when trying to snapshot with target_version=1.3.0, which results in an error and no snapshot taken. To mitigate this bug, leave target_version empty or use target_version=1.2.0 We are currently working on a fix.
Added
- Introduced T2CL (Intel) and T2A (AMD) CPU templates to provide
instruction set feature parity between Intel and AMD CPUs when using
these templates. - Added Graviton3 support (c7g instance type).
Changed
- Improved error message when invalid network backend provided.
- Improved TCP throughput by between 5% and 15% (depending on CPU) by using
scatter-gather I/O in the net device's TX path. - Upgraded Rust toolchain from 1.64.0 to 1.66.0.
- Made seccompiler output bit-reproducible.
Fixed
- Fixed feature flags in T2 CPU template on Intel Ice Lake.
Firecracker v1.1.4
Fixed
- Fixed a bug on ARM64 hosts where the upper 64bits of the V0-V31 FL/SIMD
registers were not saved correctly when taking a snapshot, potentially leading
to data loss. This change invalidates all ARM64 snapshots taken with versions
of Firecracker <= 1.1.3.
Firecracker v1.2.0
Added
- Added a new CPU template called
T2S. This exposes the same CPUID asT2to
the Guest and also overwrites theARCH_CAPABILITIESMSR to expose a reduced
set of capabilities. With regards to hardware vulnerabilities and mitigations,
the Guest vCPU will apear to look like a Skylake CPU, making it safe to
snapshot uVMs running on a newer host CPU (Cascade Lake) and restore on a host
that has a Skylake CPU. - Added a new CLI option
--metrics-path PATH. It accepts a file parameter
where metrics will be sent to. - Added baselines for m6i.metal and m6a.metal for all long running performance
tests. - Releases now include debuginfo files.
Changed
- Changed the jailer option
--exec-fileto fail if the filename does not
contain the stringfirecrackerto prevent from running non-firecracker
binaries. - Upgraded Rust toolchain from 1.52.1 to 1.64.0.
- Switched to specifying our dependencies using caret requirements instead
of comparison requirements. - Updated all dependencies to their respective newest versions.
Fixed
- Made the
T2template more robust by explicitly disabling additional
CPUID flags that should be off but were missed initially or that were
not available in the spec when the template was created. - Now MAC address is correctly displayed when queried with GET
/vm/config
if left unspecified in both pre and post snapshot states. - Fixed a self-DoS scenario in the virtio-queue code by reporting and
terminating execution when the number of available descriptors reported
by the driver is higher than the queue size. - Fixed the bad handling of kernel cmdline parameters when init arguments were
provided in theboot_argsfield of the JSON body of the PUT/boot-source
request. - Fixed a bug on ARM64 hosts where the upper 64bits of the V0-V31 FL/SIMD
registers were not saved correctly when taking a snapshot, potentially
leading to data loss. This change invalidates all ARM64 snapshots taken
with versions of Firecracker <= 1.1.3. - Improved stability and security when saving CPU MSRs in snapshots.
Firecracker v1.0.2
Fixed
- Fixed the bad handling of kernel cmdline parameters when init arguments were
provided in theboot_argsfield of the JSON body of the PUT/boot-source
request.
Firecracker v1.1.3
Changed
- Upgraded Rust version to 1.64. This enables us to keep supporting v1.1. [not reflected in CHANGELOG.md]
Fixed
- Fixed the bad handling of kernel cmdline parameters when init arguments were
provided in theboot_argsfield of the JSON body of the PUT/boot-source
request.
Firecracker v1.1.2
Fixed
- Fixed a self-DoS scenario in the virtio-queue code by reporting and
terminating execution when the number of available descriptors reported
by the driver is higher than the queue size.
Firecracker v1.0.1
Fixed
- Fixed a self-DoS scenario in the virtio-queue code by reporting and
terminating execution when the number of available descriptors reported
by the driver is higher than the queue size.
Firecracker v1.1.1
Added
- Add a new CPU template called
T2S. This exposes the same CPUID asT2
to the Guest and also overwrites theARCH_CAPABILITIESMSR to expose a
reduced set of capabilities. With regards to hardware vulnerabilities
and mitigations, the Guest vCPU will apear to look like a Skylake CPU,
making it safe to snapshot uVMs running on a newer host CPU (Cascade Lake)
and restore on a host that has a Skylake CPU.
Fixed
- Make the
T2template more robust by explicitly disabling additional
CPUID flags that should be off but were missed initially or that were
not available in the spec when the template was created.
Firecracker v1.1.0
Added
- The API
PATCHmethods formachine-configcan now be used to reset
thecpu_templateto"None". Until this change there was no way to
reset thecpu_templateonce it was set. - Added a
rebase-snaptool for rebasing a diff snapshot over a base
snapshot. - Mmds version is persisted across snapshot-restore. Snapshot compatibility is
preserved bidirectionally, to and from a Firecracker version that does not
support persisting the Mmds version. In such cases, the default V1 option is
used. - Added
--mmds-size-limitfor limiting the mmds data store size instead of
piggy-backing on--http-api-max-payload-size. If left unconfigured it
defaults to the value of--http-api-max-payload-size, to provide backwards
compatibility. - Added optional
mem_backendbody field inPUTrequests on/snapshot/load.
This new parameter is an object that defines the configuration of the backend
responsible for handling memory loading during snapshot restore. The
mem_backendparameter containsbackend_typeandbackend_pathrequired
fields.backend_typeis an enum that can take eitherFileorUffdas
value. Interpretation ofbackend_pathfield depends on the value of
backend_type. IfFile, then the user must provide the path to file that
contains the guest memory to be loaded. Otherwise, ifbackend_typeisUffd,
thenbackend_pathis the path to a unix domain socket where a custom page
fault handler process is listening and expecting a UFFD to be sent by
Firecracker. The UFFD is used to handle the guest memory page faults in the
separate process. - Added logging for the snapshot/restore and async block device IO engine
features to indicate they are in development preview.
Changed
- The API
PATCHmethod for/machine-configcan be now used to change
track_dirty_pageson aarch64. - MmdsV2 is now Generally Available.
- MmdsV1 is now deprecated and will be removed in Firecracker v2.0.0.
Use MmdsV2 instead. - Deprecated
mem_file_pathbody field inPUTon/snapshot/loadrequest.
Fixed
- Fixed inconsistency that allowed the start of a microVM from a JSON file
without specifying thevcpu_countandmem_size_mibparameters for
machine-configalthough they are mandatory when configuring via the API.
Now these fields are mandatory when specifyingmachine-configin the JSON
file and when using thePUTrequest on/machine-config. - Fixed inconsistency that allowed a user to specify the
cpu_template
parameter and setsmttoTrueinmachine-configwhen starting from a
JSON file on aarch64 even though they are not permitted when usingPUTor
PATCHin the API. Now Firecracker will return an error on aarch64 ifsmt
is set toTrueor ifcpu_templateis specified. - Fixed inconsistent behaviour of the
PUTmethod for/machine-configthat
would reset thetrack_dirty_pagesparameter tofalseif it was not
specified in the JSON body of the request, but left thecpu_template
parameter intact if it was not present in the request. Now aPUTrequest
for/machine-configwill reset all optional parameters (smt,
cpu_template,track_dirty_pages) to their default values if they are
not specified in thePUTrequest. - Fixed incosistency in the swagger definition with the current state of the
/vm/configendpoint.
Firecracker v1.0.0
Added
- Added jailer option
--parent-cgroup <relative_path>to allow the placement
of microvm cgroups in custom cgroup nested hierarchies. The default value is
<exec-file>which is backwards compatible to the behavior before this
change. - Added jailer option
--cgroup-version <1|2>to support running the jailer
on systems that have cgroup-v2. Default value is1which means that if
--cgroup-versionis not specified, the jailer will try to create cgroups
on cgroup-v1 hierarchies only. - Added
--http-api-max-payload-sizeparameter to configure the maximum payload
size for PUT and PATCH requests. - Limit MMDS data store size to
--http-api-max-payload-size. - Cleanup all environment variables in Jailer.
- Added metrics for accesses to deprecated HTTP and command line API endpoints.
- Added permanent HTTP endpoint for
GETon/versionfor getting the
Firecracker version. - Added
--metadataparameter to enable MMDS content to be supplied from a file
allowing the MMDS to be used when using--no-apito disable the API server. - Checksum file for the release assets.
- Added support for custom headers to MMDS requests. Accepted headers are:
X-metadata-token, which accepts a string value that provides a session
token for MMDS requests; andX-metadata-token-ttl-seconds, which
specifies the lifetime of the session token in seconds. - Support and validation for host and guest kernel 5.10.
- A kernel support policy.
- Added
io_engineto the pre-boot block device configuration.
Possible values:Sync(the default option) orAsync(only available for
kernels newer than 5.10.51). TheAsyncvariant introduces a block device
engine that uses io_uring for executing requests asynchronously, which is in
developer preview (NOT for production use).
Seedocs/api_requests/block-io-engine.md. - Added
block.io_engine_throttled_eventsmetric for measuring the number of
virtio events throttled because of the IO engine. - New optional
versionfield to PUT requests towards/mmds/configto
configure MMDS version. Accepted values areV1andV2and default is
V1. MMDSV2is developer preview only (NOT for production use) and
it does not currently work after snapshot load. - Mandatory
network_interfacesfield to PUT requests towards
/mmds/configwhich contains a list of network interface IDs capable of
forwarding packets to MMDS.
Changed
- Removed the
--nodejailer parameter. - Deprecated
vsock_idbody field inPUTs on/vsock. - Removed the deprecated the
--seccomp-level parameter. GETrequests to MMDS require a session token to be provided through
X-metadata-tokenheader when using V2.- Allow
PUTrequests to MMDS in order to generate a session token
to be used for futureGETrequests when version 2 is used. - Remove
allow_mmds_requestsfield from the request body that attaches network
interfaces. Specifying interfaces that allow forwarding requests to MMDS is done
by adding the network interface's ID to thenetwork_interfacesfield of PUT
/mmds/configrequest's body. - Renamed
/machine-confight_enabledtosmt. smtfield is now optional on PUT/machine-config, defaulting to
false.- Configuring
smt: trueon aarch64 via the API is forbidden.
Fixed
- Fixed incorrect propagation of init parameters in kernel commandline.
Related to:
#2709. - Adapt T2 and C3 CPU templates for kernel 5.10. Firecracker was not previously
masking some CPU features of the host or emulated by KVM, introduced in more
recent kernels:umip,vmx,avx512_vnni. - Fix jailer's cgroup implementation to accept properties that contain multiple
dots.