qemu 规范路径_QEMU学习笔记

QEMU支持的架构非常少,在Q35出现之前,就只有诞生于1996年的i440FX + PIIX一个架构在苦苦支撑。一方面是Intel不断推出新的芯片组,搞出了PCIe、AHCI等等新东西。i440FX已经无法满足需求,为此在 KVM Forum 2012 上Jason Baron带来了PPT:A New Chipset For Qemu - Intel's Q35。Q35是Intel在2007年6月推出的芯片组,最吸引人的就是其支持PCI-e。

根据Intel Q35文档,Q35的拓扑结构如图所示:

可见其北桥为MCH,南桥为ICH9。CPU 通过 前端总线(FSB) 连接到 北桥(MCH),北桥为内存、PCIE等提供接入,同时连接到南桥(ICH9)。南桥为 USB / PCIE / SATA 等提供接入。

Q35 拓扑结构

那么在QEMU中实现的Q35拓扑结构是否真的如上图所示呢?我们在 QEMU 中通过 info qtree 查询,简化后的结构为:

(qemu) info qtree

bus: main-system-bus

dev: hpet, id ""

gpio-in "" 2

gpio-out "" 1

gpio-out "sysbus-irq" 32

dev: ioapic, id ""

gpio-in "" 24

version = 32 (0x20)

dev: q35-pcihost, id ""

bus: pcie.0

type PCIE

dev: e1000, id ""

dev: VGA, id ""

dev: ICH9 SMB, id ""

dev: ich9-ahci, id ""

bus: ide.5

type IDE

bus: ide.4

type IDE

bus: ide.3

type IDE

bus: ide.2

type IDE

dev: ide-cd, id ""

bus: ide.1

type IDE

bus: ide.0

type IDE

dev: ide-hd, id ""

drive = "ide0-hd0"

dev: ICH9-LPC, id ""

gpio-out "gsi" 24

bus: isa.0

type ISA

dev: i8257, id ""

dev: i8257, id ""

dev: port92, id ""

gpio-out "a20" 1

dev: vmmouse, id ""

dev: vmport, id ""

dev: i8042, id ""

gpio-out "a20" 1

dev: isa-parallel, id ""

dev: isa-serial, id ""

dev: isa-pcspk, id ""

iobase = 97 (0x61)

dev: isa-pit, id ""

gpio-in "" 1

gpio-out "" 1

dev: mc146818rtc, id ""

gpio-out "" 1

dev: isa-i8259, id ""

gpio-in "" 8

gpio-out "" 1

master = false

dev: isa-i8259, id ""

gpio-in "" 8

gpio-out "" 1

master = true

dev: mch, id ""

dev: fw_cfg_io, id ""

dev: kvmclock, id ""

dev: kvmvapic, id ""

注意dev和bus是交替出现的,更加简化的设备图如下:

bus dev bus dev bus dev

main-system-bus - ioapic

- q35-pcihost - pcie.0 - mch

- ICH9-LPC - isa.0 - isa-i8259

- ICH9 SMB

- ich9-ahci

- VGA

- e1000

- ...

由于对硬件和架构的不熟悉,这里反反复复研究了一天才有点眉目。我的理解如下:

main-system-bus 就是系统总线,ioapic直接连到系统总线上,符合我们对IOAPIC的认知,在q35架构图CPU为 Core 和 Pentium Pentium E2000 系列,而根据文档,Intel自从Pentium4/Xeon后就取消了APIC bus,换用系统总线。

但让我纠结的是,mch为什么会连到 pcie.0 上ÿ

你可能感兴趣的:(qemu,规范路径)