@@ -69,6 +69,15 @@ The configuration items that may be relevant for Firecracker are:
6969 - use CPU RNG instructions (if present) to initialize RNG. Available for >=
7070 5.10
7171- ACPI support - ` CONFIG_ACPI ` and ` CONFIG_PCI `
72+ - PCI support:
73+ - ` CONFIG_BLK_MQ_PCI `
74+ - ` CONFIG_PCI `
75+ - ` CONFIG_PCI_MMCONFIG `
76+ - ` CONFIG_PCI_MSI `
77+ - ` CONFIG_PCIEPORTBUS `
78+ - ` CONFIG_VIRTIO_PCI `
79+ - ` CONFIG_PCI_HOST_COMMON `
80+ - ` CONFIG_PCI_HOST_GENERIC `
7281
7382There are also guest config options which are dependant on the platform on which
7483Firecracker is run:
@@ -142,6 +151,63 @@ following configurations:
142151- Only legacy mechanisms
143152- Both ACPI and legacy mechanisms
144153
154+ ##### Booting with PCI:
155+
156+ Firecracker supports booting guest microVMs with PCI support. This option is
157+ enabled using the ` --enable-pci ` flag when launching the Firecracker process.
158+ With PCI enabled, Firecracker will create all VirtIO devices using a PCI VirtIO
159+ transport. The PCI transport typically achieves higher throughput and lower
160+ latency for VirtIO devices. No further, per device, configuration is needed to
161+ enable the PCI transport.
162+
163+ PCI support is optional; if it is not enabled Firecracker will create VirtIO
164+ devices using the MMIO transport.
165+
166+ For Firecracker microVMs to boot properly with PCI support, use a guest kernel
167+ built with PCI support. See the relevant Kconfig flags in our list of
168+ [ relevant Kconfig options] ( #guest-kernel-configuration-items ) :
169+
170+ > [ !IMPORTANT]
171+ >
172+ > Make sure that the kernel command line ** does NOT** include the ` pci=off `
173+ > slug, which disables PCI support during boot time within the guest. When PCI
174+ > is disabled, Firecracker will add this slug in the command line to instruct
175+ > the guest kernel to skip useless PCI checks. For more info, look into the
176+ > section for [ Kernel command line parameters] ( #kernel-command-line-parameters ) .
177+
178+ > [ !NOTE]
179+ >
180+ > On x86_64 systems, ` CONFIG_PCI ` Kconfig option is needed even when booting
181+ > microVMs without PCI support in case users want to use ACPI to boot. See
182+ > [ here] ( #booting-with-acpi-x86_64-only ) for more info.
183+
184+ ## Kernel command line parameters
185+
186+ By default, Firecracker will boot a guest microVM passing the following command
187+ line parameters to the kernel:
188+
189+ ` reboot=k panic=1 nomodule 8250.nr_uarts=0 i8042.noaux i8042.nomux i8042.dumbkbd swiotlb=noforce ` .
190+
191+ - ` reboot=k ` shut down the guest on reboot, instead of rebooting
192+ - ` panic=1 ` on panic, reboot after 1 second
193+ - ` nomodule ` disable loadable kernel module support
194+ - ` 8250.nr_uarts=0 ` disable 8250 serial interface
195+ - ` i8042.noaux ` do not probe the i8042 controller for an attached mouse (save
196+ boot time)
197+ - ` i8042.nomux ` do not probe i8042 for a multiplexing controller (save boot
198+ time)
199+ - ` i8042.dumbkbd ` do not attempt to control kbd state via the i8042 (save boot
200+ time)
201+ - ` swiotlb=noforce ` disable software bounce buffers (SWIOTLB)
202+
203+ When running without [ PCI support] ( #booting-with-pci ) , Firecracker will also
204+ append ` pci=off ` to the above list. This option instructs the guest kernel to
205+ avoid PCI probing.
206+
207+ Users can provide their own command line parameters through the ` boot_args `
208+ field of the ` /boot-source `
209+ [ Firecracker API] ( ../src/firecracker/swagger/firecracker.yaml ) .
210+
145211## Caveats
146212
147213- [ Snapshot compatibility across kernel versions] ( snapshotting/snapshot-support.md#snapshot-compatibility-across-kernel-versions )
0 commit comments