首页 理论教育 KVM桌面云服务端I/O虚拟化解决方案研究成果

KVM桌面云服务端I/O虚拟化解决方案研究成果

时间:2023-10-19 理论教育 版权反馈
【摘要】:Intel VT-d技术通过在北桥引入DMA重映射硬件,以提供设备重映射和设备直接分配的功能。图3-10右图中是启用VT-d的情况,此时设备的DMA只能访问指定的物理内存。VT-d技术提供了DMA重映射技术就是来解决这个在进行DMA操作时将GPA转换成MPA的问题。PCI总线结构通过设备标示符可以索引到任何一条总线上的任何一个设备,而VT-d中的DMA总线传输中也包含一个BDF用于标识DMA操作发起者。目前,VT-d技术中该字段为0,表示多级页表。

KVM桌面云服务端I/O虚拟化解决方案研究成果

Intel VT-d技术通过在北桥(MCH)引入DMA(Direct Memory Access,直接内存访问)重映射硬件,以提供设备重映射和设备直接分配的功能。在启用VT-d的平台上,设备所有的DMA传输都会被DMA重映射硬件截获。根据设备对应的I/O页表,硬件可以对DMA中的地址进行转换,使设备只能访问到规定的内存。使用VT-d后,设备访问内存的架构如图3-10所示。

图3-10左图中是没有启动VT-d的情况,此时设备的DMA可以访问整个物理内存。图3-10右图中是启用VT-d的情况,此时设备的DMA只能访问指定的物理内存。

图3-10 使用VT-d后设备访问内存的架构

DMA重映射技术是VT-d技术提供的最关键的功能之一,DMA重映射的基本原理是:

在进行DMA操作时,设备需要做的就是向(从)驱动程序告知的“物理地址”复制(读取)数据。然而,在虚拟机环境下,客户机使用的是GPA,那么客户机驱动操作设备也用GPA。但是设备在进行DMA操作时,需要使用MPA(Memory Physical Address,内存物理地址),于是I/O虚拟化的关键问题就是如何在操作DMA时将GPA转换成MPA。VT-d技术提供了DMA重映射技术就是来解决这个在进行DMA操作时将GPA转换成MPA的问题。

PCI总线结构通过设备标示符(BDF)可以索引到任何一条总线上的任何一个设备,而VT-d中的DMA总线传输中也包含一个BDF用于标识DMA操作发起者。除了BDF外,VT-d还提供了两种数据结构来描述PCI架构,分别是根条目(Root Entry)和上下文条目(Content Entry)。下面,将分别介绍一下这两种数据结构。

(1)根条目

根条目用于描述PCI总线,每条总线对应一个根条目。由于PCI架构支持最多256条总线,故最多可以有256个根条目。这些根条目一起构成一张表,称为根条目表(Root Entry Table)。有了根条目表,系统中每一条总线都会被描述到。图3-11是根条目的结构。

图3-11 根条目的结构

图3-11中主要字段解释如下:

P:存在位。P为0时,条目无效,来自该条目所代表总线的所有DMA传输被屏蔽。P为1时,该条目有效。

CTP(Context Table Point,上下文表指针):指向上下文条目表。

(2)上下文条目

上下文条目用于描述某个具体的PCI设备,这里的PCI设备是指逻辑设备(BDF中function字段)。一条PCI总线上最多有256个设备,故有256个上下文条目,它们一起组成上下文条目表(Context Entry Table)通过上下文条目表,可描述某条PCI总线上的所有设备。图3-12是上下文条目的结构。(www.xing528.com)

图3-12 上下文条目的结构

图3-12中主要字段解释如下。

P:存在位。为0时条目无效,来自该条目所代表设备的所有DMA传输被屏蔽。为1时,表示该条目有效。

T:类型,表示ASR字段所指数据结构的类型。目前,VT-d技术中该字段为0,表示多级页表。

ASR(Address Space Root,地址空间根):实际是一个指针,指向T字段所代表的数据结构,目前该字段指向一个I/O页表。

DID(Domsin ID,域标识符):DID可以看作用于唯一标识该客户机的标识符。

根条目表和上下文条目表共同构成了图3-13所示的两级结构。

图3-13 根条目表和上下文条目表构成的两级结构

当DMA重映射硬件捕获一个DMA传输时,通过其中BDF的bus字段索引根条目表,可以得到产生该DMA传输的总线对应的根条目。由根条目的CTP字段可以获得上下文条目表,用BDF中的{dev,func}索引该表,可以获得发起DMA传输的设备对应的上下文条目。从上下文条目的ASR字段,可以寻址到该设备对应的I/O页表此时,DMA重映射硬件就可以做地址转换了。通过这样的两级结构,VT-d技术可以覆盖平台上所有的PCI设备,并对它们的DMA传输进行地址转换。

I/O页表是DMA重映射硬件进行地址转换的核心。它的思想和CPU中分页机制的页表类似,CPU通过CR3寄存器就可以获得当前系统使用的页表的基地址,而VT-d需要借助根条目和上下文条目才能获得设备对应的I/O页表。VT-d使用硬件查页表机制,整个地址转换过程对于设备、上层软件都是透明的。与CPU使用的页表相同,I/O页表也支持多种粒度的页面大小,其中最典型的4KB页面地址转换过程如图3-14所示。

图3-14 DMA重映射的4KB页面地址转换过程

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈