2

我在 AMD64 架构编程手册 (APM) 第 2 卷中遇到了高级虚拟中断控制器 (AVIC)。有些地方我不清楚,所以我快速浏览了流行的开源管理程序(Qemu/KVM 和Xen,仅举几例)来源,看看它是如何与 AMD IOMMU 一起使用的。似乎他们都没有使用 AVIC,Bochs/Qemu 也没有模拟它(Qemu 中有一个 IOMMU 模拟,但它适用于不虚拟化中断的版本 1)。

于是出现了两个问题:

  1. 中航工业为何如此“冷门”?也许现在市场上的 CPU 没有广泛支持它,或者是因为所有这些虚拟机管理程序都有很长的历史并且已经自己虚拟化中断,所以移植到 AVIC 不是首要任务?(或者我只是错过了来源中的某些内容?)

  2. [原问题] IOMMU的Device Table Entry中的Guest Virtual APIC Table Root Pointer是否是APM Vol. 中定义的Physical APIC ID Table的指针。2,教派。15.29.2.3?

谢谢你的澄清。

4

2 回答 2

2

看起来即使在 16h 系列处理器中也不支持 AVIC(“AMD 系列 16h 型号 00h-0Fh (Kabini) 处理器的初步 BIOS 和内核开发人员指南 (BKDG)”说 CPUID Fn8000_000A_EDX[AVIC] 值为 0)。这可能是它也没有在管理程序中实现的原因。

似乎第二个问题是由于我使用了不同的 APM 和 IOMMU 规范修订。当我得到兼容的(APM Rev. 3.24 和 IOMMU spec Rev. 2.6)时,IOMMU 的数据结构似乎发生了显着变化。来宾虚拟 APIC 表根指针从 DTE 移动到 IRTE,现在严格定义为指向虚拟 APIC 支持页面的指针。

确实是一个有用的机制,可惜硬件还不支持。

于 2014-05-06T06:52:09.630 回答
2

中航工业在 2012 年大张旗鼓地宣布(见http://www.slideshare.net/xen_com_mgr/introduction-of-amd-virtual-interrupt-controllerhttp://www.linuxplumbersconf.org/2012/wp- content/uploads/2012/09/2012-lpc-virt-interrupt-virt-kvm-roedel.pdf),但尚未在实际硬件中实现。

为旧硬件模拟 x2APIC 可提供合理的性能提升。Qemu 现在甚至为 Opteron gen 1 模拟 x2APIC:http : //lists.nongnu.org/archive/html/qemu-devel/2014-01/msg02441.html 最初设计的 AVIC 不提供 x2APIC 支持,因此可能是它从未起飞的另一个原因。(参见第二个链接中的幻灯片 2-4。)

同时,在 2012 年,英特尔宣布了自己的实验性“APICv”,尽管它在介绍时缺乏一个吸引人的名字http://www.linuxplumbersconf.org/2012/wp-content/uploads/2012/09/2012-lpc-virt-英特尔-vt-feat-nakajima.pdf。但英特尔的技术在 2013 年底出现的基准测试中似乎是真实的:https : //software.intel.com/en-us/blogs/2013/12/17/apic-virtualization-performance-testing-and-iozone 英特尔的 APICv 在Ivy Bridge EP 系列 ( http://ark.intel.com/products/codename/68926/Ivy-Bridge-EP#@All )中的微码级别,以Xeon E5-26xx v2 品牌名称销售(于2013 年末)和 Xeon E5-46xx v2(2014 年初推出)。

于 2014-07-12T02:57:30.733 回答