@@ -69,6 +69,15 @@ The configuration items that may be relevant for Firecracker are:
69
69
- use CPU RNG instructions (if present) to initialize RNG. Available for >=
70
70
5.10
71
71
- 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 `
72
81
73
82
There are also guest config options which are dependant on the platform on which
74
83
Firecracker is run:
@@ -142,6 +151,63 @@ following configurations:
142
151
- Only legacy mechanisms
143
152
- Both ACPI and legacy mechanisms
144
153
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
+
145
211
## Caveats
146
212
147
213
- [ Snapshot compatibility across kernel versions] ( snapshotting/snapshot-support.md#snapshot-compatibility-across-kernel-versions )
0 commit comments