CN102521054B - 一种sun4v架构下的虚拟机DMA资源分配方法 - Google Patents
一种sun4v架构下的虚拟机DMA资源分配方法 Download PDFInfo
- Publication number
- CN102521054B CN102521054B CN 201110419488 CN201110419488A CN102521054B CN 102521054 B CN102521054 B CN 102521054B CN 201110419488 CN201110419488 CN 201110419488 CN 201110419488 A CN201110419488 A CN 201110419488A CN 102521054 B CN102521054 B CN 102521054B
- Authority
- CN
- China
- Prior art keywords
- dma
- virtual address
- control domain
- client territory
- virtual
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Bus Control (AREA)
Abstract
本发明公开了一种sun4v架构下的虚拟机DMA资源分配方法,步骤如下:1)控制域与客户域保留全局预留虚地址空间并建立地址转换页表;2)客户域向控制域协商获取DMA虚地址,控制域从全局预留虚地址空间分配DMA虚地址给客户域;3)虚拟机监控器给客户域开放输入输出内存管理单元服务接口;4)客户域查找地址转换页表得到实地址和表项序号,客户域根据实地址和表项序号调用输入输出内存管理单元服务接口实现对物理内存的DMA操作,且在DMA操作完成后释放分配的DMA虚地址。本发明的客户域能够不通过控制域直接进行DMA操作,具有可靠性好、安全性高、性能损失低、灵活性和自适应性好、适用范围广的优点。
Description
技术领域
本发明涉及计算机的虚拟化技术领域,具体涉及一种sun4v架构下的虚拟机DMA资源分配方法。
背景技术
虚拟化技术已经在计算机领域获得了广泛应用,目前的虚拟化技术可以分为两大类:一类是对单物理机器上的冗余资源通过分区或复用等方式建立多个虚拟机环境;另一类是将多个物理机资源进行整合以建立能力更为强大的统一计算机环境。本文涉及第一类虚拟化技术,即面向单一物理计算机***上的虚拟化。
传统的计算机***软件一般由操作***和用户软件组成;虚拟化技术给计算机***引入了一个新的软件层次(也称为特权级或运行态),虚拟化的计算机中在操作***下加入了虚拟机监控器(Virtual Machine Monitor,VMM),用于完成对资源隔离管理等工作。从计算机资源组成的角度出发,虚拟化技术构成可以分为三个方面:CPU资源虚拟化、内存资源虚拟化、IO(Input-Output)资源虚拟化,三个方面的目的就是将对应的资源在VMM的管理下以某种隔离方式分配到不同的虚拟机(Virtual Machine,VM)环境中,使虚拟机中的***软件认为它们拥有自己的相应私有资源。CPU资源和内存资源的虚拟化相对简单。对于CPU资源,VMM可以进行时间片分割或在CPU数量足够时将CPU直接分配到各虚拟机。对于内存资源,VMM可以使用分页、分段等内存映射技术隔离分配给虚拟机使用。但是IO资源的虚拟化有其相对特殊性:首先,IO设备对***来说是不确定的,因为允许总线上热拔插事件和故障隐退;其次,标准PCI总线上设备的管理具有较强关联性,必须一次扫描完成其上所有设备的初始化,VMM难以将不同的设备直接分配到各虚拟机,更难以对设备进行分时分配;再次,IO设备种类繁多、驱动程序的可靠性差,一般交由虚拟机操作***直接驱动。基于上述原因,VMM一般只能以PCI总线域(或者HOST主桥)的粒度将IO设备分配到虚拟机,由虚拟机对主桥下总线上挂接的各种设备进行驱动管理。计算机上PCI总线域数量有限,一般只有一个,因此传统的虚拟化技术一般是把所有IO设备交给一个特殊的虚拟机管理,这个虚拟机称为控制域或者Domain0,其它虚拟机通过虚拟信道使用控制域提供的服务完成自己的IO,这些虚拟机称为客户域或者DomainU。
如图1所示,以传统虚拟机中的控制域和客户域实现磁盘设备访问为例,控制域可以对文件***(FS)进行直接读写并访问本地磁盘驱动程序,而客户域中没有真实的IO设备,但是拥有虚拟磁盘,这是虚拟磁盘客户端驱动程序vdc提供的。客户域的文件***操作命令被vdc转换为通信协议通过域间信道LDC发送到控制域的服务程序vds,vds访问本地文件***或磁盘驱动完成访问请求后,再将返回结果转换为协议通过域间信道发送给客户域的vdc驱动,客户域的读写请求最终完成。从图1中可以看出传统的虚拟化技术对IO管理的方式较为简单,设备空间访问、DMA管理、以及中断管理等都可以充分利用传统操作***的能力完成,不需要额外的机制和代码。然而这种虚拟IO的方式不但增加IO请求的处理路径,显著降低IO性能,而且会将控制域变为IO瓶颈。为解决上述问题,人们提出了虚拟机直接IO思想,也就是将设备地址空间访问、DMA管理和中断管理的权限都开放给客户域。
DMA的全称是直接内存访问(Directed Memory Access),就是让CPU从设备的数据传输中解放出来,使设备直接同内存传送数据,传输完毕后再通知CPU进行处理。本发明中的DMA资源管理只涉及DMA内存的管理,不涉及传输完成后的通知机制(一般是中断)。在虚拟机直接IO技术中,出于效率和安全隔离的要求,会需要一个称为输入输出内存管理单元(input/output memory management unit,IOMMU)的额外硬件的支持用于DMA管理。IOMMU负责把设备IO地址转换为真正的物理内存地址,作用有如下四种:一是脱离设备32位地址空间的局限,二是使设备DMA时可使用物理上不连续的地址段,三是通过加入虚拟机的域标识以保持各虚拟机中设备的隔离性,四是使设备只能访问受限的地址并且控制故障对其它虚拟机和主机的影响。IOMMU的设计同主机的体系结构有很直接的相关性,常见的IOMMU有对应于SPARC架构的sun4u IOMMU和sun4v IOMMU、对应于x86-64架构的AMD IOMMU、对应于intel64架构的INTEL VT-d IOMMU以及PowerPC架构上的IBM IOMMU等,这些IOMMU的设计大都加入了对虚拟机直接IO的支持。
sun4v架构是SUN公司在sparc系列处理器上开发的硬件级虚拟化技术架构,在处理器上实现了对CPU分区、内存分区、以及IO虚拟化的指令和寄存器支持,SUN公司将基于sun4v架构的opensparc T1和opensparc T2处理器开源。飞腾1000系列通用处理器(下简称飞腾CPU)是由国防科技大学自主研发的高性能通用微处理器,它基于opensparc T2架构设计,兼容sparc v9指令集。飞腾CPU芯片使用成熟的SOC技术,片上集成了8个处理核,核内包含8个硬件线程,具有强大的计算和事务处理能力。此外芯片上还集成存控单元和PCI Express接口,有效解决了IO瓶颈问题。为了更加高效地使用处理器芯片上提供的“海量”资源,飞腾处理器的设计中还引入了完备的硬件虚拟化支持,使SOC***又可以被划分成相互隔离的资源分区,支持多达64个虚拟机的同时运行,不但可使***资源利用率得到大幅度提升,还能在高可用、高安全方面有更佳表现。飞腾CPU平台上的虚拟化技术也是以SUN公司开发的sun4v技术为基础构建。软件被分为hyper-privilege、privilege和non-privilege三种运行态,分别对应于VMM、操作***内核和用户态软件。三个运行态的软件分别可以访问物理地址、实地址和虚地址,操作***只能访问到实地址和虚地址,VMM才能访问物理地址。飞腾CPU在片上的DMU(数据管理单元,Data Management Unit)模块中集成了IOMMU,该IOMMU支持三种使用模式,即bypass、sun4u和sun4v模式。目前***运行时实际使用sun4u模式,IOMMU对所有设备使用一套地址转换页表(IOTSB, IO Translation Storage Buffer),执行页表中虚地址到物理地址的转换,由固件中的VMM直接控制IOMMU的状态和IOTSB的读写。VMM通过服务接口的形式使授权的虚拟机***软件可以提交IOMMU服务请求,以完成设备DMA的准备工作,VMM提供的两个主要IOMMU服务接口见下表。
服务接口名称 | 作用 |
pci_iommu_map() | 生成一个IOMMU映射 |
pci_iommu_demap() | 取消一个IOMMU映射并清洗IOTSB表项 |
由于原有***软件只支持虚拟共享IO,VMM只对拥有PCIE IO总线的虚拟机开放上述服务接口,其它虚拟机***软件在调用这些服务时会返回非法请求错误,这样就保证了各虚拟机的权限审核,只有控制域才能调用IOMMU服务接口。
由于传统PCI总线设备仅能进行32位总线寻址,虽然飞腾1000是64位CPU,但当前使用的IOMMU只支持32位DMA空间。一般情况下,IOMMU使用的地址转换页表(IOTSB)的表项按照图2的方式组织。当表项映射的页尺寸是8kbyte时,如果使用全部32位(4Gbyte)空间作为DMA虚地址空间,则使用0x0-0xFFFF FFFF虚地址段,IOTSB有512k个表项;如果使用2Gbyte的虚地址空间,则仅使用高位的0x80000000-0xFFFF FFFF虚地址段,IOTSB有256k个表项如图2左部所示;其它的DMA虚空间尺寸对应的虚地址段和IOTSB的表项数以此类推。飞腾CPU的IOMMU也支持64k的页尺寸,可选的DMA虚空间尺寸和虚地址段以及IOTSB表项数如图2右部所示。VMM对IOTSB进行直接管理,因此IOMMU的各项参数在VMM和操作***中应保持一致,飞腾CPU的IOMMU一般使用2Gbyte的虚地址空间,也即0x80000000-0xFFFF FFFF虚地址段。
地址转换页表(IOTSB)是由若干数量的IOTTE(IO Translation Table Entry)表项按照顺序排列形成的表,每个IOTTE表项按有64位,其位构成如图3所示。每个IOTTE表项按所处的位置与其所映射的DMA虚地址存在一一映射的关系,以0x80000000-0xFFFF FFFF虚地址段为例,其换算公式为:
IOTTE表项的表项序号=(DMA虚地址-0x80000000)>> MMU_PAGESHIFT
其中,>>表示逻辑右移,MMU_PAGESHIFT是页尺寸(8k)对应的右移量(13)。
IOTTE表项的data_pa中记录了该表项所映射的物理地址,由于只有VMM能够管理机器的物理地址,因此IOTTE的填充必须由VMM完成。IOTTE表项中各个位的作用如下表所示:
Bit | 域名 | 描述 |
63:48 | dev_key | 即Device Key,16位PCIE请求者ID(bus #, device #, function #) |
47:39 | -- | 保留位 |
38:13 | data_pa | 物理地址[38:13] |
12:6 | data_soft | 保留由软件使用 |
5:3 | fnm | sun4v模式的功能号掩码 |
2 | key_valid | Device Key的有效位 |
1 | data_w | 写权限位(0为不可写,1为可写) |
0 | data_v | 有效位(0为无效,1为有效) |
现有技术飞腾CPU的VMM仅允许控制域的操作***调用IOMMU服务,从***固件中给出的控制域机器描述(Machine Description,MD)中,控制域操作***获知其可以使用0x80000000-0xFFFF FFFF虚地址段作为DMA虚地址空间,因此控制域操作***在启动时会将0x80000000-0xFFFF FFFF虚地址段预留,不会被除DMA之外的其它代码使用。其设备的DMA申请过程如图4所示。控制域首先申请内存地址(虚地址),然后判断此时DMA地址是否够用,如果不够用则无法分配虚地址,DMA分配失败;如果DMA地址够用,则计算IOTSB的表项序号得到内核页面地址(实地址),然后控制域将表项序号和实地址一起作为参数进行VMM调用,VMM将实地址转换为物理地址并写入与表项序号对应的IOTSB表项中,DMA分配成功。
综上所述,目前sun4v的虚拟化技术仅仅是控制域能够对设备的直接访问,客户域只能通过控制域实现虚拟共享访问,而无法对设备的直接访问,客户域必须通过控制域才能完成DMA操作,抑制了虚拟机的IO性能并使控制域成为***的IO瓶颈,使飞腾处理器平台难以发挥其最大的处理能力,同样也难以发挥其他opensparc T1、opensparc T2等基于sun4v架构的虚拟机的最大的处理能力。
发明内容
本发明要解决的技术问题是提供一种客户域能够不通过控制域直接进行DMA操作, 能够实现完全隔离、可靠性好、安全性高、性能损失低、灵活性和自适应性好、适用范围广的sun4v架构下的虚拟机DMA资源分配方法。
为了解决上述技术问题,本发明采用的技术方案为:一种sun4v架构下的虚拟机DMA资源分配方法,其实施步骤如下:
1)虚拟机的控制域与客户域在操作***启动时均保留用于DMA操作的全局预留虚地址空间,控制域与客户域分别建立用于将所述全局预留虚地址空间内的DMA虚地址转换为物理内存地址的地址转换页表;
2)待DMA操作的客户域向控制域协商获取DMA虚地址,控制域从所述全局预留虚地址空间分配DMA虚地址给客户域;控制域从全局预留虚地址空间分配DMA虚地址给客户域后,控制域还将分配的DMA虚地址写入虚拟机监控器的客户域描述结构中;
3)控制域通知虚拟机监控器给各个客户域开放输入输出内存管理单元服务接口;
4)客户域根据所述分配的DMA虚地址查找地址转换页表得到实地址和地址转换页表的表项序号,客户域根据所述实地址和表项序号调用输入输出内存管理单元服务接口实现客户域对物理内存的DMA操作,在DMA操作完成后客户域与控制域分别释放所述分配的DMA虚地址。
作为本发明上述技术方案的进一步改进:
所述步骤1)中保留的全局预留虚地址空间为连续分布的地址段。
所述步骤2)中控制域从全局预留虚地址空间分配给客户域的DMA虚地址包含至少一个连续分布的地址段。
所述步骤2)中待DMA操作的客户域向控制域协商获取DMA虚地址的详细步骤包括:在控制域与客户域之间建立逻辑域信道,待DMA操作的客户域通过所述逻辑域信道向控制域协商获取DMA虚地址。
所述在控制域与客户域之间建立逻辑域信道的详细步骤包括:首先虚拟机监控器添加逻辑域信道,然后在控制域的操作***和客户域的操作***中分别添加用于驱动所述逻辑域信道的驱动模块。
所述步骤2)中控制域从全局预留虚地址空间分配DMA虚地址给客户域的详细步骤包括:控制域预先设定允许分配给每一个客户域的DMA虚地址的允许地址范围,控制域从全局预留虚地址空间分配DMA虚地址给客户域时,控制域首先查找获取客户域对应的允许地址范围,并从允许地址范围中分配DMA虚地址给客户域。
所述步骤2)中控制域从所述全局预留虚地址空间分配DMA虚地址给客户域后,控制域还将所述分配的DMA虚地址写入虚拟机监控器的客户域描述结构中;所述步骤4)中在客户域调用输入输出内存管理单元服务接口之前,所述虚拟机监控器预先读取客户域对应客户域描述结构中的DMA虚地址,然后虚拟机监控器将读取的DMA虚地址与客户域用于调用输入输出内存管理单元服务接口的调用参数中的DMA虚地址进行比较,如果两者匹配则虚拟机监控器接受客户域调用输入输出内存管理单元服务接口,如果两者不匹配则虚拟机监控器拒绝客户域调用输入输出内存管理单元服务接口。
所述步骤4)中客户域与控制域分别释放所述分配的DMA虚地址的详细步骤包括:首先客户域在DMA操作完成后释放其分配得到的DMA虚地址,然后客户域检查全局预留虚地址空间内是否存在连续DMA虚地址处于空闲状态,如果存在连续DMA虚地址处于空闲状态则通知控制域,控制域在收到所述通知后在全局预留虚地址空间中释放所述DMA虚地址。
本发明具有下述优点:
1、本发明通过虚拟机的控制域与客户域在操作***启动时均保留用于DMA操作的全局预留虚地址空间实现了统一的DMA内存页分配机制、通过地址转换页表建立了统一的地址转换页表分配机制,从而客户域不需要通过控制器而直接访问DMA控制器,能够实现虚拟机各个客户域之间的数据、故障、状态变化完全隔离,提高了虚拟机的整体IO性能,对当前软件***的改动很小,可靠性好、安全性高。
2、本发明所引入的开销主要在操作***初始化和DMA虚地址的动态申请和撤销阶段,对设备IO操作和DMA请求分配等操作没有引入开销,相当于客户域直接有DMA控制器的访问能力,性能损失做到了最小化。
3、本发明客户域通过调用输入输出内存管理单元服务接口实现客户域对物理内存的DMA操作,对输入输出内存管理单元(IOMMU)的需求较低,没有虚拟化特性上的需求,因此具有适用范围广的优点。
4、本发明对于待DMA操作的客户域所需求的虚地址段采用协商-分配的形式,对DMA虚地址空间要求较多的操作***,可以相应动态分配较多的DMA虚空间,具有较高的灵活性和自适应性。
附图说明
图1为现有技术的虚拟机磁盘设备访问的实现原理示意图。
图2为现有技术IOTSB表项的页尺寸、页表尺寸和虚地址范围的关系图。
图3为现有技术IOTTE表项的结构示意图。
图4为现有技术控制域申请DMA地址的实施流程示意图。
图5为本发明实施例的实施流程示意图。
图6为本发明实施例客户域申请DMA地址的实施流程示意图。
具体实施方式
本实施例的虚拟机环境为基于sun4v架构的飞腾处理器平台,控制域拥有PCIE总线(MD中指定),客户域没有物理PCIE总线设备。
如图5所示,本实施例sun4v架构下的虚拟机DMA资源分配方法的实施步骤如下:
1)虚拟机的控制域与客户域在操作***启动时均保留用于DMA操作的全局预留虚地址空间,控制域与客户域分别建立用于将全局预留虚地址空间内的DMA虚地址转换为物理内存地址的地址转换页表(IOTSB);
2)待DMA操作的客户域向控制域协商获取DMA虚地址,控制域从全局预留虚地址空间分配DMA虚地址给客户域,实现客户域与控制域之间的协商DMA虚地址空间;
3)虚拟机监控器(VMM)给客户域开放输入输出内存管理单元服务接口(IOMMU服务接口);
4)客户域根据分配的DMA虚地址查找IOTSB得到实地址和IOTSB的表项序号,客户域根据实地址和表项序号调用IOMMU服务接口实现客户域对物理内存的DMA操作,且在DMA操作完成后客户域与控制域分别释放分配的DMA虚地址。
步骤1)中保留的全局预留虚地址空间为连续分布的虚地址段,本实施例中控制域固件MD描述中使用1Gbyte的全局预留虚地址空间, 全局预留虚地址空间内DMA虚地址的地址段为0x8000 0000~0xBFFF FFFF,步骤3)中控制域从全局预留虚地址空间分配给客户域的DMA虚地址可以包含一个或者更多个连续分布的地址段。在控制域的操作***启动时会预先读取控制域固件MD描述中的全局预留虚地址空间,并预留虚地址段0x8000 0000~0xBFFF FFFF,飞腾CPU共使用2 Gbyte的虚地址空间,另外1Gbyte的虚地址空间0xC000 0000~0xFFFF FFFF将可以被其它客户域操作***使用。同时本实施例中通过修改客户域操作***的内核,使其在启动时也保留虚地址段0x8000 0000~0xBFFF FFFF,供可能的设备DMA使用。虽然可能用于DMA的1Gbyte的DMA虚地址0xC000 0000~0xFFFF FFFF空间很小,但相对于64位虚地址空间来说,此处引入的浪费可以忽略,对于虚拟机的整体影响也可以忽略。此外,也可以根据实际需要预留足够大的全局预留虚地址空间。
本实施例中,步骤3)中VMM给客户域开放IOMMU服务接口具体是指修改VMM,开放pci_iommu_map()、pci_iommu_demap()等服务接口给客户域,也即将这些函数的指针写入VMM中各客户域所对应的hcall_tables[]中。
步骤2)中待DMA操作的客户域向控制域协商获取DMA虚地址可以包含多个地址段,步骤2)中待DMA操作的客户域向控制域协商获取DMA虚地址的详细步骤包括:在控制域与客户域之间建立逻辑域信道,待DMA操作的客户域通过逻辑域信道向控制域协商获取DMA虚地址。本实施例中,在控制域与客户域之间建立逻辑域信道的详细步骤包括:首先虚拟机监控器添加逻辑域信道DMA_LDC,即:分别在VMM、控制域和客户域的MD描述文件中(位于由VMM控制的存储区域)加入对应的逻辑域信道描述信息,各域就能看到对应的逻辑域信道端口设备,然后在控制域的操作***和客户域的操作***中分别添加用于驱动逻辑域信道的驱动模块,即:在控制域操作***中加入新的驱动模块DMA_MODULE_CTL、在客户域操作***中加入新的驱动模块DMA_MODULE_GUEST,将逻辑域信道DMA_LDC作为DMA_MODULE_CTL和DMA_MODULE_GUEST所驱动的设备之一。本实施例中,控制域为了实现全局预留虚地址空间的分配,在DMA_MODULE_CTL中加入各客户域所用DMA虚地址的动态列表DMA_ADDR_LIST,该列表初始化为空。在客户域启动时,DMA_MODULE_CTL和DMA_MODULE_GUEST通过DMA_LDC协商客户域所用的DMA虚地址,由DMA_MODULE_CTL保证各客户域以及控制域所用的DMA虚地址互不冲突,客户域在协商好自己的DMA虚地址后,将该地址段送给该客户域直接访问设备的驱动模块。
步骤2)中控制域从全局预留虚地址空间分配DMA虚地址给客户域的详细步骤包括:控制域预先设定允许分配给每一个客户域的DMA虚地址的允许地址范围,控制域从全局预留虚地址空间分配DMA虚地址给客户域时,控制域首先查找获取客户域对应的允许地址范围,并从该允许地址范围中分配DMA虚地址给客户域。本实施例中通过设定客户域允许的DMA虚地址的范围,从而可以从根本上避免不同的客户域协商获取相同的DMA虚地址,从而可以避免不同客户域之间发生冲突的可能。
步骤2)中控制域从全局预留虚地址空间分配DMA虚地址给客户域后,控制域还将分配的DMA虚地址写入VMM的客户域描述结构中,本实施例中通过修改VMM的客户域描述结构来实现存储分配给各客户域的DMA虚地址,同时添加面向控制域的调用接口dma_alloc_guest(guestid, va, size),控制域通过调用接口dma_alloc_guest向VMM传递分配给每个客户域并允许客户域使用的DMA虚地址,VMM在处理该调用时将各客户域对应的DMA虚地址记录到客户域描述结构中。步骤4)中在客户域调用IOMMU服务接口之前,VMM预先读取客户域对应客户域描述结构中的DMA虚地址,然后VMM将读取的DMA虚地址与客户域用于调用IOMMU服务接口的调用参数中的DMA虚地址进行比较:如果两者匹配则VMM判断送入的IOTSB合法,接受客户域调用IOMMU服务接口;如果两者不匹配则VMM判定调用为非法且返回调用失败,拒绝客户域调用IOMMU服务接口。
本实施例中,控制域和客户域操作***对设备做DMA管理时都使用下列公式做DMA虚地址到IOTSB(IOTTE表项)的换算:
表项序号=(DMA虚地址-0x80000000)>> MMU_PAGESHIFT
其中>>表示逻辑右移,MMU_PAGESHIFT是页尺寸(8k)对应的右移量(13)。
如图6所示,客户域在申请DMA虚地址的详细工作流程如下:驱动程序向内核申请需要的DMA虚地址长度,内核检查当前的DMA虚地址空间中是否有空闲的连续地址段符合要求;如果没有,则内核通过DMA_LDC和控制域协商新的DMA虚地址;如果协商成功则控制域通过VMM调用将该段虚地址告诉VMM;协商成功后,内核将分配的虚地址段(按照页尺寸对齐)以及所映射的实地址页面返回给驱动程序;驱动程序利用公式计算这个地址段对应的IOTTE表项的表项序号(可能是连续的多个);驱动程序将IOTTE表项的表项序号和对应的实地址作为参数调用VMM的pci_iommu_map()接口;VMM首先检查IOTTE序号是否合法,如合法则根据调用者(客户域ID)将传入的实地址转换为物理地址,并最终写入IOTSB的IOTTE表项中。
本实施例中,步骤4)中客户域与控制域分别释放分配的DMA虚地址的详细步骤包括:首先客户域在DMA操作完成后释放其分配得到的DMA虚地址,然后客户域检查全局预留虚地址空间内是否存在连续DMA虚地址处于空闲状态,如果存在连续DMA虚地址处于空闲状态则通知控制域,控制域收到通知后在全局预留虚地址空间中释放DMA虚地址。本实施例中的DMA虚地址动态协商机制也包括DMA虚地址的动态释放,该释放可以是内核在处理驱动程序的DMA释放时先检查后执行协商。也就是说,驱动程序释放了自己申请的DMA虚地址后,内核检查是否有成单位的连续虚地址段已经处于空闲状态。如果有,则内核通过DMA_LDC和控制域进行协商,由控制域完成最终的释放。该机制有助于提高DMA资源的利用率和全***DMA资源的分配能力。
针对虚拟机之间的隔离性问题,本实施例中包含几个方面:一是虚拟机之间数据的隔离,二是故障的隔离,三是状态变化的隔离。数据隔离主要和物理地址相关,各客户域以及控制域在做DMA映射时,由VMM保证它们不会使用共同的物理地址,因此数据是严格分离的,无法互访;在DMA方面只要IOTSB中的页表项不产生冲突,则各虚拟机之间不会产生相互影响,因此VMM也能保证故障和虚拟机状态变化不会影响到其它虚拟机;至于客户域发生故障或宕机,则应该由VMM负责探测到这些故障,进行DMA虚地址的回收或再分配,这已经不属于本发明的技术范畴。综上所述,本发明对于虚拟机有良好的隔离性和安全性。
本实施例的整体工作过程如下: 在控制域操作***中预留供DMA使用的足够大连续虚地址空间;设定控制域操作***自身使用的DMA虚地址段范围; 客户域操作***启动时预留统一的连续虚地址空间供DMA使用; 在VMM中提供调用接口给控制域,允许其设定每个客户域的DMA虚地址范围并通知VMM; 控制域采取一定机制保证自身使用的DMA虚地址段和分配给各个客户域的DMA虚地址段互不重叠;在VMM中设立专用的通信信道,使控制域和客户域之间可以通信协商客户域的DMA虚地址段;分别在控制域和客户域中建立统一的IOTSB表项分配机制,使不同虚地址段对应的IOTSB表项也一定不同,这样就可以避免各虚拟机之间和虚拟机内部使用IOTSB的冲突,所有虚拟机可以使用同一套IOTSB;分别在控制域和客户域操作***中建立统一的DMA内存页分配机制,使用该机制为已经分配的DMA虚地址段分配对应的物理内存页面;在VMM中将IOMMU服务接口开放给所有客户域,但是VMM在提供服务时要首先根据控制域设定的客户域虚地址范围进行权限的检查,也就是说每个客户域只允许使用分配给自己的连续虚地址段作为DMA的可选虚地址;客户域调用VMM的IOMMU服务接口建立IOTSB映射表项开始进行DMA操作,并在DMA操作完毕后撤销IOTSB映射表项,释放分配的DMA虚地址。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (8)
1.一种sun4v架构下的虚拟机DMA资源分配方法,其特征在于其实施步骤如下:
1)虚拟机的控制域与客户域在操作***启动时均保留用于DMA操作的全局预留虚地址空间,控制域与客户域分别建立用于将所述全局预留虚地址空间内的DMA虚地址转换为物理内存地址的地址转换页表;
2)待DMA操作的客户域向控制域协商获取DMA虚地址,控制域从所述全局预留虚地址空间分配DMA虚地址给客户域;控制域从全局预留虚地址空间分配DMA虚地址给客户域后,控制域还将分配的DMA虚地址写入虚拟机监控器的客户域描述结构中;
3)控制域通知虚拟机监控器给各个客户域开放输入输出内存管理单元服务接口;
4)客户域根据所述分配的DMA虚地址查找地址转换页表得到实地址和地址转换页表的表项序号,客户域根据所述实地址和表项序号调用输入输出内存管理单元服务接口实现客户域对物理内存的DMA操作,在DMA操作完成后客户域与控制域分别释放所述分配的DMA虚地址。
2.根据权利要求1所述的sun4v架构下的虚拟机DMA资源分配方法,其特征在于:所述步骤1)中保留的全局预留虚地址空间为连续分布的地址段。
3.根据权利要求2所述的sun4v架构下的虚拟机DMA资源分配方法,其特征在于:所述步骤2)中控制域从全局预留虚地址空间分配给客户域的DMA虚地址包含至少一个连续分布的地址段。
4.根据权利要求1所述的sun4v架构下的虚拟机DMA资源分配方法,其特征在于,所述步骤2)中待DMA操作的客户域向控制域协商获取DMA虚地址的详细步骤包括:在控制域与客户域之间建立逻辑域信道,待DMA操作的客户域通过所述逻辑域信道向控制域协商获取DMA虚地址。
5.根据权利要求4所述的sun4v架构下的虚拟机DMA资源分配方法,其特征在于,所述在控制域与客户域之间建立逻辑域信道的详细步骤包括:首先虚拟机监控器添加逻辑域信道,然后在控制域的操作***和客户域的操作***中分别添加用于驱动所述逻辑域信道的驱动模块。
6.根据权利要求1所述的sun4v架构下的虚拟机DMA资源分配方法,其特征在于,所述步骤2)中控制域从全局预留虚地址空间分配DMA虚地址给客户域的详细步骤包括:控制域预先设定允许分配给每一个客户域的DMA虚地址的允许地址范围,控制域从全局预留虚地址空间分配DMA虚地址给客户域时,控制域首先查找获取客户域对应的允许地址范围,并从允许地址范围中分配DMA虚地址给所述客户域。
7.根据权利要求1所述的sun4v架构下的虚拟机DMA资源分配方法,其特征在于:所述步骤2)中控制域从所述全局预留虚地址空间分配DMA虚地址给客户域后,控制域还将所述分配的DMA虚地址写入虚拟机监控器的客户域描述结构中;所述步骤4)中在客户域调用输入输出内存管理单元服务接口之前,所述虚拟机监控器预先读取客户域对应客户域描述结构中的DMA虚地址,然后虚拟机监控器将读取的DMA虚地址与客户域用于调用输入输出内存管理单元服务接口的调用参数中的DMA虚地址进行比较,如果两者匹配则虚拟机监控器接受客户域调用输入输出内存管理单元服务接口,如果两者不匹配则虚拟机监控器拒绝客户域调用输入输出内存管理单元服务接口。
8.根据权利要求1~7中任意一项所述的sun4v架构下的虚拟机DMA资源分配方法,其特征在于,所述步骤4)中客户域与控制域分别释放所述分配的DMA虚地址的详细步骤包括:首先客户域在DMA操作完成后释放其分配得到的DMA虚地址,然后客户域检查全局预留虚地址空间内是否存在连续DMA虚地址处于空闲状态,如果存在连续DMA虚地址处于空闲状态则通知控制域,控制域在收到所述通知后在全局预留虚地址空间中释放所述DMA虚地址。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110419488 CN102521054B (zh) | 2011-12-15 | 2011-12-15 | 一种sun4v架构下的虚拟机DMA资源分配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110419488 CN102521054B (zh) | 2011-12-15 | 2011-12-15 | 一种sun4v架构下的虚拟机DMA资源分配方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102521054A CN102521054A (zh) | 2012-06-27 |
CN102521054B true CN102521054B (zh) | 2013-07-17 |
Family
ID=46291989
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110419488 Active CN102521054B (zh) | 2011-12-15 | 2011-12-15 | 一种sun4v架构下的虚拟机DMA资源分配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102521054B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104166624B (zh) * | 2013-05-15 | 2017-07-07 | 上海贝尔股份有限公司 | 在虚拟环境下基于物理内存的内存优化方法和装置 |
CN105404597B (zh) * | 2015-10-21 | 2018-10-12 | 华为技术有限公司 | 数据传输的方法、设备及*** |
CN106484529B (zh) * | 2016-09-12 | 2019-05-14 | Oppo广东移动通信有限公司 | 终端的内存调整方法及终端 |
US10019288B2 (en) * | 2016-09-12 | 2018-07-10 | Mediatek, Inc. | Fast and stable mechanism for allocating contiguous memory |
US20180260262A1 (en) * | 2017-03-07 | 2018-09-13 | Microsoft Technology Licensing, Llc | Availability management interfaces in a distributed computing system |
CN107329790B (zh) * | 2017-06-30 | 2021-01-15 | 联想(北京)有限公司 | 一种数据处理方法和电子设备 |
CN107562515B (zh) * | 2017-08-04 | 2021-09-07 | 海光信息技术股份有限公司 | 一种在虚拟化技术中管理内存的方法 |
CN110147265A (zh) * | 2019-04-26 | 2019-08-20 | 王云飞 | 一种基于微控制器平台的整合型虚拟化***的方法 |
CN112256605B (zh) * | 2020-11-03 | 2024-05-17 | 蔺建琪 | 安全dma控制器及数据搬运方法 |
CN112416525B (zh) * | 2020-11-27 | 2022-06-03 | 海光信息技术股份有限公司 | 设备驱动初始化方法、直接存储访问方法及相关装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101470633A (zh) * | 2007-12-24 | 2009-07-01 | 联想(北京)有限公司 | 一种虚拟机监视器、虚拟机***及其内存处理方法 |
CN101620573A (zh) * | 2009-07-03 | 2010-01-06 | 中国人民解放军国防科学技术大学 | X86体系结构内存管理单元虚拟化方法 |
CN101751284A (zh) * | 2009-12-25 | 2010-06-23 | 北京航空航天大学 | 一种分布式虚拟机监控器的i/o资源调度方法 |
EP2275932A1 (en) * | 2005-01-14 | 2011-01-19 | Intel Corporation | Virtualizing physical memory in a virtual machine system |
CN102193816A (zh) * | 2010-03-12 | 2011-09-21 | 中国长城计算机深圳股份有限公司 | 一种设备分配方法及*** |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8661181B2 (en) * | 2007-06-28 | 2014-02-25 | Memory Technologies Llc | Memory protection unit in a virtual processing environment |
US8560758B2 (en) * | 2009-08-24 | 2013-10-15 | Red Hat Israel, Ltd. | Mechanism for out-of-synch virtual machine memory management optimization |
-
2011
- 2011-12-15 CN CN 201110419488 patent/CN102521054B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2275932A1 (en) * | 2005-01-14 | 2011-01-19 | Intel Corporation | Virtualizing physical memory in a virtual machine system |
CN101470633A (zh) * | 2007-12-24 | 2009-07-01 | 联想(北京)有限公司 | 一种虚拟机监视器、虚拟机***及其内存处理方法 |
CN101620573A (zh) * | 2009-07-03 | 2010-01-06 | 中国人民解放军国防科学技术大学 | X86体系结构内存管理单元虚拟化方法 |
CN101751284A (zh) * | 2009-12-25 | 2010-06-23 | 北京航空航天大学 | 一种分布式虚拟机监控器的i/o资源调度方法 |
CN102193816A (zh) * | 2010-03-12 | 2011-09-21 | 中国长城计算机深圳股份有限公司 | 一种设备分配方法及*** |
Also Published As
Publication number | Publication date |
---|---|
CN102521054A (zh) | 2012-06-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102521054B (zh) | 一种sun4v架构下的虚拟机DMA资源分配方法 | |
US8392628B2 (en) | Sharing memory spaces for access by hardware and software in a virtual machine environment | |
CN104040518B (zh) | 高效存储器和资源管理 | |
CN102473139B (zh) | 包括用于i/o和计算卸载的多层次地址转换的i/o存储器管理单元 | |
JP5989862B2 (ja) | セキュアなバーチャルマシン間の共有メモリ通信のためのコンピューティング装置、方法及び機械可読記憶媒体 | |
US8407451B2 (en) | Method and apparatus for enabling resource allocation identification at the instruction level in a processor system | |
CN101751284B (zh) | 一种分布式虚拟机监控器的i/o资源调度方法 | |
DE102007062744B4 (de) | Guest-Host-Adressübersetzung für den Zugriff von Geräten auf einen Speicher in einem partitionierten System | |
WO2018041075A1 (zh) | 一种应用于计算机的资源访问方法和计算机 | |
CN101377745B (zh) | 在各个域间实现数据共享的虚拟化计算机***和方法 | |
US8893267B1 (en) | System and method for partitioning resources in a system-on-chip (SoC) | |
CN110442425B (zh) | 一种虚拟化地址空间隔离***及方法 | |
CN104685479A (zh) | 客户虚拟机内的虚拟输入/输出存储器管理单元 | |
CN102779074B (zh) | 基于内存空洞机制的虚拟机内存资源分配方法 | |
CN106445628A (zh) | 一种虚拟化方法、装置和*** | |
CN103984591B (zh) | 计算机虚拟化***的PCI设备INTx中断投递方法 | |
CN107818054A (zh) | 分配连续物理内存空间到设备的方法及*** | |
US10430327B2 (en) | Virtual machine based huge page balloon support | |
US9875132B2 (en) | Input output memory management unit based zero copy virtual machine to virtual machine communication | |
US7389398B2 (en) | Methods and apparatus for data transfer between partitions in a computer system | |
CA2816443A1 (en) | Secure partitioning with shared input/output | |
EP3980885A1 (en) | Guest operating system buffer and log access by an input-output memory management unit | |
US20120110297A1 (en) | Secure partitioning with shared input/output | |
US20220382577A1 (en) | Hardware Virtual Machine for Controlling Access to Physical Memory Space | |
CN117421096B (zh) | 基于jailhouse虚拟机监控器SMMU使用方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |