关注微信公众号:Linux内核拾遗
前文介绍了QEMU x86架构下经典的机器类型pc-i440fx-piix:
这是QEMU在早期唯一支持的架构,诞生于1996年。i440FX是Intel的一个芯片组,PIIX是其南桥芯片。这种架构在很长一段时间内一直是QEMU的主要选择。
但是随着硬件技术的不断发展,i440FX + PIIX架构逐渐显得落伍。这些年来,Intel不断推出新的芯片组,带来了许多现代技术,例如PCI Express(PCIe)和高级主机控制器接口(AHCI)等,而老旧的i440FX架构无法充分支持这些新技术,难以满足现代计算需求。
在2012年的KVM论坛(KVM Forum 2012)上,Jason Baron介绍了一种新的芯片组——Q35,他在主题演讲《A New Chipset For Qemu - Intel's Q35》中详细介绍了Q35芯片组的特性和优势,并且展示了其在虚拟化中的应用潜力。
本文将重点介绍QEMU x86架构下新的机器类型——pc-q35。
1 Q35介绍
1.1 Q35-only特性
以下是一些Q35特有的特性:
- PCIe相关功能:
-
扩展配置空间 (MMCFG):内存映射配置空间(MMCFG)允许扩展PCIe配置空间,超出标准的256字节。
-
PCIe原生热插拔:支持PCIe设备的热插拔,允许在不重启系统的情况下动态连接和断开设备。
-
AER(Advanced Error Reporting):高级错误报告,提供详细的PCIe设备错误报告,提升系统的可靠性和故障排除能力。
-
ARI (Alternative Routing-ID Interpretation):允许单个PCIe设备内的多个功能更高效地进行寻址。
-
原生电源管理:支持PCIe原生的高级电源管理功能,有助于减少能耗。
-
FLR(Function Level Reset):功能级别重置,允许对单个PCIe功能进行复位,而不影响同一设备内的其他功能。
-
ATS(Address Translation Services):地址翻译服务,促进PCIe设备与系统内存之间的地址翻译,提升需要直接内存访问(DMA)设备的性能。
- AHCI存储控制器:支持高级主控接口(AHCI),提升SATA性能和功能。
- vIOMMU模拟:虚拟I/O内存管理单元(vIOMMU)的模拟,增强虚拟化支持,同时这也是虚拟机规格突破256个vCPU限制的关键特性。
- 安全启动:确保在启动过程中仅加载经过验证的软件,增强系统安全性。
1.2 Q35的局限
Q35架构存在以下的功能限制或者不兼容性:
- 不支持旧版操作系统,如Windows XP和Windows 2000。
- 对旧版QEMU设备的支持有限。
- 有限的I/O空间,这可能会影响到单个Q35机器能够使用的设备数量。
对于第3点,这里作一下解释。
在Q35架构中,为了连接多个PCI设备,通常会使用PCI桥(PCI Bridge)。每个PCI桥可以连接多个PCI设备,相当于一个扩展槽。
每个PCI桥本身需要分配一个4K(4096字节)的I/O地址空间,用于管理其下连接的设备。这意味着每增加一个PCI桥,就需要额外的4K I/O地址空间。
由于I/O地址空间是有限的,因此在Q35架构下,随着PCI桥和连接设备数量的增加,可用的I/O空间可能会很快被耗尽。这会限制单个Q35机器能够使用的设备数量。如果没有足够的I/O地址空间,新的设备将无法正确配置和使用。
为了克服这个限制,可以采取以下措施:
- 仅将PCIe设备插入PCIe端口:优先使用PCIe设备,因为PCIe设备通常不需要像传统PCI设备那样占用大量I/O地址空间。
- 使用更小/非标准的I/O窗口:为PCI桥配置更小或非标准的I/O窗口,尽可能节省I/O地址空间。
- 优化设备配置:通过合理规划和配置设备,尽量减少对I/O地址空间的占用。
1.3 Q35应用场景
Q35芯片组在实践中表现出了强大的功能和灵活性,尤其是在虚拟化、安全启动和高性能网络虚拟化方面。
1.3.1 P2V(物理机迁移到虚拟机)
P2V(Physical to Virtual)迁移是将将物理机上的操作系统、应用程序和数据迁移到虚拟机中的过程。
P2V能够降低硬件成本,通过将多个物理服务器整合到少量的虚拟机服务器上,减少硬件采购和维护成本,同时允许更灵活和高效的资源分配,提高服务器资源的利用率,并且虚拟机集中管理和备份恢复也更加便捷。
1.3.2 Secure Boot(安全启动)+ OVMF
Secure Boot用于确保在启动过程中只运行可信的软件,防止恶意代码的注入。
OVMF(Open Virtual Machine Firmware)是基于UEFI的固件,为虚拟机提供支持。
通过Secure Boo + OVMF配置能够防止未经授权的软件和固件在系统启动过程中运行,保护系统完整性。另外,基于UEFI的虚拟机能提高与现代操作系统的兼容性。
1.3.3 vIOMMU用于NFV
将vIOMMU应用到网络功能虚拟化(NFV)中,通过硬件辅助虚拟化提高网络性能和灵活性。
2 Q35拓扑结构
Q35芯片组划分为**==北桥内存控制器hub(MCH,Memory Controller Hub)==和==南桥I/O控制器hub(ICH,I/O Controller Hub)==**两部分。CPU 通过前端总线(FSB)连接到北桥(MCH),MCH链接内存,显卡, 高速PCIe接口等,南桥芯片则为USB,低速PCIe / SATA 等提供接入。
下面是两张经典的Q35拓扑结构图:
2.1 MCH(北桥芯片)
**Q35 MCH(Memory Controller Hub)**是整个架构的核心,主要负责连接CPU、内存和显卡。
具体功能包括:
- 前端总线(FSB)连接:
- CPU通过前端总线(FSB)连接到MCH,支持高达1333 MHz的FSB速度。
- 内存控制器:
- 支持DDR2内存,最大内存容量为8GB,支持双通道内存配置,从而提高内存带宽和性能。
- 图形接口:
- 集成GMA 3100图形核心,支持基础的3D图形加速和高清视频播放。
- 提供PCI Express x16插槽,用于外接独立显卡。
- 高速PCIe接口:
- 提供多条PCIe通道,包括一个PCIe x16通道用于显卡,另有PCIe x1通道用于其他高速扩展卡。
2.2 ICH(南桥芯片)
**ICH(I/O Controller Hub)**负责处理所有的输入/输出操作,包括存储、网络和外围设备接口。
具体功能包括:
- 存储接口:
- 提供6个SATA 3Gb/s接口,用于连接硬盘和光驱。
- 提供一个并行ATA接口,支持两个PATA设备。
- USB接口:
- 支持多达12个USB 2.0接口,用于连接各种USB外设,如鼠标、键盘、打印机等。
- 低速PCIe接口:
- 提供额外的PCIe x1通道,用于低速外设的连接。
- 网络接口:
- 集成千兆以太网控制器,提供高速网络连接。
- 音频控制:
- 集成高保真音频控制器,支持多声道音频输出,适用于家庭影院和高质量音频播放。
- 其他接口:
- 包括传统的PCI插槽、LPC(低引脚数控制器)接口,用于连接各种传统的外围设备和扩展卡。
2.3 数据流和连接
- CPU与MCH:CPU通过FSB与MCH连接,负责处理与内存和显卡之间的数据传输。
- MCH与内存:MCH直接控制内存,通过内存控制器与DDR2内存进行高速数据交换。
- MCH与显卡:通过集成图形核心或外接的PCIe x16显卡插槽,MCH管理图形数据的处理和输出。
- MCH与ICH9:MCH通过一个专用的DMI(Direct Media Interface)总线与ICH9相连,传输系统总线和I/O操作数据。
- ICH9与外设:ICH9负责与USB设备、SATA硬盘、网络接口和音频设备等进行通信,管理所有的输入/输出操作。
3 Q35-ICH9 v.s. i440FX-PIIX4
3.1 拓扑结构
Q35 + ICH9 | I440FX + PIIX4 | |
---|---|---|
IOMMU | 支持IOMMU,提升虚拟化性能和安全性,允许虚拟机直接访问硬件I/O设备 | 不支持IOMMU |
PCIe支持 | 集成PCIe接口,提供高带宽和低延迟的设备连接 | 仅支持传统的PCI总线,不支持PCIe |
I/O芯片 | 通过LPC接口连接超级I/O芯片,支持更多传统I/O功能 | 南桥集成传统I/O功能,但功能较少 |
USB端口 | 提供12个USB 2.0端口,显著提升外设连接能力 | 通常仅提供2-4个USB 1.1端口 |
存储接口 | 使用SATA接口,支持更高的数据传输速度和更多设备连接 | 使用并行ATA(PATA)接口,数据传输速度较慢,设备连接数量有限 |
3.2 中断请求路由
IRQ(中断请求)路由是芯片组用于管理和分配设备中断信号的机制。下面对比以下Q35和I440FX在IRQ路由方面的差异。
3.2.1 I440FX/PIIX4 IRQ 路由
-
IRQ 路由机制:
-
传统PIC模式:使用传统的8259A可编程中断控制器(PIC)来管理IRQ。
-
IRQ向量数量:仅有2个PCI IRQ向量可用,限制了设备中断的并发处理能力。
-
-
中断分配:
-
设备通过PCI总线连接时,中断信号通常是共享的。
-
I440FX/PIIX4芯片组的中断分配和管理相对简单,但扩展性有限。
-
3.2.2 Q35 IRQ 路由
-
IRQ 路由机制:
-
PIRQ引脚:Q35芯片组有8个PIRQ引脚(PIRQA-H),用于中断请求路由。
-
中断模式:支持两种模式
- 传统PIC模式:类似于I440FX/PIIX4的8259A PIC模式,用于兼容旧系统。
- I/O APIC模式:使用I/O高级可编程中断控制器(APIC),提供更多的中断向量和更高效的中断处理。
-
-
中断分配:
-
Q35运行在I/O APIC模式下,支持更多中断向量,提高中断处理效率。
-
槽位映射:Q35有多个PCI槽位(0-31),其中
- 槽位0-24映射到PIRQE-H,使用循环轮转机制分配中断。
- 槽位25-31可以通过编程映射到PIRQ引脚。
-
可编程映射:PCIe总线到PIRQ的映射可以进行编程,提供灵活的中断管理。
-
-
PCI IRQ向量:
-
Q35有8个PCI IRQ向量可用,比I440FX/PIIX4的2个向量显著增加。
-
这种增加使得Q35能够更好地处理多个PCI设备的中断请求,减少中断冲突,提高系统性能。
-
3.3 设备配置
Q35和I440FX在设备支持和配置灵活性上也存在明显的差异:
Q35-ICH9 | I440FX-PIIX4 | |
---|---|---|
存储接口 | 支持现代的AHCI接口,提高了存储设备的性能和灵活性 | 使用传统IDE接口,性能和功能相对较弱 |
PCI地址 | 支持灵活的PCI地址分配和PCIe设备,资源配置更高效 | 固定的PCI地址空间,仅支持传统PCI设备 |
插槽配置 | 提供更多插槽配置选项和可编程的插槽映射,支持现代计算需求 | 配置固定,扩展性和灵活性有限 |
可以通过lscpu
查看和对比两种架构下的PCI拓扑结构:
最后对比一下Q35的PCIe Switch和I440FX/PIIX的PCI Bridge:
PCIe Switch (Q35) | PCI Bridge (I440FX) | |
---|---|---|
架构 | 基于点对点连接,每个通道具有独立带宽,性能更优 | 基于共享总线架构,扩展性和性能受限 |
带宽 | 每个通道独立带宽,高性能设备连接无瓶颈 | 共享总线带宽,多个设备时性能可能下降 |
扩展性 | 支持更多设备,扩展性强 | 扩展设备数量有限,受总线架构限制 |
灵活性 | 支持热插拔和动态配置,灵活性高 | 配置固定,动态管理能力有限 |
4 扩展阅读
www.linux-kvm.org/images/0/06…
关注微信公众号:Linux内核拾遗