AMD-V中断虚拟化(AVIC):hw支持和IOMMU交互

时间:2014-05-06 05:22:41

标签: x86-64 hypervisor iommu

我在AMD64架构编程手册(APM)第2卷中遇到过高级虚拟中断控制器(AVIC)。有些内容对我来说不清楚,所以我很快就浏览了流行的开放源管理程序(Qemu / KVM和Xen,仅举几例)来源,了解它如何与AMD IOMMU一起使用。似乎他们都没有使用AVIC,Bochs / Qemu也没有仿真它(Qemu中有一个IOMMU仿真,但修订版1没有虚拟化中断)。

所以出现了两个问题:

  1. 为什么AVIC如此"不受欢迎"?也许目前市场上的CPU并没有广泛支持它,或者是因为所有这些虚拟机管理程序都有很长的历史,并且已经自行虚拟化中断,因此移植到AVIC并不是首要任务? (或者我刚刚错过了消息来源中的某些内容?)

  2. [原始问题] IOMMU设备表条目中的访客虚拟APIC表根指针是指向物理APIC ID表的指针,如APM Vol。 2,Sect。 15.29.2.3?

  3. 感谢您的澄清。

2 个答案:

答案 0 :(得分: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后备页面的指针。

确实是一种有用的机制,可惜它在硬件中尚不支持。

答案 1 :(得分: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-intel-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年初推出)。