CN117762840A - 一种jailhouse隔离PCIe网卡的中断转发的方法 - Google Patents

一种jailhouse隔离PCIe网卡的中断转发的方法 Download PDF

Info

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
Application number
CN202311421342.6A
Other languages
English (en)
Inventor
张有泾
陈阳平
张云飞
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kirin Software Co Ltd
Original Assignee
Kirin Software Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Kirin Software Co Ltd filed Critical Kirin Software Co Ltd
Priority to CN202311421342.6A priority Critical patent/CN117762840A/zh
Publication of CN117762840A publication Critical patent/CN117762840A/zh
Pending legal-status Critical Current

Links

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网卡的中断转发的方法
技术领域
本发明涉及计算机技术领域,具体提供一种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网卡驱动程序。
CN202311421342.6A 2023-10-30 2023-10-30 一种jailhouse隔离PCIe网卡的中断转发的方法 Pending CN117762840A (zh)

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)

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