(二)背景技术
虚拟化是一个广义的术语,在计算机方面通常是指计算和处理在虚拟的基础上而不是真实的基础上运行。计算机虚拟化技术能够抽象计算机的物理资源,隔离硬件与软件。利用虚拟化技术可将机群抽象成具有共享内存特征的虚拟机,支持共享内存编程模式,从而克服机群的不足。
近年来,大规模的计算机协同作业成为提高计算机整体能力的重要方法。大规模的计算机***如机群(cluster),存在着大量的I/O资源,有效的管理和利用这些I/O资源可以提高***的整体性能,减少***I/O资源浪费,同时降低***的运行和维护成本,提高***可用性。
分布式虚拟机监控器(DVMM)是单一***映像的机群***,该***以对称式多处理器(Symmetric Multi-Processors,SMP)为结点,并且对客户***具有完全的透明性,简化虚拟机监控器(VMM)设计,有较低的虚拟化开销。
同时,I/O资源的虚拟化技术也得到了快速发展,各大公司和高校在I/O设备虚拟化方面也展开了合作与竞争,像现在已经商品化的VMware软件、Xen软件和还停留在实验室阶段的Virtual Multiprocessor和vNUMA项目。同时两大处理器厂商Intel和AMD分别制定出硬件支持I/O虚拟化的技术规范,包括英特尔直接I/O虚拟化技术(VT-d)和AMD的I/O内存管理单元(IOMMU)技术。I/O虚拟化技术可以更好的实现大规模的I/O资源管理、分配和调度。I/O虚拟化技术在大规模I/O资源管理、调度上也得到了很大推广。使得企业,高校或研究所可以在不必布置大量物理计算机的情况下更好的利用大规模的计算机网络以从事生产和研究。
VT-d是为虚拟化解决方案提供硬件支持,为I/O设备提供了全新的虚拟化支持,可以帮助最终用户改进***的安全性和可靠性,并提升虚拟环境中I/O设备的性能。
英特尔VT-d通过限制设备对于预先分配的域或物理内存区域进行直接内存访问(DMA)来进行保护。这是通过一种称为DMA重映射的硬件能力来实现的。芯片组中的VT-d DMA重映射硬件逻辑位于支持DMA的外设I/O设备和计算机的物理内存之间,其编程由计算机***软件完成。在虚拟化环境中,***软件即为VMM。在没有虚拟化软件的本地环境中,***软件就是本地操作***。DMA重映射可将接收的DMA请求的地址转换为相应的物理内存地址,并根据***软件提供的信息对访问此物理地址的许可进行检查。
目前,I/O虚拟化技术目前是通过两个方向来帮助服务器更加合理地分配资源:一个方向是“分”,即把一个物理的I/O设备虚拟成若干个独立的逻辑I/O设备,可以让多个客户操作***同步使用这些逻辑I/O设备;另一个方向是“合”,就是把若干个分散的物理I/O设备虚拟到一个全局的I/O空间中,让客户操作***看起来所有虚拟的逻辑I/O设备在同一条***总线上。商用软件VMware和开源项目Xen主要集中于“分”的方向,东京大学的Virtual Multiprocessor软件和新南威尔士大学的vNUMA项目主要集中于“合”的方向。
VMware和Xen分别采用全虚拟化(Full-Virtualization)和半虚拟化(Para-Virtualization)技术。全虚拟化是在虚拟层中采用软件完全模拟物理I/O设备,但对每条特权指令的执行都会引起用户模式和特权模式的切换,导致I/O访问效率低下。半虚拟化技术通过修改客户操作***(Guest Operation System,简称GOS)源代码,用超级调用(Hypercall)来代替特权指令,让尽可能多的指令直接运行在处理器上。这种方式虽然提高了I/O访问的效率,但却需要对Guest操作***代码进行大范围修改。VMware和Xen均是虚拟单个物理I/O设备成多个逻辑I/O设备,与本发明的方向不同,但其为客户操作***提供虚拟I/O设备信息的方式可以借鉴。
Virtual Multiprocessor是基于IA-32机群的分布式VMM,采用了半虚拟化的技术,通过对客户操作***的修改使其与Virtual Multiprocessor协作完成任务。VirtualMultiprocessor运行于用户态,客户操作***的I/O设备均以文件的形式存放在宿主操作***中。若要对物理I/O设备进行访问,则需要执行宿主操作***的***调用,因而效率低下。整个项目仍处于实验阶段。
vNUMA是基于IA-64机群的分布式VMM,其直接运行于硬件层之上。客户操作***(Linux)通过半虚拟化的方式与vNUMA协作。vNUMA的主要目标在于提供透明的分布式共享存储用于科学计算。vNUMA只能对启动节点进行I/O操作,大大限制了其对大量I/O资源的利用率,使得整个***I/O能力低下。目前仍处于实验室阶段。
综上所述,Virtual Multiprocessor、vNUMA和本发明在软件上面向“合”的方向,在物理真实硬件资源调度上采用“分”的方法。通过分析Virtual Multiprocessor和vNUMA的跨节点I/O访问的实现机制及其优缺点,同时结合开源的Xen软件中虚拟I/O设备呈现以及访问的相关技术,引入VT-d技术,实现分布式I/O资源的全局化调度和管理。
(三)发明内容
本发明的目的在于提供一种分布式虚拟机监视器的I/O资源调度方法,它主要采用最新的硬件和软件相结合的虚拟化技术,结合分布式共享存储算法,呈现单一共享的物理地址空间,实现分布式虚拟机监控器在单一***映像下对设备的直接访问,提高I/O资源利用效率。
本发明一种分布式虚拟机监视器的I/O资源调度方法,基于单一***映像的机群***,该***以对称式多处理器(Symmetric Multi-Processors,简称SMP)为结点,向客户***提供完全的单一***映像(Single System Image,简称SSI)特征,并且对客户***具有完全的透明性,简化VMM设计,使支持SMP结构的商业化的操作***无需修改即可运行在该虚拟机中,有较低的虚拟化开销,这样的机群***是一种DVMM。
I/O资源调度模型属于DVMM中的I/O虚拟化模块。I/O虚拟化模块通过I/O虚拟化技术,实现分布式I/O资源的整合,为客户操作***提供全局的虚拟I/O环境。同时客户操作***不需要做任何修改。
***的实现用到了DVMM其他模块的辅助,包括分布式共享内存(DSM)技术、DVMM的通信模块和英特尔x86平台上的虚拟化技术(VT-x)。DSM是DVMM的内存虚拟化模块实现的技术,通信模块是建立在裸机之上的跨物理节点的通信机制,VT-x技术是指令处理模块中的指令集虚拟化所应用的技术,具体请见Intel技术手册。
图1表示的是DVMM的I/O资源调度方法模型整体结构示意图。
图中以两个节点为例,左侧或者右侧选择其一为虚拟机的主节点,另一个为虚拟机的从节点。DVMM底层为通过高速互联网络相连的物理节点。Xen的层次由以下几个模块构成:DSM和底层通信模块;特权域(Domain 0)的节点内I/O请求处理、跨节点I/O请求处理和设备模拟是***实现的模块和资源调度模块。资源调度模块包括,资源探测、全局I/O位图、指令处理和中断虚拟化四个模块,其中,资源探测模块负责整合各个节点的硬件物理资源;全局I/O位图建立起客户物理地址到机器地址的映射;指令处理模块处理DVMM截获的I/O指令;中断虚拟化模块处理分布式环境下的硬件中断;DVMM对I/O资源的调度通过资源探测模块感知,客户CPU发出的I/O指令或接收到的底层物理中断通过I/O位图保证地址访问的安全性。
图2描述了I/O资源探测模块:
该模块负责探测各个节点的物理资源。提供DVMM使用的资源包括:处理器,内存,存储介质,核心设备(用于指令模拟),外部设备,总线,中断等,其中将外部设备,总线,中断统称为I/O资源。通过***启动和初始化,整合所有节点的I/O资源,为客户操作***的启动准备扩展基本输入输出***(eBIOS),通过启动信息页面,共享信息页和全局I/O位图为客户操作***提供正常启动时的所有准备工作。
图3详细描述了I/O指令的处理过程。
最底层为硬件层,表示真实的物理硬件资源;其上为DVMM层,这一层部署分布式虚拟机监控器;再上面为可见资源层,这是一个虚拟的层次,这里呈现出GOS可以看到的I/O资源,包括I/O端口和I/O内存等;最上面为GOS层,运行客户操作***和应用程序。
其中,全局物理地址到机器地址映射表(P2M表)记录了虚拟***物理地址到机器地址的映射信息;全局I/O位图记录了所有节点机机器I/O设备端口地址(宿主节点)到虚拟机虚拟I/O设备端口地址的对应关系,采用固定映射模式;输入输出请求结构(IOREQ)发送和接收模块主要用于I/O虚拟化模块通过通信模块接受和发送;端口更新模块记录从以上各模块搜索得到的虚拟机I/O端口地址到节点机机器I/O端口地址的直接关系。
DVMM中的I/O设备管理在软件模拟情况下借鉴了模拟软件QEMU对设备模拟的的方法,在直接访问情况下需要自己注册虚拟总线,将真实设备挂载到这条总线上,完成根复合体对总线事务(如PCI事务)的接管。另外,也负责VMM最基本的I/O管理,如各个节点I/O设备的初始化、I/O设备的注册和卸载、I/O设备的调度、I/O设备向I/O内存的映射,这些均是最基本的I/O管理,主要参考DVMM其他模块对I/O的需求,DVMM正常运行所需要最基本的I/O功能等;
图4描述了中断虚拟化的处理过程。
中断虚拟化模块可以响应物理设备和虚拟设备产生的中断。VT-d支持中断重映射的平台上支持实现中断虚拟化,这里的虚拟化是指客户操作***不直接处理总线事务,而是处理经消息信号中断由真实物理硬件传递给GOS虚拟CPU使用的中断,客户中断处理函数看到是虚拟总线上的中断源,实际上处理的是真实物理中断。
跨处理器中断是由虚拟处理器向虚拟本地高级可编程中断控制器(Local APIC)的处理器间中断寄存器(ICR)写数据引发的,该操作会产生缺页从而被DVMM捕获。DVMM通过解析操作数,定位其访问的寄存器。
综上所述,本发明是一种分布式虚拟机监控器的I/O资源调度方法,此方法具体实现步骤如下:
步骤一、探测物理资源阶段:
1).DVMM原型***启动,从各节点基本输入输出***(BIOS)加电自检开始,到节点间数据包准备传输为止。
2)建立通信基础设施,建立协议栈,为分布于不同物理机器上的VMM提供通信服务,为实现DVMM的跨物理机I/O访问、跨物理机中断处理等功能提供通信支持。
3)读取BIOS构建的资源信息表,预留部分资源,主要是内存资源,用于存储各类控制信息,读取ACPI表,解析DMAR和DHRD结构,设置各节点DSS。完成VT-d硬件环境初始化。
4).将本结点可供操作***(OS)使用的资源信息告知其他结点,收集其他结点的资源信息;
5).收集到全局资源信息后,整合各类资源,构建相关的虚拟资源信息表,准备构建全局I/O位图,通过软件模拟设备或借助硬件辅助的重映射结构来处理I/O虚拟化。
6)通信模块设置完毕报告,DVMM初始化设置完毕。
7).加载OS引导模块,开始启动客户操作***(GOS);
8).截获OS发出的BIOS中断调用;
9).将BIOS中断调用的信息传递给资源探测模块,模拟BIOS中断服务,从资源信息表中读取虚拟资源信息;
10).将虚拟硬件配置信息报告给GOS。
步骤二、建立全局虚拟I/O位图:
DVMM中建立全局虚拟的I/O位图,为上层GOS提高单一的物理地址空间。
1)分配I/O位图。对于全局的I/O资源,采用两种分配方案,静态分配和动态分配。静态分配指DVMM启动后,GOS启动前,为GOS分配I/O资源,包括软件模拟的设备资源和硬件直接访问的硬件资源。动态分配指GOS启动以后,由用户态程序指定需要直接访问的I/O资源,与前者的不同点在于内核是以模块方式加载的,需要维护一个引起特权级变换的注入全局虚拟I/O位图的超级调研。
2)二次仲裁机制。I/O内存所指向的地址在完成客户物理到机器地址转换时,需要构建全局的P2M表,保证内存寻址的安全性;节点机本地进行客户物理到机器地址转换时,需要构建单机P2M表来确保VT-d硬件可以安全进行DMA重映射和中断重映射。
步骤三、处理I/O指令
1)当客户操作***在从节点引起虚拟机退出后,I/O虚拟化模块将此I/O指令分成三类分别进行处理:a.非访存类I/O指令。即输入(IN),输出(OUT)这两种访问I/O端口的指令,它们在执行过程中不访问***内存;b.访存类I/O指令。即INS,OUTS这两种字符串IO指令,以及访问内存映射IO(MMIO)区域的指令,它们在执行过程中访问***内存;c.直接内存访问(DMA)指令。DMA控制指令是字符串IO指令,DMA执行时存在大量访存操作。
2)截获I/O指令,查询I/O端口映射表,判定I/O地址落在本地或者是远程节点。
3)指令执行。端口映射后,判断指令执行位置,若在本地,借助VT-d技术,通过单机P2M表进行地址重映射,或者交给QEMU软件模拟执行。若在远程,打包在IOREQ结构中,发送出去,远程节点通过通信模块接收IOREQ。
4)结果返回。由软件执行后的指令,或硬件物理设备状态变化产生的I/O地址变化,需要通知给GOS。DVMM中端口更新模块实施这一功能。
步骤四、中断虚拟化:
1)DVMM底层物理设备发生中断,发给物理I/O APIC,转化为中断向量发给localAPIC
2)local APIC将中断注入到CPU中。
3)CPU跳转到中断描述符表(IDT)表所指的处理函数,Local APIC的中断服务寄存器(ISR)置位,屏蔽中断。
4)执行VMM的中断处理函数,判断是否为直接分配给客户机的物理设备产生的中断。置物理I/O APIC的重定向表条目(RTE)屏蔽位,向物理local APIC写中断结束寄存器(EOI),清除ISR屏蔽。
5)虚拟I/O APIC接收中断,调用虚拟local APIC接口函数,屏蔽中断。
6)判断是否把中断注入到远程CPU中去,发处理器间中断(IPI),这个操作产生缺页,被DVMM捕获,解析操作数后,定位其访问的寄存器。如果是处理器间中断寄存器(ICR),则模拟DVMM中的IPI操作。如果是对LDR或者DFR寄存器的写操作,则在进行本地更新模拟后,调用数据包的发送更新函数发送逻辑目的寄存器(LDR)或者目的格式寄存器(DFR)更新信息到所有其他服务器。
7)远程节点通过虚拟机控制结构(VMCS),虚拟localAPIC将中断注入到GOS,GOS执行中断处理函数。
8)GOS向虚拟local写入EOI,DVMM截获此操作,清除虚拟localAPIC中断屏蔽,通知GOS完成处理,DVMM清除物理I/O APIC RTE中断屏蔽位。
上述内容中的各项代号统一说明如下:
BIOS 基本输入输出*** eBIOS 扩展基本输入输出***
OS 操作*** GOS 客户操作***
ACPI 高级配置与电源接口 DMAR DMA重映射报告
DHRD DMA重映射硬件单元定义 DSS 设备范围结构
VT-d 英特尔直接I/O虚拟化技术 DMA 直接内存访问
P2M 物理地址到机器地址映射 IOREQ I/O请求结构
I/O APIC 高级I/O可编程中断控制器 Local APIC 本地高级可编程中断控制器
VMCS 虚拟机控制结构 ISR 中断服务寄存器
IPI 处理器间中断 ICR 处理器间中断寄存器
EOI 中断结束寄存器 LDR 逻辑目的寄存器
DFR 目的格式寄存器 IDT 中断描述符表
RTE 重定向表条目 VMCS 虚拟机控制结构
本发明的优点及效果:通过结合软件复用模拟的手段与硬件辅助的I/O虚拟化技术,本发明为分布式***提供了完整的I/O资源调度方案,创造性地实现了分布式***中虚拟机对真实物理设备的直接访问,提高了分布式***中的I/O虚拟化的健壮性。随着硬件设备的飞速发展,分布式虚拟机监控器环境下对物理硬件的直接访问将极大提高设备资源的利用效率。使商业化的操作***以及应用软件跨节点地运行于分布式的集群***中,高效、安全访问I/O资源。综上,本发明具有良好的使用价值和广阔的发展前景。
(五)具体实施方式
见图1、图2、图3、图4所示,具体实施步骤如下:
步骤一、探测物理资源阶段:
1).DVMM原型***启动,从各节点基本输入输出***(BIOS)加电自检开始,到节点间数据包准备传输为止。
2)建立通信基础设施,建立协议栈,为分布于不同物理机器上的VMM提供通信服务,为实现DVMM的跨物理机I/O访问、跨物理机中断处理等功能提供通信支持。
3)读取BIOS构建的资源信息表,预留部分资源,主要是内存资源,用于存储各类控制信息,读取ACPI表,解析DMAR和DHRD结构,设置各节点DSS。完成VT-d硬件环境初始化。
4).将本结点可供操作***(OS)使用的资源信息告知其他结点,收集其他结点的资源信息;
5).收集到全局资源信息后,整合各类资源,构建相关的虚拟资源信息表,准备构建全局I/O位图,通过软件模拟设备或借助硬件辅助的重映射结构来处理I/O虚拟化。
6)通信模块设置完毕报告,DVMM初始化设置完毕。
7).加载OS引导模块,开始启动客户操作***(GOS);
8).截获OS发出的BIOS中断调用;
9).将BIOS中断调用的信息传递给资源探测模块,模拟BIOS中断服务,从资源信息表中读取虚拟资源信息;
10).将虚拟硬件配置信息报告给GOS。
步骤二、建立全局虚拟I/O位图:
DVMM中建立全局虚拟的I/O位图,为上层GOS提高单一的物理地址空间。
1)分配I/O位图。对于全局的I/O资源,采用两种分配方案,静态分配和动态分配。静态分配指DVMM启动后,GOS启动前,为GOS分配I/O资源,包括软件模拟的设备资源和硬件直接访问的硬件资源。动态分配指GOS启动以后,由用户态程序指定需要直接访问的I/O资源,与前者的不同点在于内核是以模块方式加载的,需要维护一个引起特权级变换的注入全局虚拟I/O位图的超级调研。
2)二次仲裁机制。I/O内存所指向的地址在完成客户物理到机器地址转换时,需要构建全局的P2M表,保证内存寻址的安全性;节点机本地进行客户物理到机器地址转换时,需要构建单机P2M表来确保VT-d硬件可以安全进行DMA重映射和中断重映射。
步骤三、处理I/O指令
1)当客户操作***在从节点引起虚拟机退出后,I/O虚拟化模块将此I/O指令分成三类分别进行处理:a.非访存类I/O指令。即输入(IN),输出(OUT)这两种访问I/O端口的指令,它们在执行过程中不访问***内存;b.访存类I/O指令。即INS,OUTS这两种字符串IO指令,以及访问内存映射IO(MMIO)区域的指令,它们在执行过程中访问***内存;c.直接内存访问(DMA)指令。DMA控制指令是字符串IO指令,DMA执行时存在大量访存操作。
2)截获I/O指令,查询I/O端口映射表,判定I/O地址落在本地或者是远程节点。
3)指令执行。端口映射后,判断指令执行位置,若在本地,借助VT-d技术,通过单机P2M表进行地址重映射,或者交给QEMU软件模拟执行。若在远程,打包在IOREQ结构中,发送出去,远程节点通过通信模块接收IOREQ。
4)结果返回。由软件执行后的指令,或硬件物理设备状态变化产生的I/O地址变化,需要通知给GOS。DVMM中端口更新模块实施这一功能。
步骤四、中断虚拟化:
1)DVMM底层物理设备发生中断,发给物理I/O APIC,转化为中断向量发给localAPIC
2)local APIC将中断注入到CPU中。
3)CPU跳转到中断描述符表(IDT)表所指的处理函数,Local APIC的中断服务寄存器(ISR)置位,屏蔽中断。
4)执行VMM的中断处理函数,判断是否为直接分配给客户机的物理设备产生的中断。置物理I/O APIC的重定向表条目(RTE)屏蔽位,向物理local APIC写中断结束寄存器(EOI),清除ISR屏蔽。
5)虚拟I/O APIC接收中断,调用虚拟local APIC接口函数,屏蔽中断。
6)判断是否把中断注入到远程CPU中去,发处理器间中断(IPI),这个操作产生缺页,被DVMM捕获,解析操作数后,定位其访问的寄存器。如果是处理器间中断寄存器(ICR),则模拟DVMM中的IPI操作。如果是对LDR或者DFR寄存器的写操作,则在进行本地更新模拟后,调用数据包的发送更新函数发送逻辑目的寄存器(LDR)或者目的格式寄存器(DFR)更新信息到所有其他服务器。
7)远程节点通过虚拟机控制结构(VMCS),虚拟local APIC将中断注入到GOS,GOS执行中断处理函数。
8)GOS向虚拟local写入EOI,DVMM截获此操作,清除虚拟local APIC中断屏蔽,通知GOS完成处理,DVMM清除物理I/OAPIC RTE中断屏蔽位。