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

780 阅读11分钟

关注微信公众号:Linux内核拾遗

文章来源:mp.weixin.qq.com/s/kdfByodhe…

前文介绍了QEMU x86架构下经典的机器类型pc-i440fx-piix:

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特有的特性:

  1. 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)设备的性能。

  1. AHCI存储控制器:支持高级主控接口(AHCI),提升SATA性能和功能。
  2. vIOMMU模拟:虚拟I/O内存管理单元(vIOMMU)的模拟,增强虚拟化支持,同时这也是虚拟机规格突破256个vCPU限制的关键特性。
  3. 安全启动:确保在启动过程中仅加载经过验证的软件,增强系统安全性。

1.2 Q35的局限

Q35架构存在以下的功能限制或者不兼容性:

  1. 不支持旧版操作系统,如Windows XP和Windows 2000。
  2. 对旧版QEMU设备的支持有限。
  3. 有限的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地址空间,新的设备将无法正确配置和使用。

为了克服这个限制,可以采取以下措施:

  1. 仅将PCIe设备插入PCIe端口:优先使用PCIe设备,因为PCIe设备通常不需要像传统PCI设备那样占用大量I/O地址空间。
  2. 使用更小/非标准的I/O窗口:为PCI桥配置更小或非标准的I/O窗口,尽可能节省I/O地址空间。
  3. 优化设备配置:通过合理规划和配置设备,尽量减少对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拓扑结构图:

Q35

Motherboard_diagram

2.1 MCH(北桥芯片)

**Q35 MCH(Memory Controller Hub)**是整个架构的核心,主要负责连接CPU、内存和显卡。

具体功能包括:

  1. 前端总线(FSB)连接
    • CPU通过前端总线(FSB)连接到MCH,支持高达1333 MHz的FSB速度。
  2. 内存控制器
    • 支持DDR2内存,最大内存容量为8GB,支持双通道内存配置,从而提高内存带宽和性能。
  3. 图形接口
    • 集成GMA 3100图形核心,支持基础的3D图形加速和高清视频播放。
    • 提供PCI Express x16插槽,用于外接独立显卡。
  4. 高速PCIe接口
    • 提供多条PCIe通道,包括一个PCIe x16通道用于显卡,另有PCIe x1通道用于其他高速扩展卡。

2.2 ICH(南桥芯片)

**ICH(I/O Controller Hub)**负责处理所有的输入/输出操作,包括存储、网络和外围设备接口。

具体功能包括:

  1. 存储接口
    • 提供6个SATA 3Gb/s接口,用于连接硬盘和光驱。
    • 提供一个并行ATA接口,支持两个PATA设备。
  2. USB接口
    • 支持多达12个USB 2.0接口,用于连接各种USB外设,如鼠标、键盘、打印机等。
  3. 低速PCIe接口
    • 提供额外的PCIe x1通道,用于低速外设的连接。
  4. 网络接口
    • 集成千兆以太网控制器,提供高速网络连接。
  5. 音频控制
    • 集成高保真音频控制器,支持多声道音频输出,适用于家庭影院和高质量音频播放。
  6. 其他接口
    • 包括传统的PCI插槽、LPC(低引脚数控制器)接口,用于连接各种传统的外围设备和扩展卡。

2.3 数据流和连接

  1. CPU与MCH:CPU通过FSB与MCH连接,负责处理与内存和显卡之间的数据传输。
  2. MCH与内存:MCH直接控制内存,通过内存控制器与DDR2内存进行高速数据交换。
  3. MCH与显卡:通过集成图形核心或外接的PCIe x16显卡插槽,MCH管理图形数据的处理和输出。
  4. MCH与ICH9:MCH通过一个专用的DMI(Direct Media Interface)总线与ICH9相连,传输系统总线和I/O操作数据。
  5. ICH9与外设:ICH9负责与USB设备、SATA硬盘、网络接口和音频设备等进行通信,管理所有的输入/输出操作。

3 Q35-ICH9 v.s. i440FX-PIIX4

3.1 拓扑结构

Q35 + ICH9I440FX + 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 路由

image-20240614000949607
  1. IRQ 路由机制

    • 传统PIC模式:使用传统的8259A可编程中断控制器(PIC)来管理IRQ。

    • IRQ向量数量:仅有2个PCI IRQ向量可用,限制了设备中断的并发处理能力。

  2. 中断分配

    • 设备通过PCI总线连接时,中断信号通常是共享的。

    • I440FX/PIIX4芯片组的中断分配和管理相对简单,但扩展性有限。

3.2.2 Q35 IRQ 路由

image-20240614001013391
  1. IRQ 路由机制

    • PIRQ引脚:Q35芯片组有8个PIRQ引脚(PIRQA-H),用于中断请求路由。

    • 中断模式:支持两种模式

      • 传统PIC模式:类似于I440FX/PIIX4的8259A PIC模式,用于兼容旧系统。
      • I/O APIC模式:使用I/O高级可编程中断控制器(APIC),提供更多的中断向量和更高效的中断处理。
  2. 中断分配

    • Q35运行在I/O APIC模式下,支持更多中断向量,提高中断处理效率。

    • 槽位映射:Q35有多个PCI槽位(0-31),其中

      • 槽位0-24映射到PIRQE-H,使用循环轮转机制分配中断。
      • 槽位25-31可以通过编程映射到PIRQ引脚。
    • 可编程映射:PCIe总线到PIRQ的映射可以进行编程,提供灵活的中断管理。

  3. PCI IRQ向量

    • Q35有8个PCI IRQ向量可用,比I440FX/PIIX4的2个向量显著增加。

    • 这种增加使得Q35能够更好地处理多个PCI设备的中断请求,减少中断冲突,提高系统性能。

3.3 设备配置

Q35和I440FX在设备支持和配置灵活性上也存在明显的差异:

Q35-ICH9I440FX-PIIX4
存储接口支持现代的AHCI接口,提高了存储设备的性能和灵活性使用传统IDE接口,性能和功能相对较弱
PCI地址支持灵活的PCI地址分配和PCIe设备,资源配置更高效固定的PCI地址空间,仅支持传统PCI设备
插槽配置提供更多插槽配置选项和可编程的插槽映射,支持现代计算需求配置固定,扩展性和灵活性有限

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

image-20240614001705496

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

PCIe Switch (Q35)PCI Bridge (I440FX)
架构基于点对点连接,每个通道具有独立带宽,性能更优基于共享总线架构,扩展性和性能受限
带宽每个通道独立带宽,高性能设备连接无瓶颈共享总线带宽,多个设备时性能可能下降
扩展性支持更多设备,扩展性强扩展设备数量有限,受总线架构限制
灵活性支持热插拔和动态配置,灵活性高配置固定,动态管理能力有限
image-20240614002409355 image-20240614002423381

4 扩展阅读

wiki.qemu.org/Features/Q3…

wiki.qemu.org/images/4/4e…

www.linux-kvm.org/images/0/06…

关注微信公众号:Linux内核拾遗

文章来源:mp.weixin.qq.com/s/kdfByodhe…