Force Virtio PCIe in Pfsense VM? You can’t do it from the Proxmox GUI, but a custom QEMU args line does the job. Add it to the VM’s config, boot, and check dmesg inside pfSense to confirm.

Why bother with PCIe mode?
VirtIO devices default to legacy PCI in many Proxmox VMs. That’s fine for most stuff, but pfSense with certain NIC drivers or when you’re chasing performance quirks can behave better with PCIe. It also shows up as a PCIe device in the guest, which matters if you’re passing through or tuning for low latency.
The fix
Shut down the pfSense VM. Then edit the config file directly on the Proxmox host:
nano /etc/pve/qemu-server/<VMID>.conf
Add a line like this, replacing 100 with your VMID:
args: -device virtio-net-pci,netdev=net0,bus=pcie.0,addr=0x1e,disable-legacy=on,disable-modern=off -device virtio-balloon-pci,bus=pcie.0,addr=0x1f,disable-legacy=on,disable-modern=off
That forces the VirtIO NIC and balloon onto the PCIe bus. If you have more devices, you’ll need to map them too. The key flags are bus=pcie.0 and disable-legacy=on.

Check it worked
Start the VM and log into pfSense. Run:
dmesg | grep -i pcie
You should see your VirtIO devices listed with PCIe in the output. If not, double-check the bus and addr values don’t clash with anything else in the VM’s config.
My take
This is one of those tweaks that’s easy to overthink. If your pfSense VM is running fine, leave it alone. But if you’re already messing with custom args for other reasons, forcing PCIe mode is a clean way to rule out legacy quirks. Just keep a snapshot first — I’ve had VMs refuse to boot after a bad args line, and you don’t want to rebuild pfSense at 2am.