CN103984591A - 计算机虚拟化***的PCI设备INTx中断投递方法 - Google Patents
计算机虚拟化***的PCI设备INTx中断投递方法 Download PDFInfo
- Publication number
- CN103984591A CN103984591A CN201410205359.2A CN201410205359A CN103984591A CN 103984591 A CN103984591 A CN 103984591A CN 201410205359 A CN201410205359 A CN 201410205359A CN 103984591 A CN103984591 A CN 103984591A
- Authority
- CN
- China
- Prior art keywords
- virtual machine
- interrupt
- equipment
- interruption
- monitor
- 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.)
- Granted
Links
Landscapes
- Bus Control (AREA)
Abstract
本发明公开了一种计算机虚拟化***的PCI设备INTx中断投递方法,实施步骤如下:生成内部设备中断信息记录,对每一个设备初始化数据变量记录;虚拟机启动后根据所述内部设备中断信息记录获取具有直接访问权限的设备,针对设备注册中断号以及中断号处理例程,并向虚拟机监控器请求填写本虚拟机具有直接访问权限的设备的中断使能和中断目标;虚拟机监控器接收设备的当前INTx中断请求,将当前INTx中断请求投递给设备匹配数据变量记录的中断目标虚拟机。本发明具有支持虚拟机直接IO技术,不对除目标虚拟机外的其它虚拟机产生副作用,安全性和隔离性好、中断性能高、应用兼容性好、开销小、不需要额外的硬件机制支持的优点。
Description
技术领域
本发明涉及计算机虚拟化技术中设备中断投递机制和管理方法,具体涉及一种计算机虚拟化***的PCI设备INTx中断投递方法。
背景技术
虚拟化技术已经在计算机领域获得了广泛应用,目前的虚拟化技术可以分为两大类,一类是对单物理机器上的冗余资源通过分区或复用等方式建立多个虚拟机环境,另一类是将多个物理机资源进行整合以建立能力更为强大的统一计算机环境。本发明所述技术内容以及涉及的“虚拟化技术”等名词一般是面向单一物理计算机***上的虚拟化。
虚拟化技术给计算机***引入了一个新的软件层次(也称为特权级或运行态),传统的计算机***软件一般由操作***和用户软件组成,虚拟化的计算机中在操作***下加入了虚拟机监控器(Virtual Machine Monitor,VMM)层,完成对资源隔离管理等工作。从计算机资源组成的角度出发,虚拟化技术构成可以分为三个方面:CPU资源虚拟化、内存资源虚拟化、IO(Input-Output)资源虚拟化。三种技术就是将对应的资源在VMM的管理下以某种隔离方式分配到不同的虚拟机(Virtual Machine,VM)环境中,使虚拟机中的***软件认为它们拥有自己的相应私有资源。经过多年发展,虚拟化技术已经渗透到软硬件多个领域,在硬件技术上以Intel的VT、Oracle的sun4v、IBM PowerVM为代表,软件上有VMware ESX server、XEN、KVM、sun4v hypervisor等许多软件栈支持。
虚拟化技术实现方面,CPU和内存资源的虚拟化相对简单。对于CPU,VMM可以进行时间片分割或在CPU数量足够时将CPU直接分配到各虚拟机;对于内存,VMM可以使用分页、分段等内存映射技术隔离分配给虚拟机使用。IO资源的虚拟化有其相对特殊性。首先,IO设备数量一般有限,不易做到分时或分段由虚拟机共享使用。第二,IO设备对***来说是不确定的,因为允许总线上热拔插事件和故障隐退。第三,标准PCI总线上设备的管理具有较强关联性,必须一次扫描完成其上所有设备的初始化,VMM难以将不同的设备直接分配到各虚拟机,更难以对设备进行分时分配。第四,IO设备种类繁多,驱动程序的可靠性差,一般交由虚拟机操作***直接驱动。基于上述原因,VMM多采用模拟共享的方式或前后端服务方式实现IO虚拟化。也就是说,VMM以PCI总线域(或者HOST主桥)的粒度将IO设备分配到某个虚拟机,由该虚拟机对主桥下总线上挂接的各种设备进行驱动管理,再提供服务给其它虚拟机提供虚构的IO设备。计算机上PCI总线域数量有限,一般只有一个,通常的虚拟化技术是把所有IO设备交给一个特殊的虚拟机管理,这个虚拟机称为控制域或者Domain0,其它虚拟机通过虚拟信道(或模拟方式)使用控制域提供的服务完成自己的IO,这些虚拟机称为客户域或者DomainU。
参见图1所示的不同虚拟机对于磁盘设备的访问原理图可知,控制域可以对文件***(FS)进行直接读写并访问本地磁盘驱动程序。客户域中没有真实的IO设备,但是拥有虚拟磁盘,这是虚拟磁盘客户端驱动程序vdc提供的。客户域的文件***操作命令被vdc转换为通信协议通过域间信道LDC发送到控制域的服务程序vds,vds访问本地文件***或磁盘驱动完成访问请求后,再将返回结果转换为协议通过域间信道发送给客户域的vdc驱动,客户域的读写请求最终完成。从图1可以看出,虚拟IO服务对设备管理的方式较为简单,设备空间访问、DMA管理、以及中断管理等都可以充分利用传统操作***的能力完成,不需要额外的机制和代码。然而这种虚拟IO的方式不但增加IO请求的处理路径,显著降低IO性能,而且会将控制域变为IO瓶颈。
为解决上述问题,人们提出了虚拟机直接IO思想,也就是将设备地址空间访问、DMA管理和中断管理的权限都开放给客户域,由客户域独占并直接操作设备。
计算机IO器件大多是用各种总线同CPU相连接的。其中PCI/PCIX/PCIE作为一种通用总线,PCI技术广泛应用在x86、SPARC、POWER、MIPS等各种指令集的计算机中,是目前使用最广泛的一种总线接口标准。PCI是***设备互连(Peripheral Component Interconnect)的简称,由英特尔(Intel)公司1991年推出的用于定义局部总线的32位总线标准,PCI-SIG组织接替Intel负责PCI规范的发展。PCIX是由康柏、惠普、IBM三家厂商于1990年代末推出的64位PCI扩展,并由PCI-SIG于2000年发布了PCI-X1.0标准。PCIE是2001年由Intel提出的用来替代PCI总线和各种不同内部芯片连接的第三代I/O总线技术,Intel称之为"3GIO",由于2002年7月推出PCI-express1.0标准,目前已发展到3.0标准。
尽管PCIX和PCIE总线标准在硬件技术上发生了大幅度飞跃,但在软件层能同PCI保持兼容性,本文档中后续的PCI总线是对PCI/PCIX/PCIE等PCI系列总线的通称。PCI系列总线都保持了对INTx型中断的软件支持,尽管PCIE标准鼓励使用更为强大的MSI中断机制,但由于各种历史遗留因素,INTx中断仍然在多种设备极其驱动支持软件中保留沿用。
INTx中断是指由PCI总线使用INTA#、INTB#、INTC#和INTD#信号向处理器发出中断请求。这些中断请求信号为低电平有效,并与处理器的中断控制器连接。在PCI体系结构中,这些中断信号属于边带信号(Sideband Signals),被总线上的所有设备控制器共享。由于INTx仅能提供电平信号高低量两种不同信息,因此软件无法凭借中断信息获得额外的诸如中断源、中断目标等信息,这给实现虚拟机直接IO造成了困难。如图2所示,常规的操作***中对INTx中断的注册和处理流程如下:中断初始化阶段,注册中断号IRQ;注册中断服务IRQ_HANDLE;使能设备中断;中断处理阶段,操作***通过IRQ调用对应的IRQ_HANDLE,如果INTX中断共享IRQ,则操作***依次调用注册到同一IRQ上的所有IRQ_HANDLE,直到中断被处理。
为了支持虚拟机直接IO技术,多种硬件虚拟化支持机制被引入硬件设计中,如Intel VT-d、sun4v PIU设计。这些设计分别在IO空间访问、IO DMA重映射、中断重映射等方面给出了虚拟机直接操作的解决方案,但都只提出了对MSI中断机制的重映射支持,回避了INTx的重映射问题。在软件支持的研究中,也仅仅提出了将INTx中断同时发送到每个虚拟机的办法,由虚拟机操作***判断是否是自己的中断。如图3所示,现有技术的计算机虚拟化***的INTx中断处理时,只能通过特权域(Dom0)直接负责INTx中断处理:中断初始化阶段,Dom0设备注册中断号IRQ;Dom0设备注册中断服务IRQ_HANDLE;Dom0设备使能设备中断;直接转发阶段:VMM收到中断,如果是INTx,一律转发给dom0;中断处理阶段:Dom0操作***调用对应的IRQ_HANDLE。但是,这种方式由于只能够通过特权域(Dom0)直接负责INTx中断处理,不能够实现虚拟机直接访问IO设备,不但会引发无效中断问题,还可能被恶意虚拟机利用引发“中断风暴”,造成***性能严重下降。
综上所述,在虚拟化技术中,虚拟机直接访问IO设备是提高***性能的有效手段,其中涉及到的关键技术包括虚拟机对IO设备地址空间、中断和DMA的直接访问和管理。多数计算机中会使用PCI系列总线连接IO设备,某些IO设备需要INTx中断的支持,但INTx中断被IO设备共享,无法凭借中断信息判断中断源设备和中断目标。因而,硬件或者虚拟机监控器如果将INTx中断区分并发送给目标虚拟机,已经成为一项亟待解决的关键技术问题。
发明内容
本发明要解决的技术问题是提供一种支持虚拟机直接IO技术,不对除目标虚拟机外的其它虚拟机产生副作用,安全性和隔离性好、中断性能高、应用兼容性好、开销小、不需要额外的硬件机制支持的计算机虚拟化***的PCI设备INTx中断投递方法。
为了解决上述技术问题,本发明采用的技术方案为:
一种计算机虚拟化***的PCI设备INTx中断投递方法,其实施步骤如下:
1)为虚拟机监控器生成用于指定具有各个设备对应直接访问权限的虚拟机信息的内部设备中断信息记录,并针对每一个设备初始化一个用于存储设备中断使能值、中断目标虚拟机和中断请求信息的数据变量记录;
2)虚拟机启动后根据所述内部设备中断信息记录获取本虚拟机具有直接访问权限的设备,针对所述设备向操作***注册中断号以及中断号处理例程,使能所述设备的设备中断并向虚拟机监控器请求填写本虚拟机具有直接访问权限的各个设备的中断使能和中断目标;所述虚拟机监控器根据各个虚拟机的请求填写各个设备的中断使能值和中断目标虚拟机;
3)虚拟机监控器接收设备的当前INTx中断请求,如果发起当前INTx中断请求的设备对应数据变量记录的中断使能值为使能,则将当前INTx中断请求投递给设备对应数据变量记录中记录的中断目标虚拟机,通过中断目标虚拟机来直接处理当前INTx中断请求。
进一步地,所述步骤1)的详细步骤如下:
1.1)对PCIE控制单元所连的PCIE总线进行标准PCI软件扫描配置,获取各个设备的设备名称、总线号、中断状态寄存器地址;
1.2)虚拟机监控器根据所述各个设备的设备名称、总线号、中断状态寄存器地址生成各个设备的内部设备中断信息记录,并将所述内部设备中断信息记录写入虚拟机监控器的配置文件中;所述内部设备中断信息记录包括中断信息结点名称、具有设备直接访问权限的虚拟机、设备名称、总线号、设备号、中断寄存器地址、中断寄存器特征值;
1.3)虚拟机监控器针对每一个设备初始化一个用于存储设备中断使能值、中断目标虚拟机和中断请求信息的数据变量记录,所述数据变量记录为以总线号和设备号作为索引的数据结构体,所述数据结构体的信息字段包括设备中断使能值、中断目标虚拟机和中断请求信息,其实所述中断请求信息包括中断寄存器地址和中断寄存器特征值,其中中断使能值默认为非使能,中断目标虚拟机默认为空;
1.4)虚拟机监控器构建并提供用于为数据结构体的中断使能值、中断目标虚拟机进行填充赋值操作的填充调用接口。
进一步地,所述步骤2)的详细步骤如下:
2.1)虚拟机启动后根据虚拟机监控器提供的所述内部设备中断信息记录获取本虚拟机具有直接访问权限的设备;
2.2)虚拟机针对本虚拟机具有直接访问权限的所有设备,分别向操作***注册中断号以及中断号处理例程;
2.3)虚拟机启动本虚拟机具有直接访问权限的每一个设备的中断触发功能,并调用所述虚拟机监控器提供的填充调用接口,修改本虚拟机具有直接访问权限的每一个设备对应数据结构体,分别将数据结构体的设备中断使能值填充赋值为使能,将中断目标虚拟机填充赋值为本虚拟机;所述虚拟机监控器根据各个虚拟机的填充调用接口调用请求填写各个设备的中断使能值和中断目标虚拟机。
进一步地,所述步骤3)的详细步骤如下:
3.1)虚拟机监控器接收设备的当前INTx中断请求,首先检测INTx中断请求的中断号是否在指定的中断号区间内,如果不是则将当前INTx中断请求按虚拟机监控器中指定的中断服务流程处理并退出;否则,跳转执行下一步;
3.2)虚拟机监控器遍历所有设备对应的数据结构体,如果找到与当前INTx中断请求的中断请求信息相匹配的数据结构体,则对数据结构体的信息字段进行判断,如果同时满足否使能值为使能、中断请求信息的中断寄存器地址非空和中断请求信息的中断寄存器特征值同时非空两个条件,则将当前INTx中断请求转发给匹配的数据结构体中记录的中断目标虚拟机,通过所述中断目标虚拟机来处理当前INTx中断请求。
本发明计算机虚拟化***的PCI设备INTx中断投递方法具有下述优点:
1、本发明针对每一个设备初始化一个用于存储设备中断使能值、中断目标虚拟机和中断请求信息的数据变量记录,虚拟机启动后调用所述虚拟机监控器提供的填充调用接口,修改本虚拟机具有直接访问权限的每一个设备对应数据结构体,分别将数据结构体的设备中断使能值填充赋值为使能,将中断目标虚拟机填充赋值为本虚拟机,启动本虚拟机具有直接访问权限的每一个设备的中断触发功能,从而在虚拟机监控器中完成PCI设备到虚拟机之间的直接关联,使得虚拟机监控器能够直接接收设备的当前INTx中断请求并投递给设备对应数据变量记录中记录的中断目标虚拟机,从而能够有效解决计算机虚拟化技术中PCI设备INTx中断直接发送给虚拟机操作***的问题,从而支持虚拟机直接IO技术,不对除目标虚拟机外的其它虚拟机产生副作用,从而能够确保虚拟机之间的安全性和隔离性,能够正确投递完整的中断源和中断目标信息,有效地解决了INTx的重映射问题,能够避免计算机虚拟化***中的“中断风暴”问题,确保计算机虚拟化***的中断性能。
2、本发明基于虚拟机监控器和虚拟机的底层设备驱动程序即可实现,基本不需要对虚拟机中的软件进行修改,具有应用兼容性好的优点。
3、本发明在运行过程中,仅仅涉及设备对应数据变量记录的读取和比较,额外计算为少量的IO寄存器读取和逻辑运算操作,开销很小。
4、本发明利用了PCI总线及控制器件的现有机制,不需要额外的硬件机制支持。
附图说明
图1为现有技术计算机虚拟化***的虚拟IO服务原理示意图。
图2为现有技术常规操作***中INTx中断注册和处理流程示意图。
图3为现有技术计算机虚拟化***的INTx中断处理流程示意图。
图4为本发明实施例的方法流程示意图。
具体实施方式
本实施例计算机虚拟化***的PCI设备INTx中断投递方法在国防科学技术大学自主研发的飞腾1000通用处理器平台上具体实现。飞腾1000处理器采用sparc v9指令集,其内建的处理核、内存控制单元、PCIE控制单元(PIU)都提供了sun4v虚拟化支持机制。软件栈有虚拟机监控器(VMM)hypervisor、虚拟机中运行的操作***为麒麟linux操作***。计算机虚拟化***的基本应用环境如下:计算机硬件平台被虚拟机监控器(VMM)虚拟为多个虚拟域(domain),每个虚拟域是一台逻辑计算机,运行独立的麒麟linux操作***;多个虚拟域中可以包含特权域(domain0),也可以全是客户域(domainU)。
如图4所示,本实施例计算机虚拟化***的PCI设备INTx中断投递方法的步骤如下:
1)为虚拟机监控器VMM生成用于指定具有各个设备对应直接访问权限的虚拟机信息的内部设备中断信息记录,并针对每一个设备初始化一个用于存储设备中断使能值、中断目标虚拟机和中断请求信息的数据变量记录;
2)虚拟机domU启动后根据内部设备中断信息记录获取本虚拟机domU具有直接访问权限的设备,针对设备向操作***注册中断号IRQ以及中断号处理例程IRQ_HANDLE,使能所述设备的设备中断并向虚拟机监控器VMM请求填写本虚拟机具有直接访问权限的各个设备的中断使能和中断目标;虚拟机监控器VMM根据各个虚拟机的请求填写各个设备的中断使能值和中断目标虚拟机;
3)虚拟机监控器VMM接收设备的当前INTx中断请求,如果发起当前INTx中断请求的设备对应数据变量记录的中断使能值为使能,则将当前INTx中断请求投递给设备对应数据变量记录中记录的中断目标虚拟机DomU,通过中断目标虚拟机DomU调用中断号处理例程IRQ_HANDLE来直接处理当前INTx中断请求。
本实施例针对每一个设备初始化一个用于存储设备中断使能值、中断目标虚拟机和中断请求信息的数据变量记录,虚拟机启动后调用所述虚拟机监控器提供的填充调用接口,修改本虚拟机具有直接访问权限的每一个设备对应数据结构体,分别将数据结构体的设备中断使能值填充赋值为使能,将中断目标虚拟机填充赋值为本虚拟机,启动本虚拟机具有直接访问权限的每一个设备的中断触发功能,从而在虚拟机监控器中完成PCI设备到虚拟机之间的直接关联,使得虚拟机监控器能够直接接收设备的当前INTx中断请求并投递给设备对应数据变量记录中记录的中断目标虚拟机,从而能够有效解决计算机虚拟化技术中PCI设备INTx中断直接发送给虚拟机操作***的问题,从而支持虚拟机直接IO技术,不对除目标虚拟机外的其它虚拟机产生副作用,从而能够确保虚拟机之间的安全性和隔离性,能够正确投递完整的中断源和中断目标信息,有效地解决了INTx的重映射问题,能够避免计算机虚拟化***中的“中断风暴”问题,确保计算机虚拟化***的中断性能,具有支持虚拟机直接IO技术,不对除目标虚拟机外的其它虚拟机产生副作用,安全性和隔离性好、中断性能高、应用兼容性好、开销小、不需要额外的硬件机制支持优点。
本实施例中,步骤1)的详细步骤如下:
1.1)对PCIE控制单元所连的PCIE总线进行标准PCI软件扫描配置,获取各个设备的设备名称、总线号、中断状态寄存器地址;本实施例以两个虚拟机DOM0、DOM1为例,DOM0需要直接访问PCIE磁盘控制器sata0,DOM1需要直接访问PCIE磁盘控制器sata1。本实施例的计算机***加电后,hypervisor自固件中首先运行,建立DOM0和DOM1环境后,在各虚拟机中分别加载操作***。Hypervisor在poweronreset初始化时对PIU(PCIE控制单元)所连的PCIE总线进行标准PCI软件扫描配置过程,为总线上的各控制器分配busnum、devnum、中断状态寄存器地址等总线资源,并在固件人机交互界面中输出给用户,从而得到各个设备的设备名称(devnum)、总线号(busnum)、中断状态寄存器地址。需要说明的是,既可以通过虚拟机监控器VMM对PCIE控制单元所连的PCIE总线进行标准PCI软件扫描配置获取各个设备的设备名称、总线号、中断状态寄存器地址,此外也可以通过控制域(domain0)对PCIE控制单元所连的PCIE总线进行标准PCI软件扫描配置获取各个设备的设备名称、总线号、中断状态寄存器地址再传递给虚拟机监控器VMM。
1.2)虚拟机监控器VMM根据各个设备的设备名称、总线号、中断状态寄存器地址生成各个设备的内部设备中断信息记录,并将内部设备中断信息记录写入虚拟机监控器VMMhypervisor的配置文件MD中;内部设备中断信息记录包括中断信息结点名称、具有设备直接访问权限的虚拟机、设备名称、总线号、设备号、中断寄存器地址、中断寄存器特征值。
本实施例中,sata0的内部设备中断信息记录为:
根据上述表达式可知,sata0的总线号(bus#)为0x5,设备号(dev#)为0x1,中断状态寄存器地址(intr-status-address)为“0x00,0x00,0x00,0xca,0x00,0xb0,0x00,0x44”,中断寄存器特征值(Int-mask-value)为“0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff”。
本实施例中,sata1的内部设备中断信息记录为:
根据上述表达式可知,sata1的总线号(bus#)为0x7,设备号(dev#)为0x2,中断状态寄存器地址(intr-status-address)为“0x00,0x00,0x00,0xca,0x01,0x10,0x00,0x44”,中断寄存器特征值(Int-mask-value)为“0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff”。
本实施例中,sata0和sata1内部设备中断信息记录均已结点Node的形式存储在虚拟机监控器VMM中,且结点中的“back”指定了直接访问控制该设备的虚拟机,例如针对结点dev-intx-info node_sata1而言,其中的“back->DOM1”则代表将sata1的中断目标虚拟机指定为DOM1,依次类推。如需将PCI总线上的某个特定设备DEV_n交由某个客户域DOM_m直接访问控制,其它客户域不感知DEV_n的存在、DEV_n所触发的INTx中断可以直接传送给DOM_m,其它客户域和domain0(如果存在)不会收到由DEV_n所触发的INTx中断,且在内部设备中断信息记录进行预先定义即可。
1.3)虚拟机监控器VMM针对每一个设备初始化一个用于存储设备中断使能值、中断目标虚拟机和中断请求信息的数据变量记录,数据变量记录为以总线号和设备号作为索引的数据结构体DEV_INTX_INFO[busnum][devnum],数据结构体的信息字段包括设备中断使能值、中断目标虚拟机和中断请求信息,其实中断请求信息包括中断寄存器地址和中断寄存器特征值,其中中断使能值默认为非使能,中断目标虚拟机默认为空。本实施例虚拟机监控器VMM在读入MD配置信息后,针对每一个设备初始化一个用于存储设备中断使能值、中断目标虚拟机和中断请求信息的数据变量记录,数据变量记录为以总线号和设备号作为索引的数据结构体。此外,数据变量记录还可以采用与具体设备中断机制设计相匹配的其它数据结构设计。
本实施例中,数据结构体DEV_INTX_INFO[busnum][devnum]的定义如下:
其中,valid表示设备中断使能值、targetdom表示中断目标虚拟机,intxstatus_reg表示中断寄存器地址,intx_incoming_figure表示中断寄存器特征值,busnum表示总线号,devnum表示设备号。根据数据结构体DEV_INTX_INFO[busnum][devnum]的定义,本实施例对应sata0初始化生成的数据结构体为:DEV_INTX_INFO[5][1]={0,NULL,0xca00b00044,0xff}。对应sata1初始化生成的数据结构体为:DEV_INTX_INFO[7][2]={0,NULL,0xca01100044,0xff}。其中,第一个信息字段(中断使能值)使能表示为“1”,非使能表示为“0”,第二个信息字段(中断目标虚拟机)默认为空(NULL),第三个信息字段中断寄存器地址取值与内部设备中断信息记录中中断寄存器地址的低10位,第四个信息字段中断寄存器特征值则取内部设备中断信息记录中中断寄存器特征值的最后两位(即0xff)。
1.4)虚拟机监控器VMM构建并提供用于为数据结构体的中断使能值、中断目标虚拟机进行填充赋值操作的填充调用接口。本实施例中,在虚拟机监控器VMMhypervisor中修改了hypercall接口piu_intr_setvalid,作为填充调用接口提供给虚拟机操作***中的驱动程序调用。以DOM0为例,sata0的驱动程序调用hypercall接口piu_intr_setvalid,则会将sata0初始化生成的数据结构体的中断使能值(DEV_INTX_INFO[5][1].valid)的值置为1。同时,本实施例中,还在hypervisor中修改了hypercall接口piu_int_settarget,提供给虚拟机操作***中驱动程序调用。以DOM0为例,sata0的驱动程序调用hypercall接口piu_int_settarget,则会将sata0初始化生成的数据结构体的中断目标虚拟机(DEV_INTX_INFO[5][1].Targetdom)的值置为dom0。
本实施例中,步骤2)的详细步骤如下:
2.1)虚拟机启动后根据虚拟机监控器VMM提供的内部设备中断信息记录获取本虚拟机具有直接访问权限的设备;本实施例中,DOM0根据虚拟机监控器VMM提供的内部设备中断信息记录dev-intx-info node_sata0,获取本虚拟机具有直接访问权限的设备sata0;DOM1根据虚拟机监控器VMM提供的内部设备中断信息记录dev-intx-info node_sata1,获取本虚拟机具有直接访问权限的设备sata1。
2.2)虚拟机针对本虚拟机具有直接访问权限的所有设备,分别向操作***注册中断号以及中断号处理例程;针对虚拟机DOM0而言,sata0驱动程序向dom0操作***请求(虚拟)中断号virq_sata0,注册中断服务例程irq_handle_sata0。针对虚拟机DOM1而言,sata1驱动程序向dom1操作***请求(虚拟)中断号virq_sata1,注册中断服务例程irq_handle_sata1。
2.3)虚拟机启动本虚拟机具有直接访问权限的每一个设备的中断触发功能,并调用虚拟机监控器VMM提供的填充调用接口,修改本虚拟机具有直接访问权限的每一个设备对应数据结构体,分别将数据结构体的设备中断使能值填充赋值为使能,将中断目标虚拟机填充赋值为本虚拟机;虚拟机监控器VMM根据各个虚拟机的填充调用接口调用请求填写各个设备的中断使能值和中断目标虚拟机。针对虚拟机DOM0而言,正如前文所述,sata0的驱动程序调用hypercall接口piu_intr_setvalid,则会将sata0初始化生成的数据结构体的中断使能值(DEV_INTX_INFO[5][1].valid)的值置为1,sata0驱动程序调用piu_intr_settarget置DEV_INTX_INFO[5][1].targetdom的值置为dom0,sata0驱动程序sata0设备的中断触发功能。同理,针对虚拟机DOM1而言,sata1的驱动程序调用hypercall接口piu_intr_setvalid,则会将sata1初始化生成的数据结构体的中断使能值(DEV_INTX_INFO[7][2].valid)的值置为1,sata1驱动程序调用piu_intr_settarget置DEV_INTX_INFO[7][2].targetdom的值置为dom1,sata1驱动程序sata1设备的中断触发功能。
本实施例中,步骤3)的详细步骤如下:
3.1)虚拟机监控器VMM接收设备的当前INTx中断请求,首先检测INTx中断请求的中断号是否在指定的中断号区间内,如果不是则将当前INTx中断请求按虚拟机监控器VMM中指定的中断服务流程处理并退出;否则,跳转执行步骤3.2)。
由于飞腾CPU的INTx中断号分别为INTA=20、INTB=21、INTC=22、INTD=23,因此本实施例中指定的中断号区间为20~23之间。hypervisor的中断服务例程(vmm_int_handle)在被设备中断触发后,检查中断号是否在20-23之间,否则按原有中断服务流程处理,是则进入后续步骤。
3.2)虚拟机监控器VMM(即hypervisor的中断服务例程vmm_int_handle)遍历所有设备对应的数据结构体DEV_INTX_INFO[busnum][devnum],如果找到与当前INTx中断请求的中断请求信息相匹配的数据结构体,则对数据结构体的信息字段进行判断,如果同时满足否使能值为使能(DEV_INTX_INFO[i][j].valid)、中断请求信息的中断寄存器地址非空和中断请求信息的中断寄存器特征值同时非空两个条件(read(DEV_INTX_INFO[i][j].intxstatus_reg)&DEV_INTX_INFO[i][j].targetdom!=0),则将当前INTx中断请求转发给匹配的数据结构体中记录的中断目标虚拟机(即执行send_dev_mondo(DEV_INTX_INFO[i][j].targetdom)),通过中断目标虚拟机来处理当前INTx中断请求。本实施例遍历所有设备对应的数据结构体与当前INTx中断请求的中断请求信息相匹配的数据结构体时,具体是根据设备中断状态寄存器地址intxstatus_reg和中断发生特征值intx_incoming_figure进行匹配,匹配算法既可以是简单的比对,也可以根据需要采用相对复杂的运算机制进行比对。
参见步骤1)~3)的详细步骤可知,本实施例没有对虚拟机操作***进行任何额外的修改,其中所提到的注册中断号、注册中断服务例程以及hypercall调用都是驱动程序中的原始过程,本实施例可以在虚拟机操作***不感知的情况下解决虚拟机之间的中断隔离性问题,这包含几个方面:一是虚拟机之间信息的隔离,二是故障的隔离,三是状态变化的隔离。信息隔离是指,当有设备中断发生时,只有拥有设备的虚拟机能感知中断;当设备有故障发生时,其宿主虚拟机之外的软件代码只有虚拟机监控器对其中断状态控制器进行读操作,这不会引发故障的扩散,也不会影响其它虚拟机;设备状态的变化也不会被除宿主虚拟机之外的其它虚拟机感知。因此,本实施例对于虚拟机有良好的隔离性和安全性。需要说明的是,本INTx中断转发的设计也可应用到其它类型的中断转发机制,例如PCIX/PCIE总线MSI中断、AMBA总线device id中断等中断信号的投递。
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (4)
1.一种计算机虚拟化***的PCI设备INTx中断投递方法,其特征在于实施步骤如下:
1)为虚拟机监控器生成用于指定具有各个设备对应直接访问权限的虚拟机信息的内部设备中断信息记录,并针对每一个设备初始化一个用于存储设备中断使能值、中断目标虚拟机和中断请求信息的数据变量记录;
2)虚拟机启动后根据所述内部设备中断信息记录获取本虚拟机具有直接访问权限的设备,针对所述设备向操作***注册中断号以及中断号处理例程,使能所述设备的设备中断并向虚拟机监控器请求填写本虚拟机具有直接访问权限的各个设备的中断使能和中断目标;所述虚拟机监控器根据各个虚拟机的请求填写各个设备的中断使能值和中断目标虚拟机;
3)虚拟机监控器接收设备的当前INTx中断请求,如果发起当前INTx中断请求的设备对应数据变量记录的中断使能值为使能,则将当前INTx中断请求投递给设备对应数据变量记录中记录的中断目标虚拟机,通过中断目标虚拟机来直接处理当前INTx中断请求。
2.根据权利要求1所述的计算机虚拟化***的PCI设备INTx中断投递方法,其特征在于,所述步骤1)的详细步骤如下:
1.1)对PCIE控制单元所连的PCIE总线进行标准PCI软件扫描配置,获取各个设备的设备名称、总线号、中断状态寄存器地址;
1.2)虚拟机监控器根据所述各个设备的设备名称、总线号、中断状态寄存器地址生成各个设备的内部设备中断信息记录,并将所述内部设备中断信息记录写入虚拟机监控器的配置文件中;所述内部设备中断信息记录包括中断信息结点名称、具有设备直接访问权限的虚拟机、设备名称、总线号、设备号、中断寄存器地址、中断寄存器特征值;
1.3)虚拟机监控器针对每一个设备初始化一个用于存储设备中断使能值、中断目标虚拟机和中断请求信息的数据变量记录,所述数据变量记录为以总线号和设备号作为索引的数据结构体,所述数据结构体的信息字段包括设备中断使能值、中断目标虚拟机和中断请求信息,其实所述中断请求信息包括中断寄存器地址和中断寄存器特征值,其中中断使能值默认为非使能,中断目标虚拟机默认为空;
1.4)虚拟机监控器构建并提供用于为数据结构体的中断使能值、中断目标虚拟机进行填充赋值操作的填充调用接口。
3.根据权利要求2所述的计算机虚拟化***的PCI设备INTx中断投递方法,其特征在于,所述步骤2)的详细步骤如下:
2.1)虚拟机启动后根据虚拟机监控器提供的所述内部设备中断信息记录获取本虚拟机具有直接访问权限的设备;
2.2)虚拟机针对本虚拟机具有直接访问权限的所有设备,分别向操作***注册中断号以及中断号处理例程;
2.3)虚拟机启动本虚拟机具有直接访问权限的每一个设备的中断触发功能,并调用所述虚拟机监控器提供的填充调用接口,修改本虚拟机具有直接访问权限的每一个设备对应数据结构体,分别将数据结构体的设备中断使能值填充赋值为使能,将中断目标虚拟机填充赋值为本虚拟机;所述虚拟机监控器根据各个虚拟机的填充调用接口调用请求填写各个设备的中断使能值和中断目标虚拟机。
4.根据权利要求3所述的计算机虚拟化***的PCI设备INTx中断投递方法,其特征在于,所述步骤3)的详细步骤如下:
3.1)虚拟机监控器接收设备的当前INTx中断请求,首先检测INTx中断请求的中断号是否在指定的中断号区间内,如果不是则将当前INTx中断请求按虚拟机监控器中指定的中断服务流程处理并退出;否则,跳转执行下一步;
3.2)虚拟机监控器遍历所有设备对应的数据结构体,如果找到与当前INTx中断请求的中断请求信息相匹配的数据结构体,则对数据结构体的信息字段进行判断,如果同时满足否使能值为使能、中断请求信息的中断寄存器地址非空和中断请求信息的中断寄存器特征值同时非空两个条件,则将当前INTx中断请求转发给匹配的数据结构体中记录的中断目标虚拟机,通过所述中断目标虚拟机来处理当前INTx中断请求。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410205359.2A CN103984591B (zh) | 2014-05-15 | 2014-05-15 | 计算机虚拟化***的PCI设备INTx中断投递方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410205359.2A CN103984591B (zh) | 2014-05-15 | 2014-05-15 | 计算机虚拟化***的PCI设备INTx中断投递方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103984591A true CN103984591A (zh) | 2014-08-13 |
CN103984591B CN103984591B (zh) | 2015-04-29 |
Family
ID=51276583
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410205359.2A Active CN103984591B (zh) | 2014-05-15 | 2014-05-15 | 计算机虚拟化***的PCI设备INTx中断投递方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103984591B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105045727A (zh) * | 2015-08-14 | 2015-11-11 | 华为技术有限公司 | 一种访问共享内存的方法及设备 |
CN108984350A (zh) * | 2017-06-01 | 2018-12-11 | 龙芯中科技术有限公司 | 一种中断处理功能验证***和方法 |
CN109144672A (zh) * | 2018-09-07 | 2019-01-04 | 郑州云海信息技术有限公司 | 一种分配PCIe设备的方法、***及相关组件 |
CN111949371A (zh) * | 2020-08-14 | 2020-11-17 | 苏州浪潮智能科技有限公司 | 一种命令信息传输方法、***、装置及可读存储介质 |
CN112084128A (zh) * | 2020-09-09 | 2020-12-15 | 中国航空工业集团公司雷华电子技术研究所 | 消息中断通信方法、计算机设备和存储介质 |
CN113391881A (zh) * | 2021-06-28 | 2021-09-14 | 元心信息科技集团有限公司 | 中断的管理方法、装置、电子设备及计算机存储介质 |
CN116107697A (zh) * | 2023-01-04 | 2023-05-12 | 芯动微电子科技(武汉)有限公司 | 一种不同操作***之间互相通信的方法及*** |
CN116431293A (zh) * | 2023-06-14 | 2023-07-14 | 麒麟软件有限公司 | 一种在jailhouse实现PCIE设备隔离的方法 |
CN116954830A (zh) * | 2023-09-18 | 2023-10-27 | 麒麟软件有限公司 | jailhouse下使虚拟机实现msi/x中断的方法 |
CN117762573A (zh) * | 2024-02-22 | 2024-03-26 | 成都菁蓉联创科技有限公司 | 一种嵌入式平台下虚拟机中设备信息处理方法及*** |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101241445A (zh) * | 2007-02-08 | 2008-08-13 | 联想(北京)有限公司 | 虚拟机***及其访问显卡的方法 |
CN102945186A (zh) * | 2005-12-30 | 2013-02-27 | 英特尔公司 | 直接传送中断到虚拟处理器 |
-
2014
- 2014-05-15 CN CN201410205359.2A patent/CN103984591B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102945186A (zh) * | 2005-12-30 | 2013-02-27 | 英特尔公司 | 直接传送中断到虚拟处理器 |
CN101241445A (zh) * | 2007-02-08 | 2008-08-13 | 联想(北京)有限公司 | 虚拟机***及其访问显卡的方法 |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105045727B (zh) * | 2015-08-14 | 2018-06-26 | 华为技术有限公司 | 一种访问共享内存的方法及设备 |
CN105045727A (zh) * | 2015-08-14 | 2015-11-11 | 华为技术有限公司 | 一种访问共享内存的方法及设备 |
CN108984350A (zh) * | 2017-06-01 | 2018-12-11 | 龙芯中科技术有限公司 | 一种中断处理功能验证***和方法 |
CN109144672A (zh) * | 2018-09-07 | 2019-01-04 | 郑州云海信息技术有限公司 | 一种分配PCIe设备的方法、***及相关组件 |
US11868799B2 (en) | 2020-08-14 | 2024-01-09 | Inspur Suzhou Intelligent Technology Co., Ltd. | Command information transmission method, system, and apparatus, and readable storage medium |
CN111949371A (zh) * | 2020-08-14 | 2020-11-17 | 苏州浪潮智能科技有限公司 | 一种命令信息传输方法、***、装置及可读存储介质 |
CN111949371B (zh) * | 2020-08-14 | 2022-07-22 | 苏州浪潮智能科技有限公司 | 一种命令信息传输方法、***、装置及可读存储介质 |
CN112084128A (zh) * | 2020-09-09 | 2020-12-15 | 中国航空工业集团公司雷华电子技术研究所 | 消息中断通信方法、计算机设备和存储介质 |
CN113391881A (zh) * | 2021-06-28 | 2021-09-14 | 元心信息科技集团有限公司 | 中断的管理方法、装置、电子设备及计算机存储介质 |
CN116107697A (zh) * | 2023-01-04 | 2023-05-12 | 芯动微电子科技(武汉)有限公司 | 一种不同操作***之间互相通信的方法及*** |
CN116107697B (zh) * | 2023-01-04 | 2023-10-31 | 芯动微电子科技(武汉)有限公司 | 一种不同操作***之间互相通信的方法及*** |
CN116431293B (zh) * | 2023-06-14 | 2023-09-26 | 麒麟软件有限公司 | 一种在jailhouse实现PCIE设备隔离的方法 |
CN116431293A (zh) * | 2023-06-14 | 2023-07-14 | 麒麟软件有限公司 | 一种在jailhouse实现PCIE设备隔离的方法 |
CN116954830A (zh) * | 2023-09-18 | 2023-10-27 | 麒麟软件有限公司 | jailhouse下使虚拟机实现msi/x中断的方法 |
CN116954830B (zh) * | 2023-09-18 | 2023-12-26 | 麒麟软件有限公司 | jailhouse下使虚拟机实现msi/x中断的方法 |
CN117762573A (zh) * | 2024-02-22 | 2024-03-26 | 成都菁蓉联创科技有限公司 | 一种嵌入式平台下虚拟机中设备信息处理方法及*** |
CN117762573B (zh) * | 2024-02-22 | 2024-05-17 | 成都菁蓉联创科技有限公司 | 一种嵌入式平台下虚拟机中设备信息处理方法及*** |
Also Published As
Publication number | Publication date |
---|---|
CN103984591B (zh) | 2015-04-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11868792B2 (en) | Dynamic device virtualization for use by guest user processes based on observed behaviors of native device drivers | |
CN103984591B (zh) | 计算机虚拟化***的PCI设备INTx中断投递方法 | |
US11681639B2 (en) | Direct access to a hardware device for virtual machines of a virtualized computer system | |
US8612633B2 (en) | Virtual machine fast emulation assist | |
US9734096B2 (en) | Method and system for single root input/output virtualization virtual functions sharing on multi-hosts | |
US10235515B2 (en) | Method and apparatus for on-demand isolated I/O channels for secure applications | |
Szefer et al. | Eliminating the hypervisor attack surface for a more secure cloud | |
US20080065854A1 (en) | Method and apparatus for accessing physical memory belonging to virtual machines from a user level monitor | |
US7757231B2 (en) | System and method to deprivilege components of a virtual machine monitor | |
US7945436B2 (en) | Pass-through and emulation in a virtual machine environment | |
US7853744B2 (en) | Handling interrupts when virtual machines have direct access to a hardware device | |
Van Doorn | Hardware virtualization trends | |
US20230124004A1 (en) | Method for handling exception or interrupt in heterogeneous instruction set architecture and apparatus | |
US10552345B2 (en) | Virtual machine memory lock-down | |
US20070038996A1 (en) | Remote I/O for virtualized systems | |
US7840790B1 (en) | Method and system for providing device drivers in a virtualization system | |
Im et al. | On-Demand Virtualization for Post-Copy OS Migration in Bare-Metal Cloud | |
Yao et al. | A tour beyond BIOS: Using IOMMU for DMA protection in UEFI firmware | |
Liu et al. | Research on Hardware I/O Passthrough in Computer Virtualization | |
Senthilvelan et al. | Study of content-based sharing on the xen virtual machine monitor | |
Aithal et al. | Fast & Scalable I/O for Emulated HPUX | |
CN113626148A (zh) | 一种基于混合虚拟化的终端虚拟机生成***及方法 | |
CN117472805A (zh) | 一种基于virtio的虚拟化IO设备内存管理*** |
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 |