CN115664892A - 虚拟监控器下Linux虚拟网卡的实现方法 - Google Patents

虚拟监控器下Linux虚拟网卡的实现方法 Download PDF

Info

Publication number
CN115664892A
CN115664892A CN202211429856.1A CN202211429856A CN115664892A CN 115664892 A CN115664892 A CN 115664892A CN 202211429856 A CN202211429856 A CN 202211429856A CN 115664892 A CN115664892 A CN 115664892A
Authority
CN
China
Prior art keywords
virtual
root cell
network card
client
virtual network
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
Application number
CN202211429856.1A
Other languages
English (en)
Other versions
CN115664892B (zh
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
Publication of CN115664892A publication Critical patent/CN115664892A/zh
Application granted granted Critical
Publication of CN115664892B publication Critical patent/CN115664892B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明涉及虚拟监控器下Linux虚拟网卡的实现方法,由虚拟机监控器通过jailhouse将主机隔离为两个客户机分区,并通过jailhouse为两个客户机之间的共享内存及信号机制构建通信通道;两个客户机上均运行Linux系统。本发明充分利用jailhouse的共享内存通信模型(ivshmem )和Linux系统OSI模型结合,在Linux内核编写了虚拟网卡驱动程序,可用于虚拟机监控器下多个Linux客户机之间的网络通信,通过虚拟网卡的方式不需要带来额外的硬件消耗。

Description

虚拟监控器下Linux虚拟网卡的实现方法
技术领域
本发明涉及虚拟网卡技术领域,具体涉及虚拟监控器下Linux虚拟网卡的实现方法。
背景技术
随着集成电路制造工艺的发展,越来越多的计算单元被集成到单一芯片上。如何更有效地使用单芯片上的资源从而获得良好的系统伸缩性成为摆在系统软件设计者前面的重要问题。目前多核系统上部署虚拟机监控器(hypervisor)是解决该问题的一种有效的解决方式。hypervisor的虚拟化和隔离功能可以实现多个客户机操作系统运行在同一个硬件平台之上。通过动态的增减虚拟机的个数,增加了系统的可伸缩性,更加有效的利用了硬件的计算资源。
目前在嵌入式虚拟化领域,一些虚拟化方案(如jailhouse)并不像的全功能虚拟机管理程序(如KVM或Xen)一样,拥有丰富的接口和功能。例如QEMU的虚拟网卡,其实现复杂,而且有大量的IO模拟。这在注重实时性的嵌入式领域是不能接受的,因为这种方案会造成较大的时延,影响系统实时性。而嵌入式虚拟化一些现有方案中虚拟网卡的实现相对简单,无法满足多数据流、大流量的性能要求。
发明内容
为解决已有技术存在的不足,本发明提供了一种虚拟监控器下Linux虚拟网卡的实现方法,由虚拟机监控器通过jailhouse将主机隔离为两个分区:root cell客户机及nonroot cell客户机,并通过jailhouse为root cell客户机及non root cell客户机之间的共享内存及信号机制构建通信通道;root cell客户机及non root cell客户机上均运行Linux系统,其中,数据从root cell客户机流向non root cell客户机为网络下行,从nonroot cell客户机流向root cell客户机为网络上行。
其中,root cell客户机及non root cell客户机通信通道的终端编程接口均被设计为PCI设备接口,以便分区操作系统通过初始化阶段的PCI设备扫描发现。
其中,虚拟机监控器在两个客户机之间建立通信通道时,首先在两个客户机分区操作系统的地址空间中分别分配一片虚拟内存区域,并在虚拟机监控器中分配一片与虚拟内存区域大小相同的共享内存作为供两个客户机的虚拟内存区域映射的可读写物理页面。
其中,虚拟机监控器在两个客户机之间建立通信通道时,同时为PCI设备提供两个额外的状态寄存器,一个用于写入本客户机分区的状态,另一个用于读取远程客户机分区写入的状态;每个客户机及时更新本地客户机分区状态寄存器,并通过读取另一个状态寄存器确认另一个客户机分区的数据是否写入完成。
其中,两个客户机的PCI设备中增加描述类型为“JAILHOUSE_PCI_TYPE_IVSHMEM”的描述符,同时,该描述符中“shmem_region_start”与共享内存的物理地址保持一致。
其中,所述root cell客户机及non root cell客户机上均实现有一个虚拟网卡驱动,通过在root cell客户机及non root cell客户机的内核配置中增加内核对PCI总线和uio驱动的支持的配置以实现各自的虚拟网卡驱动的操作系统层面支持。
其中,虚拟网卡驱动的实现方式如下:首先向内核中注册与PCI设备同名的虚拟网卡驱动,然后内核调用虚拟网卡驱动的probe函数,在probe函数匹配过程中,通过PCI扫描发现PCI设备接口,根据bdf描述符读取PCI设备的配置空间并为其分配相应的资源,这些资源包括中断资源和内存映射空间,内核拿到上述资源并将上述资源注册为一个网络设备net_device;虚拟网卡驱动的实现包括root cell客户机及non root cell客户机各自的net_device设备及二者之间的共享内存。
其中,root cell客户机及non root cell客户机分区所注册的网络设备net_device均包括一个虚拟网卡驱动的发送缓冲区和接收缓冲区,作为root cell客户机及nonroot cell客户机与共享内存的数据传输接口,以及虚拟网卡进行算法调度的内存空间;root cell客户机及non root cell客户机各自的虚拟网卡以共享内存作为虚拟网卡通信的物理介质,在共享内存中完成两个客户机系统的网络帧交换。
其中,网络下行数据传递流程如下:root cell客户机的应用层通过socket接口把数据交给TCP/IP协议栈,TCP/IP协议栈根据互联网协议地址-IP地址及地址解析协议-ARP信息将数据交给root cell客户机的虚拟网卡驱动,root cell客户机的虚拟网卡驱动将网络解包好的网络帧,通过直接存储器访问搬移到共享内存的网络下行队列中,共享内存数据就绪以后,root cell客户机的虚拟网卡驱动通过MSI-X中断通知non root cell客户机;
网络上行数据传递流程与之相同,方向相反。
其中,当虚拟机监控器通过jailhouse将主机隔离为多组两两相对的root cell客户机及non root cell客户机时,多组客户机分区之间通过如下方法实现数据的调度:
在驱动初始化时完成中断向量的绑定,通过arm64 gic模块的中断路由设置,将中断向量与CPU一一绑定;
将共享内存的两个上下行通道划分为多个队列,队列的维护依靠内存管理程序,实现队列动态分配和释放,队列出队和入队操作;
根据网络帧的五元组:源IP地址、目的IP地址、协议号、源端口、目的端口,唯一确定一个数据流,一个数据流对应收发数据的两端及协议类型;
通过哈希函数和网络五元组计算出哈希值,再由哈希值确定网卡队列;
确定队列以后,按照负载均衡的原则交给不同的CPU处理。
本发明提供的虚拟监控器下Linux虚拟网卡的实现方法,充分利用jailhouse的共享内存通信模型(ivshmem )和Linux系统OSI模型结合实现了Linux的虚拟网卡驱动,可用于虚拟机监控器下多个Linux客户机之间的网络通信,通过虚拟网卡的方式不需要带来额外的硬件消耗。
附图说明
图1:本发明的虚拟监控器下Linux虚拟网卡的实现方法的Hypervisor ivshmem共享内存模型。
图2:本发明的虚拟监控器下Linux虚拟网卡的实现方法Linux虚拟网卡原理图。
图3:本发明的虚拟监控器下Linux虚拟网卡的实现方法的虚拟网卡调度算法流程图。
具体实施方式
为了对本发明的技术方案及有益效果有更进一步的了解,下面结合附图详细说明本发明的技术方案及其产生的有益效果。
本发明旨在解决虚拟化下不同客户机之间的网络通信问题。在不使用硬件网卡的情况下,通过增加一个虚拟网卡,来实现客户机之间的通络通信功能。这个虚拟网卡首先不能因为虚拟化操作带来较大的时延,以保证系统的实时性。另一方面可以满足多协议、多数据流和大流量的性能要求。
基于Linux网络协议栈良好的组织结构,本发明直接引用Linux系统的TCP/IP参考模型。TCP/IP协议在一定程度上参考了OSI的体系结构,它们被简化为应用层、传输层、网络层、数据链路层、物理层五个层次。本发明直接引用了Linux系统的应用层、传输层、网络层协议,同时,在数据链路层编写一个虚拟的网卡来实现网络功能,从而省略了物理层的使用。
虚拟网卡是通过客户机之间的共享内存作为通信通道,使用虚拟 MSI-X 中断实现信号通知机制。Hypervisor为共享内存与信号机制构建客户机通信的通道。这是虚拟网卡基本通信功能的实现。为了满足多核系统间多协议、多数据流和大流量的性能要求,这里引入软件RSS技术。RSS(Receive Side Scaling)是一种能够在多处理器系统下使接收报文在多个CPU之间高效分发的网卡驱动技术。正常这项技术通常是网卡硬件来实现的,本发明结合虚拟网卡的特点,使用软件模拟RSS,最终达到虚拟网卡的性能要求。
虚拟机监控器提供了一个共享内存通信的模型,我们将这个模型稍微的进行了修改以符合我们虚拟网卡的需求。虚拟网卡的实现需要内核和虚拟机监控器两个部分来完成。首先需要在内核中注册一个网卡驱动程序,相应的网卡调度算法RSS也在这里实现。另外还需要共享内存作为虚拟网卡最终通信使用的介质,两个系统最终在共享内存这里完成了数据交互。
具体实现方式如下:
本发明选用ARM64架构作为硬件平台。ARM64安装Linux系统,Hypervisor使用jailhouse。Jailhouse诞生于西门子,自2013年11月起作为一个自由软件项目(GPLv2)开发。与KVM改造方案不同的是,Hypervisor方案本身并不改造Linux内核,而是利用Linux系统的开放性,增加一个或多个实时操作系统,实现多系统在一个多核处理器上运行。Jailhouse是一个基于Hypervisor虚拟化技术的Linux静态分区管理程序,其可以运行裸机应用程序或RTOS应用程序。这里分区的概念等同于传统意义上的客户机。jailhouse中实现了相对完善的IVSHMEM(共享内存)模型,将该共享内存模拟成了一个虚拟PCI设备。这样在客户机Linux中,通过PCI扫描便可以得到这个设备。本发明通过jailhouse将ARM64主机隔离为两个分区,两个分区客户机中都运行Linux系统。其中原来主机Linux系统转变为jailhouse下的root cell Linux系统,另外一个分区是non root cell Linux系统。为了描述方便,这里我们规定数据从root cell到non root cell称为网络下行,反之则为网络上行。共享内存区域被分成两个通道,分别对应图2中的网络下行队列和网络上行队列。这两个队列用于两个分区之间网络帧通信通道。
1、jailhouse分区通信模型及配置使用
jailhouse实现了分区的相互隔离,但在实际应用过程中,分区间也需进行通信。为此,Jailhouse 为分区间使用共享内存与信号机制构建分区间通信的通道。具体来说,一个通道将两个分区 1: 1 对应地连接起来,不存在“1:N”或“N:M”的连接范式。对每个分区,通信通道的终端编程接口被设计为 PCI 设备接口(如图1所示),以便分区客户操作系统通过初始化阶段的 PCI设备扫描发现。PCI设备的实现参考 ivshmem 设备模型,使用虚拟MSI-X 中断实现信号通知机制。为了实现分区间设备状态的同步,通道 PCI设备提供了两个额外的 MMIO 状态寄存器,一个用于写入本地分区状态,另一个用于读取远程分区写入的状态。CPU及时更新本地分区状态寄存器 ,并通过读取远程分区状态寄存器来确认是否写入完成。
在两个分区之间建立通信通道时,虚拟机监控器首先需要在两个分区操作系统的地址空间中分别分配一片虚拟内存区域,然后在虚拟机监控器(Hypervisor)中分别分配一片与之大小相同的可读写物理页面(即共享内存)并进行映射(虚拟地址是linux操作系统来分配,真实的物理内存空间在虚拟机监控器Hypervisor中)。两个分区的客户机系统有自己的地址空间,这是操作系统的逻辑地址空间/虚拟地址空间,共享内存为实际的物理空间。两个客户机的操作系统如果需要访问这块物理空间,需要在各自的虚拟地址空间中分别分配出一片虚拟地址空间,然后将这块物理空间映射到各自的虚拟地址空间,图1中的“memory map”即表示的映射操作,然后两个客户机的操作系统就可以通过各自的虚拟地址空间访问此共享内存,从而通过共享内存完成数据交互。两个共享内存分别用于下行网络帧和上行网络帧的处理。分区配置中需相应描述类型为“JAILHOUSE_PCI_TYPE_IVSHMEM”的PCI 设备,并且该PCI 设备描述中“shmem_region_start”与共享内存的物理地址需保持一致,以便分区客户操作系统初始化时能够发现并建立通道设备。JAILHOUSE_PCI_TYPE_IVSHMEM”和“shmem_region_start”是jailhouse共享内存demo配置的两个参数。JAILHOUSE_PCI_TYPE_IVSHMEM用于告诉分区客户机系统,这块内存是一块PCI设备的共享内存。shmem_region_start是共享内存的起始位置,需要在代码中把这个参数告诉PCI设备,这样两个PCI设备就约定好了共享内存的起始地址,这是通信的前提。两个分区之间的通道连接是通过两端使用相同 PCI 标识号( 16 位“总线:设备:功能”编码)设备进行配对完成的。
2、Linux虚拟网卡实现流程
如图2所示,在Linux侧实现一个虚拟网卡驱动。以网络驱动的数据链路层为界限,链路层上是Linux内核完整的TCP/IP协议栈,链路层负责将共享内存的数据进行链路层的封装。要实现这个虚拟的网络驱动,要依赖于内核的PCI总线和uio驱动的支持,所以我们需要在内核配置中增加这两个配置选项。虚拟网卡驱动的实现方式如下:首先向内核中注册与PCI设备同名的虚拟网卡驱动,然后内核调用虚拟网卡驱动的probe函数,在probe函数匹配过程中,便可以通过PCI扫描发现这个PCI设备。根据bdf描述符读取PCI设备的配置空间,并为其分配对应的资源,包括中断资源和内存映射空间。最后内核拿到这些硬件资源以后,需要把这些资源注册为一个网络设备即net_device。每一个net_device设备包括一个Txbuffer 和Rx buffer,作为网卡驱动的发送缓冲区和接收缓冲区,它们是客户机和共享内存通信的接口,同时也是虚拟网卡进行算法调度的内存空间(网络调度算法RSS在这里实现)。共享内存作为虚拟网卡通信的物理介质,数据最终在这里完成发送和接收。虚拟网卡的实现包括net_device设备及共享内存。net_device设备的Tx buffer 和Rx buffer是net_device中的两个内存空间,为与共享内存独立的另外两个物理空间,Tx buffer 和Rxbuffer与共享内存通过DMA(直接存储器)进行数据的搬运和交互,以使Tx buffer 和Rxbuffer作为中间媒介完成客户机内核协议栈和共享内存的交互。
当Linux发送网络下行数据时,应用层通过socket接口把数据交给TCP/IP协议栈,协议栈根据IP地址(互联网协议地址)和ARP(地址解析协议)信息等交给Linux的虚拟网卡。虚拟网卡将网络解包好的网络帧,通过DMA 搬移到共享内存的网络下行队列中。共享内存数据就绪以后,虚拟网卡通过MSI-X中断通知non root cell客户机,non root cell客户机从共享内存的网络下行队列中拿取相应的数据。网络上行数据,流程相同,但是数据流向相反。
其中,IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址。
DMA(直接存储器访问)是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于CPU的大量中断负载。否则,CPU需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU对于其他的工作来说就无法使用。
3、Linux虚拟网卡调度算法(模拟RSS)
当两个分区系统使用虚拟网卡进行大流量的数据传输时,会有大量的数据包缓存到Tx buffer和Rx buffer,进而写到共享内存的网络下行队列和上行队列中去。而由于多核CPU的并发运行以及TCP/IP协议栈的延时,导致这些网络包在队列中的排序错乱甚至丢失。而我们期望的是两个分区的socket之间是一一对应的,并按照发送顺序进行队列排序和数据接收。否则网卡接收到的数据就是错乱的。调度算法的第一个目的就是要保证共享内存队列中数据流的正确。另外,当有大量的数据吞吐时,共享内存队列数据的处理需要均衡分配给每个CPU,这样才能保证系统的正常运行。如果我们不加以调度,把队列数据分给一个CPU处理,那就会出现这个CPU占有率过高,而其他CPU空闲的问题。因此,本发明另外提供一种基于上述虚拟网卡实现方法的调度算法,该算法就是阐述在虚拟网卡驱动中,CPU怎样去处理这些数据包,并最终怎样在共享内存中处理这些网卡队列的。
随着网络IO的带宽的不断提升,多队列网卡最初用于解决IO QoS(quality ofservice)问题。多队列网卡技术在多核CPU上有两种实现方案,一是将所有队列指定到同一个核上。这样虽然避免了数据包乱序的问题,但是由于处理器的限制,单个核的利用率达到最大时就会限制网络的传输,使得网卡性能降低。另一种方案是,将网卡队列以负载均衡的方式绑定到CPU不同的核上,但是需要保证的是同一个队列只能绑定到一个核上。这样才能保证不会出现数据乱序的问题。这便是RSS要实现的目的。通常这项技术需要依赖于网卡硬件的支持。本发明是将该算法的硬件实现转变成了虚拟网卡的软件实现,如图3所示,本发明的调度方法通过如下步骤实现:
(1)首先在驱动初始化时完成中断向量的绑定。通过arm64 gic模块的中断路由设置,将中断向量与CPU一一绑定。
(2)将共享内存的两个上下行通道划分为多个队列。队列的维护依靠内存管理程序,实现队列动态分配和释放,队列出队和入队等操作。
(3)根据网络帧的五元组,源IP地址、目的IP地址、协议号、源端口、目的端口,我们可以唯一确定一个数据流。一个数据流对应收发数据的两端及协议类型。
(4)通过哈希函数和网络五元组计算出哈希值,再由哈希值确定网卡队列。
(5)确定队列以后,需要按照负载均衡的原则交给不同的CPU处理(同一个队列必须由同一个CPU处理,否则会造成数据乱序)。方法是通过触发与该CPU绑定的中断向量,最终使指定CPU在中断程序中处理相应队列。
本发明的有益效果如下:
1、本发明基于ARM64平台,充分利用jailhouse的共享内存通信模型(ivshmem )和Linux系统OSI模型结合实现了Linux的虚拟网卡驱动,创新的使用了软件模拟硬件RSS技术,用于虚拟网卡的调度算法。
2、本发明用于虚拟机监控器下多个Linux客户机之间的网络通信,通过虚拟网卡的方式不需要带来额外的硬件消耗。基于上述调度算法的实现,可以满足大流量、多协议、多数据流的网络通信,同时各CPU上负载均衡,大大降低了系统开销。
虽然本发明已利用上述较佳实施例进行说明,然其并非用以限定本发明的保护范围,任何本领域技术人员在不脱离本发明的精神和范围之内,相对上述实施例进行各种变动与修改仍属本发明所保护的范围,因此本发明的保护范围以权利要求书所界定的为准。

Claims (10)

1.虚拟监控器下Linux虚拟网卡的实现方法,其特征在于:由虚拟机监控器通过jailhouse将主机隔离为两个分区:root cell客户机及non root cell客户机,并通过jailhouse为root cell客户机及non root cell客户机之间的共享内存及信号机制构建通信通道;root cell客户机及non root cell客户机上均运行Linux系统,其中,数据从rootcell客户机流向non root cell客户机为网络下行,从non root cell客户机流向rootcell客户机为网络上行。
2.如权利要求1所述的虚拟监控器下Linux虚拟网卡的实现方法,其特征在于:rootcell客户机及non root cell客户机通信通道的终端编程接口均被设计为PCI设备接口,以便分区操作系统通过初始化阶段的PCI设备扫描发现。
3.如权利要求2所述的虚拟监控器下Linux虚拟网卡的实现方法,其特征在于:虚拟机监控器在两个客户机之间建立通信通道时,首先在两个客户机分区操作系统的地址空间中分别分配一片虚拟内存区域,并在虚拟机监控器中分配一片与虚拟内存区域大小相同的共享内存作为供两个客户机的虚拟内存区域映射的可读写物理页面。
4.如权利要求3所述的虚拟监控器下Linux虚拟网卡的实现方法,其特征在于:虚拟机监控器在两个客户机之间建立通信通道时,同时为PCI设备提供两个额外的状态寄存器,一个用于写入本客户机分区的状态,另一个用于读取远程客户机分区写入的状态;每个客户机及时更新本地客户机分区状态寄存器,并通过读取另一个状态寄存器确认另一个客户机分区的数据是否写入完成。
5.如权利要求3所述的虚拟监控器下Linux虚拟网卡的实现方法,其特征在于:两个客户机的PCI设备中增加描述类型为“JAILHOUSE_PCI_TYPE_IVSHMEM”的描述符,同时,该描述符中“shmem_region_start”与共享内存的物理地址保持一致。
6.如权利要求3所述的虚拟监控器下Linux虚拟网卡的实现方法,其特征在于:所述root cell客户机及non root cell客户机上均实现有一个虚拟网卡驱动,通过在rootcell客户机及non root cell客户机的内核配置中增加内核对PCI总线和uio驱动的支持的配置以实现各自的虚拟网卡驱动的操作系统层面支持。
7.如权利要求6所述的虚拟监控器下Linux虚拟网卡的实现方法,其特征在于:虚拟网卡驱动的实现方式如下:首先向内核中注册与PCI设备同名的虚拟网卡驱动,然后内核调用虚拟网卡驱动的probe函数,在probe函数匹配过程中,通过PCI扫描发现PCI设备接口,根据bdf描述符读取PCI设备的配置空间并为其分配相应的资源,这些资源包括中断资源和内存映射空间,内核拿到上述资源并将上述资源注册为一个网络设备net_device;虚拟网卡驱动的实现包括root cell客户机及non root cell客户机各自的net_device设备及二者之间的共享内存。
8.如权利要求7所述的虚拟监控器下Linux虚拟网卡的实现方法,其特征在于:rootcell客户机及non root cell客户机分区所注册的网络设备net_device均包括一个虚拟网卡驱动的发送缓冲区和接收缓冲区,作为root cell客户机及non root cell客户机与共享内存的数据传输接口,以及虚拟网卡进行算法调度的内存空间;root cell客户机及nonroot cell客户机各自的虚拟网卡以共享内存作为虚拟网卡通信的物理介质,在共享内存中完成两个客户机系统的网络帧交换。
9.如权利要求8所述的虚拟监控器下Linux虚拟网卡的实现方法,其特征在于:网络下行数据传递流程如下:root cell客户机的应用层通过socket接口把数据交给TCP/IP协议栈,TCP/IP协议栈根据互联网协议地址-IP地址及地址解析协议-ARP信息将数据交给rootcell客户机的虚拟网卡驱动,root cell客户机的虚拟网卡驱动将网络解包好的网络帧,通过直接存储器访问搬移到共享内存的网络下行队列中,共享内存数据就绪以后,root cell客户机的虚拟网卡驱动通过MSI-X中断通知non root cell客户机;
网络上行数据传递流程与之相同,方向相反。
10.如权利要求1所述的虚拟监控器下Linux虚拟网卡的实现方法,其特征在于:当虚拟机监控器通过jailhouse将主机隔离为多组两两相对的root cell客户机及non root cell客户机时,多组客户机分区之间通过如下方法实现数据的调度:
在驱动初始化时完成中断向量的绑定,通过arm64 gic模块的中断路由设置,将中断向量与CPU一一绑定;
将共享内存的两个上下行通道划分为多个队列,队列的维护依靠内存管理程序,实现队列动态分配和释放,队列出队和入队操作;
根据网络帧的五元组:源IP地址、目的IP地址、协议号、源端口、目的端口,唯一确定一个数据流,一个数据流对应收发数据的两端及协议类型;
通过哈希函数和网络五元组计算出哈希值,再由哈希值确定网卡队列;
确定队列以后,按照负载均衡的原则交给不同的CPU处理。
CN202211429856.1A 2022-10-17 2022-11-16 虚拟监控器下Linux虚拟网卡的实现方法 Active CN115664892B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN202211263952 2022-10-17
CN2022112639523 2022-10-17

Publications (2)

Publication Number Publication Date
CN115664892A true CN115664892A (zh) 2023-01-31
CN115664892B CN115664892B (zh) 2023-03-28

Family

ID=85020689

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211429856.1A Active CN115664892B (zh) 2022-10-17 2022-11-16 虚拟监控器下Linux虚拟网卡的实现方法

Country Status (1)

Country Link
CN (1) CN115664892B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116719613A (zh) * 2023-08-10 2023-09-08 麒麟软件有限公司 基于虚拟监控器实现Linux下PCIe物理设备隔离的方法
CN116737322A (zh) * 2023-08-10 2023-09-12 麒麟软件有限公司 虚拟机同时支持PCIe虚拟设备和物理设备的方法
CN117421096A (zh) * 2023-12-19 2024-01-19 麒麟软件有限公司 基于jailhouse虚拟机监控器SMMU使用方法
CN117453299A (zh) * 2023-12-25 2024-01-26 南京沁恒微电子股份有限公司 一种应用态网卡驱动方法及其装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080005297A1 (en) * 2006-05-16 2008-01-03 Kjos Todd J Partially virtualizing an I/O device for use by virtual machines
WO2012044700A1 (en) * 2010-10-01 2012-04-05 Huawei Technologies Co., Ltd. System and method for controlling the input/output of a virtualized network
CN103399812A (zh) * 2013-07-22 2013-11-20 西安电子科技大学 基于Xen硬件虚拟化的磁盘文件操作监控系统及监控方法
WO2019180675A1 (en) * 2018-03-22 2019-09-26 Trulyprotect Oy Systems and methods for hypervisor-based protection of code
CN112667420A (zh) * 2021-01-18 2021-04-16 科东(广州)软件科技有限公司 实现异构系统内部通信的方法、装置、设备及存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080005297A1 (en) * 2006-05-16 2008-01-03 Kjos Todd J Partially virtualizing an I/O device for use by virtual machines
WO2012044700A1 (en) * 2010-10-01 2012-04-05 Huawei Technologies Co., Ltd. System and method for controlling the input/output of a virtualized network
CN103399812A (zh) * 2013-07-22 2013-11-20 西安电子科技大学 基于Xen硬件虚拟化的磁盘文件操作监控系统及监控方法
WO2019180675A1 (en) * 2018-03-22 2019-09-26 Trulyprotect Oy Systems and methods for hypervisor-based protection of code
CN112667420A (zh) * 2021-01-18 2021-04-16 科东(广州)软件科技有限公司 实现异构系统内部通信的方法、装置、设备及存储介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
郭子伦: "基于微内核的嵌入式虚拟化技术的研究与实现" *
陆笛: "Jailhouse对Linux动态执行路径的影响研究" *
陈剑飞 ,刘胜旺: "嵌入式虚拟化实时系统的研究与应用" *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116719613A (zh) * 2023-08-10 2023-09-08 麒麟软件有限公司 基于虚拟监控器实现Linux下PCIe物理设备隔离的方法
CN116737322A (zh) * 2023-08-10 2023-09-12 麒麟软件有限公司 虚拟机同时支持PCIe虚拟设备和物理设备的方法
CN116719613B (zh) * 2023-08-10 2023-10-31 麒麟软件有限公司 基于虚拟监控器实现Linux下PCIe物理设备隔离的方法
CN116737322B (zh) * 2023-08-10 2023-10-31 麒麟软件有限公司 虚拟机同时支持PCIe虚拟设备和物理设备的方法
CN117421096A (zh) * 2023-12-19 2024-01-19 麒麟软件有限公司 基于jailhouse虚拟机监控器SMMU使用方法
CN117421096B (zh) * 2023-12-19 2024-04-05 麒麟软件有限公司 基于jailhouse虚拟机监控器SMMU使用方法
CN117453299A (zh) * 2023-12-25 2024-01-26 南京沁恒微电子股份有限公司 一种应用态网卡驱动方法及其装置
CN117453299B (zh) * 2023-12-25 2024-03-01 南京沁恒微电子股份有限公司 一种应用态网卡驱动方法及其装置

Also Published As

Publication number Publication date
CN115664892B (zh) 2023-03-28

Similar Documents

Publication Publication Date Title
CN115664892B (zh) 虚拟监控器下Linux虚拟网卡的实现方法
CN109976925B (zh) 一种基于混合多系统核间实时通信的方法和系统
CN108243118B (zh) 转发报文的方法和物理主机
US9935899B2 (en) Server switch integration in a virtualized system
US8014413B2 (en) Shared input-output device
US7996569B2 (en) Method and system for zero copy in a virtualized network environment
US7941812B2 (en) Input/output virtualization through offload techniques
US8225332B2 (en) Method and system for protocol offload in paravirtualized systems
US11321256B2 (en) Persistent kernel for graphics processing unit direct memory access network packet processing
CN115599502B (zh) 基于虚拟机监控器的rtos网络共享方法
US10909655B2 (en) Direct memory access for graphics processing unit packet processing
US12026103B1 (en) Dynamic resource management of network device
US9918270B2 (en) Wireless interface sharing
US11036649B2 (en) Network interface card resource partitioning
Abbasi et al. A performance comparison of container networking alternatives
CN115437977A (zh) 跨总线存储器映射
CN104378161A (zh) 一种基于AXI4总线架构的FCoE协议加速引擎IP核
EP4374254A1 (en) Communications for workloads
US10353857B2 (en) Parallel processing apparatus and method for controlling communication
US20240211392A1 (en) Buffer allocation
US20230108461A1 (en) Virtual device assignment framework
US11513986B1 (en) DMA engine that generates an address-less memory descriptor that does not include a memory address for communicating with integrated circuit device
Bie et al. Virtio
CN118250284A (zh) 一种通过rdma实现跨主机的高速转存方法

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
GR01 Patent grant
GR01 Patent grant