QEMU X86 架构机器类型之 pc-q35-ich9

关注微信公众号: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 拓扑结构

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 在设备支持和配置灵活性上也存在明显的差异:

可以通过lscpu
查看和对比两种架构下的 PCI 拓扑结构:

最后对比一下 Q35 的 PCIe Switch 和 I440FX/PIIX 的 PCI Bridge:



4 扩展阅读
https://wiki.qemu.org/Features/Q35
https://wiki.qemu.org/images/4/4e/Q35.pdf
https://www.linux-kvm.org/images/0/06/2012-forum-Q35.pdf
关注微信公众号:Linux 内核拾遗
版权声明: 本文为 InfoQ 作者【Linux内核拾遗】的原创文章。
原文链接:【http://xie.infoq.cn/article/38612098ab7f90161512dda87】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论