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