CN117762840A - 一种jailhouse隔离PCIe网卡的中断转发的方法 - Google Patents
一种jailhouse隔离PCIe网卡的中断转发的方法 Download PDFInfo
- Publication number
- CN117762840A CN117762840A CN202311421342.6A CN202311421342A CN117762840A CN 117762840 A CN117762840 A CN 117762840A CN 202311421342 A CN202311421342 A CN 202311421342A CN 117762840 A CN117762840 A CN 117762840A
- Authority
- CN
- China
- Prior art keywords
- network card
- jailhouse
- pcie network
- file
- source code
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 35
- 238000002955 isolation Methods 0.000 title claims abstract description 16
- 230000006870 function Effects 0.000 claims description 49
- 239000013598 vector Substances 0.000 claims description 12
- 238000013519 translation Methods 0.000 claims description 9
- 238000012545 processing Methods 0.000 claims description 8
- 230000000903 blocking effect Effects 0.000 claims description 5
- 230000004044 response Effects 0.000 claims description 5
- 239000011800 void material Substances 0.000 claims description 3
- 238000002347 injection Methods 0.000 abstract description 8
- 239000007924 injection Substances 0.000 abstract description 8
- 238000005192 partition Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000000243 solution Substances 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000006467 substitution reaction Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 239000002184 metal Substances 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明涉及计算机技术领域,具体提供一种jailhouse隔离PCIe网卡的中断转发的方法,旨在解决当jailhouse在AArch64架构上进行PCIe网卡设备的隔离时,无法完成MSIx中断转发注入的技术问题。为此目的,本发明包括步骤:获取jailhouse源码;在jailhouse源码中添加MSICapturer模块,所述MSICapturer模块用于获取并保存PCIe网卡的DeviceID、EventID、ICID和pINTID;在jailhouse源码目录添加应用程序vfio_demo.c,所述应用程序vfio_demo.c用于获取使能MSIx中断的PCIe网卡的EventID和DeviceID并转发给用户态程序文件inject.c;在jailhouse的源码目录中添加用户态程序文件inject.c,所述用户态程序文件inject.c用于向所述MSICapturer模块注入PCIe网卡的DeviceID和EventID;将修改后的jailhouse源码保存并编译,安装jailhouse;添加虚拟机操作系统;将包含PCIe网卡驱动程序的文件igb.ko拷贝到虚拟机操作系统的根文件系统中。
Description
技术领域
本发明涉及计算机技术领域,具体提供一种jailhouse隔离PCIe网卡的中断转发的方法。
背景技术
PCIe网卡是指一种具有PCIe接口的网络适配器,在主板级连接中用作扩展卡接口,最新的PCIe卡已经进行了改进,成为选择网卡时的必然趋势。当前PCIe网卡设备大都采用MSIx(Message Signaled Interrupt eXtended-基于消息的信号中断扩展)将中断信号发送给CPU。
Jailhouse是用于实现设备隔离的虚拟化软件,是一个基于Hypervisor虚拟化技术的Linux静态分区管理程序。Jailhouse使用Cell单元节点来配置CPU和设备硬件平台的虚拟化功能,且各个节点分配的资源互不干扰。jailhouse作为type1型虚拟机监控器,其性能很高,在中断虚拟化方面可以对INTx型进行虚拟化,但是对基于消息的MSIx型中断不能直接提供支持。
Jailhouse可以对PCIe设备进行物理隔离,也就是说可以把PCIe设备当作一种资源分配给各个虚拟机使用。但是jailhouse在AArch64架构上对一些PCIe网卡设备进行隔离时,会存在nonroot linux无法响应MSIx中断的问题,导致无法获取nonroot linux中PCIe网卡设备的MSIx中断信息,从而无法完成MSIx中断转发注入的问题。
发明内容
为了克服上述缺陷,提出了本发明,以提供当jailhouse在AArch64架构上进行PCIe网卡设备的隔离时,无法完成MSIx中断转发注入的技术问题。
本发明提供一种jailhouse隔离PCIe网卡的中断转发的方法,包括步骤:
获取jailhouse源码;
在jailhouse源码中添加MSICapturer模块,所述MSICapturer模块用于获取并保存PCIe网卡的DeviceID、EventID、ICID和pINTID;
在jailhouse源码目录添加应用程序vfio_demo.c,所述应用程序vfio_demo.c用于获取使能MSIx中断的PCIe网卡的EventID和DeviceID并转发给用户态程序文件inject.c;
在jailhouse的源码目录中添加用户态程序文件inject.c,所述用户态程序文件inject.c用于向所述MSICapturer模块注入PCIe网卡的DeviceID和EventID;
将修改后的jailhouse源码保存并编译,安装jailhouse;
添加虚拟机操作系统;
将包含PCIe网卡驱动程序的文件igb.ko拷贝到虚拟机操作系统的根文件系统中。
在上述方法进一步方案中,所述在jailhouse源码目录添加应用程序vfio_demo.c,包括:
通过lspci命令获取PCIe网卡的bdf和msix向量,将bdf保存为deviceid变量,根据msix向量创建相同数量的eventfd并依次保存到eventid数组变量;
根据所述eventid数组变量,使能PCIe网卡的MSIx中断;
创建epoll实例并进行初始化设置,以eventid数组变量为参数读取EPOLL_CTL_ADD类型事件;
调用epoll_wait函数对所述epoll实例进行阻塞等待,直到所述使能PCIe网卡的MSIx中断产生后,阻塞解除;
根据所述epoll实例得到PCIe网卡的EventID,根据所述deviceid变量得到PCIe网卡的DeviceID。
在上述方法进一步方案中,所述在jailhouse源码中添加MSICapturer模块,包括:
根据平台芯片手册,获取中断翻译服务硬件的偏移地址its_base和空间大小its_space;
根据所述偏移地址its_base和空间大小its_space,注册虚拟机操作系统对中断翻译服务硬件访问的回调函数;
在jailhouse的源码目录添加msi-capturer.c文件,并在msi-capturer.c文件中添加所述回调函数的功能实现函数。
在上述方法进一步方案中,所述根据所述偏移地址its_base和空间大小its_space,注册虚拟机对中断翻译服务硬件访问的回调函数,包括:
在jailhouse的源码文件control.c中添加关于所述回调函数的外部声明函数:extern enum mmio_result msi_capturer_handler(void*arg,struct mmio_access*mmio);
修改所述源码文件control.c中的cell_create函数,在函数成功返回处添加代码:mmio_region_register(cell,its_base,its_space,msi_capturer_handler,(void*)cell)。
在上述方法进一步方案中,所在jailhouse的源码目录中添加用户态程序文件inject.c,包括:
在jailhouse的源码文件jailhouse.h中添加关于系统调用码SYS_CALL_PROC的宏定义;
在jailhouse的源码文件main.c中的jailhouse_ioctl函数中添加对系统调用码的处理函数;
在jailhouse的源码文件hypercall.h中添加关于超级系统调用字HYPER_SYS_CALL_WORD的宏定义;
在jaihouse源码文件contol.c中的hypercall函数中添加对超级系统调用字的处理函数;
将获取的PCIe网卡的DeviceID和EventID,作为系统调用码SYS_CALL_PROC的调用参数。
在上述方法进一步方案中,所述将包含PCIe网卡驱动程序的文件igb.ko拷贝到虚拟机操作系统的根文件系统中,包括:
在虚拟机操作系统内核中生成包含PCIe网卡驱动程序的镜像文件Image;
编译所述镜像文件Image得到编译文件igb.ko;
将所述编译文件igb.ko拷贝到虚拟机操作系统的根文件系统中。
在上述方法进一步方案中,响应于初始化jailhouse,注册所述MSICapturer模块,创建PCIe网卡的设备ID、事件ID、CPU映射表ID和中断ID的存储结构,同时启动所述应用程序vfio_demo.c和用户态程序文件inject.c。
在上述方法进一步方案中,所述初始化jailhouse包括:
通过jailhouse enable root-pcie-nic.cell&&inject,对jailhouse进行初始化动作。
在上述方法进一步方案中,响应于虚拟机操作系统启动并运行进入根文件系统,加载所述PCIe网卡驱动程序。
本发明的工作原理和有益效果为:
在实施本发明的技术方案中,使用jailhouse添加MSICapturer模块、应用程序vfio_demo.c和用户态程序文件inject后隔离PCIe网卡设备,并在虚拟机操作系统nonrootlinux中加载标准的Intel I210PCIe网卡驱动程序,使PCIe网卡设备可以成功被虚拟机操作系统发现,并被其中的igb.ko初始化,经过MSICapturer模块对客户机中PCIe网卡的MSIx中断信息进行捕获,通过应用程序vfio_demo调用用户态程序文件inject将PCIe网卡的MSIx中断注入到虚拟机操作系统nonroot linux中,如此实现PCIe网卡设备的MSIx中断转发功能。
附图说明
参照附图,本发明的公开内容将变得更易理解。本领域技术人员容易理解的是:这些附图仅仅用于说明的目的,而并非意在对本发明的保护范围组成限制。此外,图中类似的数字用以表示类似的部件,其中:
图1是根据本发明的一种jailhouse隔离PCIe网卡的中断转发的方法的主要步骤流程示意图;
图2是根据本发明的一种jailhouse隔离PCIe网卡的中断转发的方法的网络结构示意图。
具体实施方式
下面参照附图来描述本发明的一些实施方式。本领域技术人员应当理解的是,这些实施方式仅仅用于解释本发明的技术原理,并非旨在限制本发明的保护范围。
本实施例基于Aarch64平台,使用jailhouse添加MSICapturer模块、应用程序vfio_demo.c和用户态程序文件inject后隔离PCIe网卡设备,并在虚拟机操作系统nonrootlinux中加载标准的Intel I210PCIe网卡驱动程序,使PCIe网卡设备可以成功被虚拟机操作系统发现,并被其中的igb.ko初始化,经过MSICapturer模块对客户机中PCIe网卡的MSIx中断信息进行捕获,通过应用程序vfio_demo调用用户态程序文件inject将PCIe网卡的MSIx中断注入到虚拟机操作系统nonroot linux中,如此实现PCIe网卡设备的MSIx中断转发功能。
图1是根据本发明的一种jailhouse隔离PCIe网卡的中断转发的方法的主要步骤流程示意图,图2是根据本发明的一种jailhouse隔离PCIe网卡的中断转发的方法的网络结构示意图。如图1-2所示,本发明实施例中的一种jailhouse隔离PCIe网卡的中断转发的方法主要包括下列步骤S1-步骤S7。
步骤S1:获取jailhouse源码。
Jailhouse是一个基于Linux的分区虚拟机管理器,使用cell的来配置CPU等硬件的虚拟化特性。Cell分为root cell和non-root cell,root cell接管系统硬件资源,只有一个;non-root cell可以有多个,并且从root cell中获取系统资源。本实施例中,通过在jailhouse配置的non-root cell上安装Linux系统,使用Linux系统驱动PCIe网卡,通过虚拟化实现jailhouse对PCIe网卡的隔离。
步骤S2:在jailhouse源码中添加MSICapturer模块,所述MSICapturer模块用于获取并保存PCIe网卡的DeviceID、EventID、ICID和pINTID。
本实施例中,MSICapturer模块负责监听虚拟机操作系统guest(non root linux)对ITS(Interrupt Translation Service)硬件的访问,通过分析数据后将所获取到的结果保存后并输出。
在上述方法的进一步实施例中,步骤S2包括:
步骤S21:根据aarch64平台芯片手册,获取中断翻译服务its硬件的偏移地址its_base和空间大小its_space。
步骤S22:根据所述偏移地址its_base和空间大小its_space,注册虚拟机操作系统guest(non root linux)对中断翻译服务its硬件访问的回调函数。
在jailhouse的源码文件control.c中添加关于所述回调函数的外部声明函数:extern enum mmio_result msi_capturer_handler(void*arg,struct mmio_access*mmio);
通过上述获得的偏移地址its_base和空间大小its_space,修改所述源码文件control.c中的cell_create函数,在函数成功返回(return0)处添加代码:mmio_region_register(cell,its_base,its_space,msi_capturer_handler,(void*)cell)。
步骤S23:在jailhouse的源码目录添加msi-capturer.c文件,并在msi-capturer.c文件中添加所述回调函数的功能实现函数;
步骤S3:在jailhouse源码目录添加应用程序vfio_demo.c,所述应用程序vfio_demo.c用于获取使能MSIx中断的PCIe网卡的EventID和DeviceID并转发给用户态程序文件inject.c。
在上述方法的进一步实施例中,步骤S3包括:
步骤S31:保存PCIe网卡的deviceid并初始化eventid
通过lspci命令获取INTEL I210网卡的bdf和MSIx向量数目,将bdf保存为到deviceid变量,根据MSIx向量数创建相同数量的eventfd并依次保存到eventid数组变量中。
步骤S32:使能PCIe网卡的MSIx中断
通过vfio_pci.ko的系统调用的接口VFIO_DEVICE_SET_IRQS,将上述步骤eventid数组中的数据和标志位VFIO_IRQ_SET_DATA_EVENTFD|VFIO_IRQ_SET_ACTION_TRIGGER作为参数进行系统调用,进而使能网卡的MSIx中断向量。
步骤S33:epoll创建及设置初始化工作
上述步骤结束后通过epoll_create1接口函数创建epoll实例,并对该实例调用epoll_ctl函数进行设置,设置的类型为EPOLL_CTL_ADD,读取类型的事件,参数为eventid数组数据。
步骤S34:等待PCIe网卡的MSIx中断
上述步骤完成以后,就可以调用epoll_wait函数对epoll实例进行阻塞等待了。PCIe网卡所使能的MSIx中断产生后就会触发epoll实例的阻塞解除。
步骤S35:MSIx中断注入给non root linux
上述步骤阻塞解除后,必然会获取到步骤S33所设置的eventid数组数据,通过该数据获取数组的角标后就获得了EventID向量,结合DeviceID(步骤S31中deviceid变量),基于步骤S4进行当前中断的注入给non root linux(guest)
步骤S36:反复到步骤S34,完成PCIe网卡的中断转发。
因为PCIe网卡的中断伴随着数据包的传递会不断产生,每一次中断都要进入S34进行转发,在整个中断转发方法中,S3步骤应为最后的步骤。
步骤S4:在jailhouse的源码目录中添加用户态程序文件inject.c,所述用户态程序文件inject.c用于向所述MSICapturer模块注入PCIe网卡的DeviceID和EventID。
在上述方法的进一步实施例中,步骤S4包括:
步骤S41:定义系统调用码SYS_CALL_PROC
在jailhouse源码文件jailhouse.h中添加宏定义
#define SYS_CALL_PROC(_IOW(0,7,struct jailhouse_cell_id)
步骤S42:定义超级系统调用字HYPER_SYS_CALL_WORD
在jailhouse源码文件hypercall.h添加宏定义
#define HYPER_SYS_CALL_WORD(9)
步骤S43:驱动中对系统调用码进行处理
在jaihouse源码文件main.c中的jailhouse_ioctl函数中添加对SYS_CALL_PROC系统调用码的处理函数jailhouse_call_arg2,该函数为jailhouse自带,将HYPER_SYS_CALL_WORD及用户层参数直接传入即可,实现了从系统调用到超级系统调用的过渡。
步骤S44:虚拟化中对超级系统调用字进行处理
在jaihouse源码文件contol.c中的hypercall函数中添加对HYPER_SYS_CALL_WORD调用字的处理部分,直接调用MSICapturer模块的msi_capturer_trigger函数即可。
步骤S45:添加应用程序inject运行中断注入
在jailhouse目录文件添加用户态程序文件inject.c。该程序打开jailhouse.ko驱动后,将获取的PCIe网卡的DeviceID和EventID,作为系统调用码SYS_CALL_PROC的调用参数,然后进行SYS_CALL_PROC的系统调用即可。
步骤S5:将修改后的jailhouse源码保存并编译,安装jailhouse。
Jailhouse编译完成后,生成文件分为三部分:第一部分,Jailhouse驱动和hypervisor固件,这部分提供用户态接口并初始化hypervisor;第二部分,cell和guest镜像,cell是镜像运行所需的系统资源的描述;guest镜像运行在cell之上,包括裸机,RTOS和Linux内核镜像等;第三部分,用户态工具,通过这些工具加载cell,运行镜像,查看Jailhouse状态等。
准备一个aarch64环境,安装CentOS8.4系统,内核启动参数中预留jailhouse固件的内存空间和虚拟机操作系统nonroot linux的内存空间,安装Jailhosue代码,并准备测试jailhouse时启动虚拟机操作系统(linux)所需的资源文件:initrd内存根文件系统rootfs.cpio,,nonroot.dts设备树文件,内核镜像文件Image。Jailhosue在静态分区环境搭建,添加MSICapturer模块、应用程序vfio_demo.c、用户态程序文件inject后编译安装,需要机器配置如下:
①需要硬件支持虚拟化扩展和两个或者两个以上的cpu核心;
②4.7+的Linux内核,对CPU操作的PSCI支持等。
步骤S6:在安装好的jailhouse程序上添加虚拟机操作系统;
步骤S7:将包含PCIe网卡驱动程序的文件igb.ko拷贝到虚拟机操作系统的根文件系统中。
在上述方法的进一步实施例中,步骤S7包括:
步骤S71:在虚拟机操作系统内核中生成包含PCIe网卡驱动程序的镜像文件Image;
步骤S72:编译所述镜像文件Image得到编译文件igb.ko;
步骤S73:将所述编译文件igb.ko拷贝到虚拟机操作系统的根文件系统rootfs.cpio中。
通过上述步骤S1-S7,使用jailhouse工具对arm64核,内存,以及PCIe设备进行硬件隔离,并在分区中运行linux操作系统,该linux系统对隔离过来的Intel I210 PCIe网卡进行驱动,jailhouse cell linux运行后加载隔离过来的PCIe网卡的驱动程序igb.ko。其中在jailhouse enable初始化会启动应用程序vfio_demo.c和用户态程序文件inject;vfio_demo程序根据lspci命令获取PCIe设备(I210网卡)的bdf以及vectors参数,并以此保存DeviceID和EventID,以及对应的eventFD参数,然后启动一线程后进入死循环;线程中会通过vfio提供的接口对PCIe网卡进行msix中断的使能,并完成epoll创建及控制的初始化,之后线程进入无限循环过程,每一次迭代都会等待epoll中eventfd的读事件,该事件标识对应的EventID及DeviceID,通过这两个参数调用用户态程序文件inject,通过系统调用sys_call进入jailhouse.ko驱动程序,并在其中通过超级系统调用进入hypervisor;jailhouse的hypervisor通过传递进来的DeviceID和EventID调用MSICapturer模块;MSICapturer模块通过这两个参数判断PCIe网卡的bdf和向量id,在已捕获的MSIx中断信息中映射出pINTID和ICID,实现了PCIe网卡设备MSIx中断的精确注入,进而完成了PCIe网卡MSIx中断的转发功能。
需要指出的是,尽管上述实施例中将各个步骤按照特定的先后顺序进行了描述,但是本领域技术人员可以理解,为了实现本发明的效果,不同的步骤之间并非必须按照这样的顺序执行,其可以同时(并行)执行或以其他顺序执行,这些变化都在本发明的保护范围之内。
添加完带有MSICapturer模块和用户态程序文件inject的jailhouse,在修改后的jailhouse程序上安装好能够驱动PCIe网卡的Linux系统后,为了进一步体现本实施例的中断获取结果,开始进行如下验证:
准备一个X86环境,安装CentOS8.4系统作为分析环境,配置带有千兆以太网接口,并已安装iperf3软件包。
①部署环境初始化
该步骤通过jailhouse enable root-pcie-nic.cell&&vfio_demo,初始化jailhouse并启动vfio_demo程序。
②部署环境启动guest
jailhouse cell linux guest-pcie-nic.cell Image dnonroot.dtb irootfs.cpio c"earlycon=PL011,0x28000000console=ttyAMA0,115200root=/dev/ram0 ramdisk_size=0x1000000"。该步骤将guest(non root linux)运行起来;然后在guest中载入INTEL I210网卡驱动,insmod igb.ko
③分析环境启动iperf服务端
将千兆以太网网口通过网线连接至部署环境PCIeI210网卡,并设置本地以太网ip地址为192.168.1.10,之后在控制台执行iperf3-s-i 1启动分析环境的服务端侦听链接。
④分析环境guest启动iperf客户端
在分析环境的guest(non root linux)中首先设置I210网卡的IP地址为”192.168.1.100”,而后在nonroot linux中执行iperf3-c192.168.1.10-t 10-i 5命令用以启动iperf客户端
⑤在分析环境进行网络数据包分析
以上步骤执行后,在分析环境(192.168.1.10)上的控制台中观察iperf服务端的数据,查看分析后得出,部署环境nonroot linux中iperf客户端数据包全部传输过来,并且网络带宽利用率为941Mbits/sec,这证明了PCIe网卡的MSIx中断转发是非常成功的。
本实施例可以通过jailhouse添加vfio_demo功能后隔离PCIe网卡设备,设备可以成功被客户机中Linux系统扫描发现,并可被其中的igb.ko初始化,初始化的MSIx中断信息被MSICapturer捕获,vfio_demo可设置I210网卡的MSIx中断使能,并实现了PCIe网卡的MSIx中断转发给nonroot linux中PCIe网卡驱动。
图2中,Jailhouse Hypervisor是一个固件,UART0是硬件串口0,UART1是硬件串口1,MMIO是内存映射IO,这个概念是jailhouse中标准的接口,ttyAMA0是linux系统中/dev目录下的设备节点,所述控制台就是绑定的ttyAMA0。
中断转发就是通过vfio_demo程序获取PCIe网卡的DeviceID和EventID参数,并转发给inject程序,直接调用inject程序将PCIe网卡的DeviceID和EventID参数,通过系统调用进入jailhouse.ko驱动程序,并在驱动中通过超级系统调用进入jailhouse.binhypervisor固件(编译安装后的路径/lib/firmware/);然后通过传递进来的DeviceID和EventID调用MSICapturer捕获模块,MSICapturer模块通过这两个参数判断网卡的bdf和向量id,在已捕获的msi_capturer信息中映射出pINTID和ICID,注入给虚拟机操作系统GuestLinux,如此完成msix中断的精确注入。由于数据是双向的,当驱动将中断注入到MISCapturer模块后,MSICapture也会对驱动反馈应答信息。
图2中的两个Console分别对应X86分析机控制台和Aarch64测试机上客户机的控制台,我们在X86控制台中设置局域网IP地址(192.168.1.10)后运行iper3的服务端(iperf3–s–i1),这样开启TCP侦听;而后我们在Aarch64客户机控制台中设置局域网IP地址(192.168.1.100),后运行iperf3的客户端(iperf3–c 192.168.1.10–t 10–i 5),而后我们在分析机控制台输出中看到网络传输的性能数据。
至此,已经结合附图所示的优选实施方式描述了本发明的技术方案,但是,本领域技术人员容易理解的是,本发明的保护范围显然不局限于这些具体实施方式。在不偏离本发明的原理的前提下,本领域技术人员可以对相关技术特征作出等同的更改或替换,这些更改或替换之后的技术方案都将落入本发明的保护范围之内。
Claims (9)
1.一种jailhouse隔离PCIe网卡的中断转发的方法,其特征在于,包括步骤:
获取jailhouse源码;
在jailhouse源码中添加MSICapturer模块,所述MSICapturer模块用于获取并保存PCIe网卡的DeviceID、EventID、ICID和pINTID;
在jailhouse源码目录添加应用程序vfio_demo.c,所述应用程序vfio_demo.c用于获取使能MSIx中断的PCIe网卡的EventID和DeviceID并转发给用户态程序文件inject.c;
在jailhouse的源码目录中添加用户态程序文件inject.c,所述用户态程序文件inject.c用于向所述MSICapturer模块注入PCIe网卡的DeviceID和EventID;
将修改后的jailhouse源码保存并编译,安装jailhouse;
添加虚拟机操作系统;
将包含PCIe网卡驱动程序的文件igb.ko拷贝到虚拟机操作系统的根文件系统中。
2.根据权利要求1所述的一种jailhouse隔离PCIe网卡的中断转发的方法,其特征在于,所述在jailhouse源码目录添加应用程序vfio_demo.c,包括:
通过lspci命令获取PCIe网卡的bdf和msix向量,将bdf保存为deviceid变量,根据msix向量创建相同数量的eventfd并依次保存到eventid数组变量;
根据所述eventid数组变量,使能PCIe网卡的MSIx中断;
创建epoll实例并进行初始化设置,以eventid数组变量为参数读取EPOLL_CTL_ADD类型事件;
调用epoll_wait函数对所述epoll实例进行阻塞等待,直到所述使能PCIe网卡的MSIx中断产生后,阻塞解除;
根据所述epoll实例得到PCIe网卡的EventID,根据所述deviceid变量得到PCIe网卡的DeviceID。
3.根据权利要求1所述的一种jailhouse隔离PCIe网卡的中断转发的方法,其特征在于,所述在jailhouse源码中添加MSICapturer模块,包括:
根据平台芯片手册,获取中断翻译服务硬件的偏移地址its_base和空间大小its_space;
根据所述偏移地址its_base和空间大小its_space,注册虚拟机操作系统对中断翻译服务硬件访问的回调函数;
在jailhouse的源码目录添加msi-capturer.c文件,并在msi-capturer.c文件中添加所述回调函数的功能实现函数。
4.根据权利要求3所述的一种jailhouse隔离PCIe网卡的中断转发的方法,其特征在于,所述根据所述偏移地址its_base和空间大小its_space,注册虚拟机对中断翻译服务硬件访问的回调函数,包括:
在jailhouse的源码文件control.c中添加关于所述回调函数的外部声明函数:externenum mmio_result msi_capturer_handler(void*arg,struct mmio_access*mmio);
修改所述源码文件control.c中的cell_create函数,在函数成功返回处添加代码:mmio_region_register(cell,its_base,its_space,msi_capturer_handler,(void*)cell)。
5.根据权利要求1所述的一种jailhouse隔离PCIe网卡的中断转发的方法,其特征在于,所在jailhouse的源码目录中添加用户态程序文件inject.c,包括:
在jailhouse的源码文件jailhouse.h中添加关于系统调用码SYS_CALL_PROC的宏定义;
在jailhouse的源码文件main.c中的jailhouse_ioctl函数中添加对系统调用码的处理函数;
在jailhouse的源码文件hypercall.h中添加关于超级系统调用字HYPER_SYS_CALL_WORD的宏定义;
在jaihouse源码文件contol.c中的hypercall函数中添加对超级系统调用字的处理函数;
将获取的PCIe网卡的DeviceID和EventID,作为系统调用码SYS_CALL_PROC的调用参数。
6.根据权利要求1所述的一种jailhouse隔离PCIe网卡的中断转发的方法,其特征在于,所述将包含PCIe网卡驱动程序的文件igb.ko拷贝到虚拟机操作系统的根文件系统中,包括:
在虚拟机操作系统内核中生成包含PCIe网卡驱动程序的镜像文件Image;
编译所述镜像文件Image得到编译文件igb.ko;
将所述编译文件igb.ko拷贝到虚拟机操作系统的根文件系统中。
7.根据权利要求1所述的一种jailhouse隔离PCIe网卡的中断转发的方法,其特征在于,响应于初始化jailhouse,注册所述MSICapturer模块,创建PCIe网卡的设备ID、事件ID、CPU映射表ID和中断ID的存储结构,同时启动所述应用程序vfio_demo.c和用户态程序文件inject.c。
8.根据权利要求7所述的一种jailhouse隔离PCIe网卡的中断转发的方法,其特征在于,所述初始化jailhouse包括:
通过jailhouse enable root-pcie-nic.cell&&inject,对jailhouse进行初始化动作。
9.根据权利要求1所述的一种jailhouse隔离PCIe网卡的中断转发的方法,其特征在于,响应于虚拟机操作系统启动并运行进入根文件系统,加载所述PCIe网卡驱动程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311421342.6A CN117762840A (zh) | 2023-10-30 | 2023-10-30 | 一种jailhouse隔离PCIe网卡的中断转发的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311421342.6A CN117762840A (zh) | 2023-10-30 | 2023-10-30 | 一种jailhouse隔离PCIe网卡的中断转发的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117762840A true CN117762840A (zh) | 2024-03-26 |
Family
ID=90318950
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311421342.6A Pending CN117762840A (zh) | 2023-10-30 | 2023-10-30 | 一种jailhouse隔离PCIe网卡的中断转发的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117762840A (zh) |
-
2023
- 2023-10-30 CN CN202311421342.6A patent/CN117762840A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Williams et al. | Unikernel monitors: extending minimalism outside of the box | |
KR101574403B1 (ko) | 결합된 가상 그래픽 장치 | |
US20150169346A1 (en) | Method for controlling a virtual machine and a virtual machine system | |
US20090106754A1 (en) | Handling a device related operation in a virtualization enviroment | |
US20070011444A1 (en) | Method, apparatus and system for bundling virtualized and non-virtualized components in a single binary | |
Armand et al. | A practical look at micro-kernels and virtual machine monitors | |
CN113672342B (zh) | 嵌入式虚拟化系统及构建、测试方法、终端及介质 | |
WO2012138046A1 (ko) | 범용 운영체제 상에서 안드로이드 어플리케이션을 실행하기 위한 단말장치 및 방법, 그리고 이를 위한 컴퓨터로 판독가능한 기록매체 | |
US7111200B2 (en) | Apparatus and method for debugging a logical partition | |
CN115269057A (zh) | 基于设备树的隔离系统生成配置文件的方法 | |
US20010044913A1 (en) | Multiprocessor application interface requiring no ultilization of a multiprocessor operating system | |
CN113657069B (zh) | 片上系统soc仿真验证方法、装置、验证服务器及存储介质 | |
CN116401984A (zh) | 基于虚拟机的片上系统仿真方法及系统 | |
US11797325B2 (en) | Running arbitrary binaries as unikernels on embedded processors | |
Xia et al. | Investigating virtual passthrough I/O on commodity devices | |
CN116028164B (zh) | 设备虚拟化方法以及装置 | |
CN117762840A (zh) | 一种jailhouse隔离PCIe网卡的中断转发的方法 | |
US8713545B2 (en) | Architecture for accelerated computer processing | |
CN117873633A (zh) | 一种jailhouse隔离PCIe网卡的中断注入的方法 | |
CN104182271A (zh) | 一种基于申威处理器的虚拟化实现方法 | |
CN113703913A (zh) | 设备测试方法及装置 | |
Géhberger et al. | Cooling down faas: Towards getting rid of warm starts | |
CN117632358A (zh) | 一种jailhouse隔离PCIe网卡的中断获取的方法 | |
CN113886007B (zh) | Kvm虚拟化系统配置方法、管理方法、系统及介质 | |
CN117075925B (zh) | libvirt管控面卸载方法、装置、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |