写点什么

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

  • 2024-06-14
    浙江
  • 本文字数:3426 字

    阅读完需:约 11 分钟

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

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

文章来源:https://mp.weixin.qq.com/s/kdfByodhemfCsBxLDN2LAA


前文介绍了 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 拓扑结构图:



2.1 MCH(北桥芯片)

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


具体功能包括:


  1. 前端总线(FSB)连接

  2. CPU 通过前端总线(FSB)连接到 MCH,支持高达 1333 MHz 的 FSB 速度。

  3. 内存控制器

  4. 支持 DDR2 内存,最大内存容量为 8GB,支持双通道内存配置,从而提高内存带宽和性能。

  5. 图形接口

  6. 集成 GMA 3100 图形核心,支持基础的 3D 图形加速和高清视频播放。

  7. 提供 PCI Express x16 插槽,用于外接独立显卡。

  8. 高速 PCIe 接口

  9. 提供多条 PCIe 通道,包括一个 PCIe x16 通道用于显卡,另有 PCIe x1 通道用于其他高速扩展卡。

2.2 ICH(南桥芯片)

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


具体功能包括:


  1. 存储接口

  2. 提供 6 个 SATA 3Gb/s 接口,用于连接硬盘和光驱。

  3. 提供一个并行 ATA 接口,支持两个 PATA 设备。

  4. USB 接口

  5. 支持多达 12 个 USB 2.0 接口,用于连接各种 USB 外设,如鼠标、键盘、打印机等。

  6. 低速 PCIe 接口

  7. 提供额外的 PCIe x1 通道,用于低速外设的连接。

  8. 网络接口

  9. 集成千兆以太网控制器,提供高速网络连接。

  10. 音频控制

  11. 集成高保真音频控制器,支持多声道音频输出,适用于家庭影院和高质量音频播放。

  12. 其他接口

  13. 包括传统的 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 拓扑结构

3.2 中断请求路由

IRQ(中断请求)路由是芯片组用于管理和分配设备中断信号的机制。下面对比以下 Q35 和 I440FX 在 IRQ 路由方面的差异。

3.2.1 I440FX/PIIX4 IRQ 路由


  1. IRQ 路由机制

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

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

  4. 中断分配

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

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

3.2.2 Q35 IRQ 路由


  1. IRQ 路由机制

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

  3. 中断模式:支持两种模式

  4. 传统 PIC 模式:类似于 I440FX/PIIX4 的 8259A PIC 模式,用于兼容旧系统。

  5. I/O APIC 模式:使用 I/O 高级可编程中断控制器(APIC),提供更多的中断向量和更高效的中断处理。

  6. 中断分配

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

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

  9. 槽位 0-24 映射到 PIRQE-H,使用循环轮转机制分配中断。

  10. 槽位 25-31 可以通过编程映射到 PIRQ 引脚。

  11. 可编程映射:PCIe 总线到 PIRQ 的映射可以进行编程,提供灵活的中断管理。

  12. PCI IRQ 向量

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

  14. 这种增加使得 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 内核拾遗

文章来源:https://mp.weixin.qq.com/s/kdfByodhemfCsBxLDN2LAA


发布于: 刚刚阅读数: 5
用户头像

聚沙成塔 2023-01-12 加入

分享Linux内核开发相关的编程语言、开发调试工具链、计算机组成及操作系统内核知识、Linux社区最新资讯等

评论

发布
暂无评论
QEMU X86架构机器类型之pc-q35-ich9_Linux Kenel_Linux内核拾遗_InfoQ写作社区