Block device IO engine, default to “Sync”.
The Async engine leverages io_uring for executing requests in an async manner,
therefore getting overall higher throughput by taking better advantage of the block device hardware, which typically supports queue depths greater than 1.
The block IO engine is configured via the PUT /drives API call (pre-boot only), with the io_engine field taking two possible values:
Sync (default)
Async (in developer preview)
The Sync variant is the default, in order to provide backwards compatibility with older Firecracker versions.
Note vhost-user block device is another option for block IO that requires an external backend process.
Firecracker requires a minimum host kernel version of 5.10.51 for the Async IO engine.
This requirement is based on the availability of the io_uring subsystem, as well as a
couple of features and bugfixes that were added in newer kernel versions.
If a block device is configured with the Async io_engine on a host kernel older than
5.10.51, the API call will return a 400 Bad Request, with a suggestive error message.