Wat zijn i440fx en Q35?
Elke virtuele machine van QEMU heeft een virtuele chipset. Die bepaalt het hele virtuele moederbord — de PCI/PCIe-bustopologie, de south bridge, de interruptcontroller, en wat het gastbesturingssysteem ziet als het bij het opstarten de hardware inventariseert.
QEMU biedt twee keuzes: i440fx en Q35.
i440fx bootst de Intel 440FX na — codenaam Natoma, uitgebracht in 1996 als de chipset voor de Pentium Pro en later de Pentium II. Hij presenteert een platte PCI-bus zonder eigen PCIe-ondersteuning. Het was het oorspronkelijke machinetype van QEMU en is lang de standaard geweest. Een mooie carrière voor een chipset die voor de Pentium Pro is ontworpen.
Q35 bootst de Intel Q35 Express na, uitgebracht in juni 2007 voor de Core 2-generatie, gekoppeld aan de ICH9 south bridge. Hij geeft de gast een echt PCIe-root complex en een moderne interruptcontroller. Doorgegeven apparaten komen binnen als echte PCIe-apparaten met de juiste topologie.
Beide zijn virtueel. Geen van beide raakt de werkelijke hardware die de host gebruikt. Het verschil zit in wat het gastbesturingssysteem ziet.
Waarom Q35 uitmaakt voor passthrough
Apparaten die je aan een i440fx-VM doorgeeft komen binnen als oude PCI-apparaten, wat ze in werkelijkheid ook zijn. De gast ziet ze als “heel snelle PCI-apparaten” in plaats van als PCIe-apparaten. Sommige drivers gaan daar prima mee om. Andere verwachten PCIe en doen het verkeerd, of weigeren te laden als ze het niet vinden.
Het PCIe-root complex van Q35 verandert het beeld op een aantal punten.
MSI-X
MSI-X (Message Signalled Interrupts — Extended) vereist PCIe. Onder i440fx valt MSI-X terug op oude INTx-interrupts, of het werkt helemaal niet.
Dat maakt veel uit voor NVMe. NVMe-controllers leunen op MSI-X voor hun architectuur met meerdere queues. Elk IO-queuepaar krijgt zijn eigen interruptvector. Zonder MSI-X gaan alle IO-afrondingen door één interrupt heen, en dat wordt een knelpunt bij hoge IOPS.
Het maakt ook uit voor moderne netwerkkaarten en GPU’s. Elk apparaat dat meerdere interruptvectoren gebruikt om de last over CPU-kernen te spreiden heeft MSI-X nodig.
AER (Advanced Error Reporting)
Met PCIe AER kan de gast apparaatfouten netjes opmerken en verwerken, in plaats van stil te falen. Onder i440fx heeft de gast geen zicht op fouten op PCIe-niveau.
Voor een productieworkload met een doorgegeven apparaat is stil weggeslikte fouten een probleem. AER geeft de driver in de gast de mogelijkheid om hardwarefouten te loggen, te melden en soms te herstellen — fouten die anders onopgemerkt blijven tot er data verminkt is.
ACS (Access Control Services)
ACS regelt DMA tussen apparaten onderling op dezelfde bus. Het hoort bij het isolatiemodel van de IOMMU. Het belet dat het ene apparaat in de geheugenruimte van het andere DMA’t zonder langs de IOMMU te gaan.
Onder i440fx ondersteunt de virtuele bustopologie ACS helemaal niet. Dat maakt eenvoudige passthrough niet stuk, maar het verzwakt wel de isolatie die de IOMMU je hoort te geven.
Hoe IOMMU-groepen worden gepresenteerd
Door de PCIe-hiërarchie van Q35 kan elk virtueel slot in zijn eigen IOMMU-groep binnen de gast zitten. i440fx gooit alles op één gedeelde bus, en dat maakt het inrichten van een IOMMU aan gastkant lastig.
Dat is van belang bij geneste virtualisatie, waar de gast zelf schone IOMMU-groepen nodig heeft. Het is ook van belang voor vIOMMU, dat alleen op Q35 beschikbaar is.
vIOMMU
Heb je nodig dat de gast zelf IOMMU-mogelijkheden heeft — voor geneste passthrough, voor DPDK, of voor bepaalde beveiligingsopstellingen — dan vereist dat het machinetype Q35.
Met vIOMMU-emulatie kan de gast zijn eigen IOMMU draaien, wat nuttig is voor:
- Geneste VM-passthrough (een VM binnen een VM met toegang tot apparaten)
- DPDK-netwerken in userspace, waar de applicatie IOMMU-bescherming nodig heeft
- Beveiligingsopstellingen die DMA-isolatie binnen de gast vragen
Waarom Q35 uitmaakt buiten passthrough
Ook als je geen passthrough doet, is Q35 de betere keuze voor moderne workloads.
OVMF-firmware (UEFI)
De combinatie van Q35 en OVMF geeft de gast een moderne UEFI-opstartomgeving met ondersteuning voor Secure Boot. i440fx kan OVMF gebruiken, maar die combinatie is minder goed getest en sommige functies werken niet goed.
Windows 11 vereist UEFI met Secure Boot. De hardware-eisen van Microsoft schrijven het voor. Windows Server 2025 werkt het beste met UEFI. Q35 met OVMF is voor beide het ondersteunde pad.
Draai je een VM met Windows 11 of Server 2025 op i440fx met SeaBIOS, dan vecht je tegen de stroom in. Het werkt vandaag misschien. Het is niet waar het ecosysteem naartoe gaat.
AHCI
Q35 bevat eigen AHCI-emulatie (Advanced Host Controller Interface) via de ICH9 south bridge. i440fx gebruikt de oudere IDE- of LSI SCSI-emulatie voor opstartschijven.
Voor VirtIO-opslag maakt dat niet uit. VirtIO gaat volledig om de opslagcontroller van de chipset heen. Maar gebruik je SATA-emulatie voor een gastbesturingssysteem dat bij de installatie nog geen VirtIO-drivers heeft, dan is AHCI op Q35 veel sneller dan IDE op i440fx.
De overhead die i440fx meedraagt en Q35 niet
Het gat met AHCI gaat niet alleen over de ene controller die nieuwer is dan de andere. Het is dat i440fx de gast bij bijna elke handeling de hypervisor laat betalen, en Q35 grotendeels niet.
Onderschepte registertoegang. IDE wordt geprogrammeerd via oude x86-I/O-poorten. De gast schrijft het aantal sectoren, dan de LBA-registers, dan het commandoregister. Elke schrijfactie raakt een andere poort. Elk van die toegangen wordt onderschept en nagebootst door de host, en elke onderschepping is een VM exit die enkele microseconden kost. Eén IDE-commando uitgeven kost daarmee meerdere exits voordat er ook maar data beweegt.
AHCI werkt precies andersom. De gast bouwt een commandotabel in zijn eigen RAM — geen onderscheppingen, want hij schrijft alleen naar geheugen — en doet dan één MMIO-schrijfactie naar een belregister om de controller te zeggen dat hij hem mag ophalen. Eén commando kost ruwweg één exit in plaats van vijf of zes.
Geen commandoqueue. IDE geeft één commando uit en wacht tot het klaar is. AHCI ondersteunt NCQ, dus er kunnen tot 32 commando’s onderweg zijn, en de schijf mag ze buiten de volgorde afronden om minder te hoeven zoeken. De kosten die per commando overblijven worden dan ook over een queue uitgesmeerd in plaats van één voor één betaald.
Het oude interruptpad. De PIIX3 IDE-controller meldt afronding op de vaste oude IRQ’s 14 en 15, bezorgd als niveaugestuurde INTx. Een niveaugestuurde interrupt moet bevestigd en weer vrijgegeven worden, en omdat INTx-lijnen gedeeld zijn, moet de gast ook nog uitzoeken welk apparaat hem opwierp. Elk van die stappen is weer een onderschepping. MSI-X, waarvoor je Q35 nodig hebt, is een gewone schrijfactie naar geheugen, zonder gedeelde lijn om te herkennen en zonder bevestigingsrondje. Op hardware met posted interrupts kan het de gast bereiken zonder ook maar één exit.
Een groter oppervlak aan oude apparaten. i440fx presenteert altijd zijn oude platformapparaten, inclusief de IDE-controller, of de VM ze gebruikt of niet. Ze bezetten PCI-slots, ze worden bij elke start geïnventariseerd en afgetast, en drivers in de gast kunnen ze pollen. Q35 presenteert een kleinere, modernere set. Minder voor de host om overeind te houden, minder voor de gast om langs te lopen.
Niets hiervan komt naar boven in een VM op VirtIO, en daarom is het verschil makkelijk te missen. Het maakt uit tijdens de installatie, bij appliance-images zonder VirtIO-drivers, en bij elke gast die nog geëmuleerde SATA of IDE gebruikt voor zijn opstartschijf.
Minder virtuele apparaten, een schonere topologie
i440fx komt met oude virtuele hardware die Q35 laat vallen. Een nepgeluidskaart. Een oude IDE-controller. Geen van beide doet iets nuttigs, maar ze verbranden allebei virtuele PCI-slots en kunnen software in de gast in de war brengen die ze probeert te gebruiken.
Q35 presenteert een schonere set virtuele hardware, die dichter aansluit bij wat een moderne fysieke server zou laten zien.
De richting waarin het gaat
RHEL 10 heeft i440fx afgeschreven
Red Hat heeft het machinetype i440fx in RHEL 10 formeel afgeschreven. Dat geeft de richting aan voor het bredere KVM-ecosysteem. Als Red Hat iets afschrijft, betekent het dat ze zijn gestopt het als eersteklas pad te testen en fouten die eraan hangen niet zullen verhelpen.
Het QEMU-project zelf praat al jaren over het afschrijven van i440fx. De gedachte is dat twee chipsetpaden onderhouden een last is. Q35 is degene die op moderne hardware past.
Proxmox is niet gevolgd
Proxmox VE maakt nieuwe VM’s nog steeds als i440fx aan. Het machinetype in de aanmaakwizard staat op “Default (i440fx)”, en dat blijft zo tenzij je het verandert. Q35 zit één uitklaplijstje verderop, maar het is een keuze die je bewust moet maken, bij elke VM die je bouwt.
En dat is precies waarom dit bericht bestaat. De standaard is de chipset uit 1996, en niets in de wizard vertelt je dat de keuze uitmaakt.
Een bestaande VM omzetten
Heb je een bestaande VM op i440fx, dan kun je in de hardware-instellingen of rechtstreeks in de config naar Q35:
machine: q35
Dit is in feite het verwisselen van het virtuele moederbord. Andere hardware bij de volgende start.
Linux gaat daar doorgaans zonder problemen mee om.
De kernel inventariseert de apparaten opnieuw en laadt de juiste drivers.
Interfacenamen veranderen wel, omdat de virtuele NIC van een PCI-bus naar een PCIe-bus verhuist.
Noemt je netwerkconfiguratie ze bij naam (bijvoorbeeld eth0, ens18), pas hem dan aan voor je herstart, anders raak je de netwerktoegang kwijt.
Windows is minder vergevingsgezind. De wisseling van chipset betekent andere virtuele hardware-ID’s voor de opslagcontroller, de netwerkadapter en andere platformapparaten. Windows kan het opnieuw installeren van drivers nodig hebben. In sommige gevallen is een verse installatie het schoonste pad. Oudere Windows-versies zijn daarbij de gebruikelijke zondaar.
FreeBSD en afgeleiden (OPNsense, pfSense) gaan doorgaans mee in de wissel, maar test het eerst.
Test in alle gevallen op een VM buiten productie voordat je iets omzet dat ertoe doet.
Wanneer je i440fx nog nodig hebt
Een handvol gevallen heeft i440fx nog nodig.
Oude gastbesturingssystemen van voor UEFI — Windows XP, Windows 2000 en dat soort jaargangen — starten onder Q35 misschien niet op. Die systemen verwachten de oude PCI-topologie en de SeaBIOS die i440fx levert.
Bepaalde appliance-images zijn uitsluitend tegen i440fx gebouwd en getest. Ondersteunt de leverancier alleen i440fx, dan gebruik je dat tot ze bijwerken.
Voor al het andere — nieuwe Linux-VM’s, moderne Windows-versies, elke workload met passthrough — gebruik je Q35. Er is niets te winnen met uit gewoonte aan een chipset uit 1996 vasthouden.
Bronnen
- Proxmox VE Wiki — PCI(e) Passthrough — officiële Proxmox-documentatie, die Q35 als het aanbevolen machinetype voor passthrough noemt
- QEMU Q35 Chipset Specification (PDF) — het oorspronkelijke ontwerpdocument voor Q35 van QEMU
- Proxmox Forum — Q35 vs i440fx Discussion — discussie in de community over de praktische verschillen