CN107678835B - 一种数据传输方法及*** - Google Patents
一种数据传输方法及*** Download PDFInfo
- Publication number
- CN107678835B CN107678835B CN201710923276.0A CN201710923276A CN107678835B CN 107678835 B CN107678835 B CN 107678835B CN 201710923276 A CN201710923276 A CN 201710923276A CN 107678835 B CN107678835 B CN 107678835B
- Authority
- CN
- China
- Prior art keywords
- processing module
- data channel
- data
- virtual machine
- data packet
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45579—I/O management, e.g. providing access to device drivers or storage
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请实施例公开了一种数据传输方法及***,该方法应用于第一处理模块,包括:访问第一数据通道;第一数据通道位于共享内存区域,用于存储第二处理模块写入的第一数据包;当第一数据通道中存储有第一数据包时,获取第一数据通道中的第一数据包;根据获取到的第一数据包所携带的接收方信息,发送该第一数据包。第一处理模块和第二处理模块可以分别运行于虚拟机和宿主机,使得虚拟机和宿主机之间的数据传输过程无需执行超级调用和终端,避免了超级调用和终端引起的虚拟机与宿主机之间和虚拟机上的上下文切换,提高了CPU的利用率和数据传输的效率,进而显著提高虚拟机的网络通信效率及性能。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种数据传输方法及***。
背景技术
Virtio半虚拟化网卡是目前基于内核的虚拟机(Kernel-based VirtualMachine,KVM)平台虚拟网卡的主流类型。在由Vritio半虚拟化网卡连接构成的虚拟网络***中,虚拟网络***中维护了一个vring队列的数据结构,以进行数据的收发。在数据收发过程中,虚拟机的Virtio-net前端驱动将携带待传输的数据的读写请求写入vring队列后,执行一个kick操作,通过Virtio-pci硬件寄存器通知宿主机。宿主机截获到该通知后,从vring队列获取该读写请求并将处理结果添加到vring队列后,通过Virtio-pci硬件寄存器发送中断给该虚拟机。
在上述数据收发过程中,虚拟机需要执行一次超级调用(hypercall)操作从虚拟机切换到虚拟机监控程序,引起虚拟机和宿主机之间的上下文切换;再从虚拟机监控程序切换回虚拟机并触发中断,虚拟机从用户态切换至内存态,引起虚拟机的上下文切换。当需传输的数据包数量较多时,反复执行超级调用和中断,引起的虚拟机和宿主机之间以及虚拟机从用户态切换至内存态的上下文切换,会严重影响数据包的转发性能。
发明内容
有鉴于此,本申请实施例提供了一种数据传输方法及***,能够解决现有技术中待传输的数据包较多时转发性能下降的问题。
本申请实施例提供的一种数据传输方法,应用于第一处理模块,所述方法,包括:
访问第一数据通道;所述第一数据通道位于共享内存区域,用于存储第二处理模块写入的第一数据包;
当所述第一数据通道中存储有第一数据包时,获取所述第一数据通道中的第一数据包;
根据获取到的第一数据包所携带的接收方信息,发送该第一数据包。
可选的,所述方法,还包括:
将第二数据包写入第二数据通道,以便所述第二处理模块从所述第二数据通道获取该第二数据包;所述第二数据通道位于共享内存区域。
可选的,当所述第一处理模块运行于宿主机时,所述访问第一数据通道,之前还包括:
创建所述共享内存区域;
利用内存映射机制,配置所述共享内存区域,以便所述第一处理模块访问所述共享内存区域;
其中,所述共享内存区域包括所述第一数据通道、所述第二数据通道和元数据存储区域,所述元数据存储区域用于存储所述第一数据通道和所述第二数据通道的队列信息。
可选的,当所述第一处理模块运行于虚拟机时,所述访问第一数据通道,之前还包括:
激活虚拟PCI设备;
将所述虚拟PCI设备的内存地址映射至所述共享内存区域;所述共享内存区域由宿主机创建,包括所述第一数据通道、所述第二数据通道和元数据存储区域,所述元数据存储区域用于存储所述第一数据通道和所述第二数据通道的队列信息;
创建并注册虚拟网卡设备;
将所述虚拟网卡的MAC地址和ID以及所述虚拟机的UUID写入所述元数据存储区域。
可选的,所述方法,还包括:
当所述第一数据通道中未存储第一数据包时,在预设时间段T后,返回所述访问第一数据通道。
可选的,
所述共享内存区域的大小为2kkb;
所述第一数据通道的大小Sfifo1为2mkb;
所述第二数据通道的大小Sfifo2为2nkb;
其中,k、m和n均为正整数,S=Smeta+Sfifo1+Sfifo2,2k-1<S≤2k,Smeta为所述元数据存储区域的大小。
可选的,所述宿主机包括:至少一个第一CPU核心和至少一个第二CPU核心;
当所述第一处理模块运行于宿主机时,所述至少一个第一CPU核心,用于运行所述第一处理模块;所述第二CPU核心,用于运行虚拟机;
当所述第二处理模块运行于宿主机时,所述至少一个第一CPU核心,用于运行所述第二处理模块;所述第二CPU核心,用于运行虚拟机。
本申请实施例提供的一种数据传输***,包括:第一处理模块和第二处理模块;
所述第一处理模块,用于访问第一数据通道,当所述第一数据通道中存储有第一数据包时,获取所述第一数据通道中的第一数据包;还用于根据所述第一数据包携带的接收方信息,发送所述第一数据包;
其中,所述第一数据通道位于共享内存区域;
所述第二处理模块,用于将待传输的第一数据包写入所述第一数据通道。
可选的,所述第一处理模块,还用于当所述第一数据通道中未存储第一数据包时,再次访问所述第一数据通道。
本申请实施例还提供了一种终端,所述终端包括:处理器以及存储器;所述存储器,用于存储程序代码,并将所述程序代码传输给所述处理器;所述处理器,用于调用存储器中的指令执行如上述实施例所述的数据传输方法。
本申请实施例还提供了一种计算机可读存储介质,其特征在于,所述机算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备执行如上述实施例所述的数据传输方法。
本申请实施例还提供了一种计算机程序产品,所述计算机程序产品在终端设备上运行时,使得所述终端设备执行如上述实施例所述的数据传输方法。
与现有技术相比,本申请至少具有以下优点:
在本申请实施例中,通过分别运行于宿主机和虚拟机的第一处理模块和第二处理模块实现了二者之间的数据传输,第一处理模块和第二处理模块之间利用共享内存进行通信。具体的,第一处理模块利用轮询的机制自行访问位于共享内存区域的第一数据通道,第一数据通道用于存储第二处理模块写入的第一数据包。当第一数据通道中存储有第二处理模块写入的第一数据包时,第一处理模块获取该第一数据包,并根据该第一数据包携带的接收方信息,发送该第一数据包,完成数据的传输。第一处理模块和第二处理模块之间的数据传输过程,使得虚拟机和宿主机之间的数据传输过程无需执行超级调用,避免了超级调用引起的虚拟机与宿主机之间的上下文切换,提高了中央处理器(Central ProcessingUnit,CPU)的利用率和数据传输的效率,进而显著提高虚拟机的网络通信效率及性能。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1为本申请实施例提供的一种数据传输方法的应用场景示意图;
图2为本申请实施例提供的一种数据传输方法的流程示意图;
图3为本申请具体实施例提供的一种共享内存区域的结构示意图;
图4为本申请具体实施例提供的一种数据传输方法的流程示意图;
图5为本申请具体实施例提供的另一种数据传输方法的流程示意图;
图6为本申请实施例提供的一种数据传输***的结构示意图;
图7为本申请实施例提供的一种终端的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了便于理解,下面先对本申请实施例涉及到的虚拟化技术进行介绍。
宿主机与虚拟机之间的虚拟化技术,一般理解上,是指在一个操作***之上模拟另一个操作***的执行环境。其中,虚拟机在计算机科学中的体系结构里是指一种特殊的软件,可以在计算机平台和终端用户之间创建一种操作环境,用户可以基于这个软件所创建的操作环境来运行软件。宿主机则是运行这一特殊软件的实体计算机***。
Virtio是KVM(Kernel-based Virtual Machine,基于内核的虚拟机)的虚拟环境下针对输入/输出(Input/Output,I/O)虚拟化的最主要的一个通用框架。Virtio半虚拟化网卡是目前KVM网卡的主流类型。
在Virtio网络虚拟化方案中,虚拟网络设备维护了一个vring队列的数据结构,以进行数据收发。虚拟机在进行网络输入输出时,Virtio-net前端驱动将携带待传输的数据的读写请求写入vring队列,然后通过Virtio-pci硬件寄存器通知宿主机,上述步骤称为kick操作。宿主机截获通知信息后,从vring队列获取该读写请求,完成数据的传输后,将处理结果添加到vring队列后,通过Virtio-pci硬件寄存器发送中断给虚拟机。从上述过程可以看出,虚拟机发送数据时,需要执行一次kick操作,通过超级调用操作从虚拟机切换到虚拟机监控程序KVM,引起虚拟机和宿主机之间的上下文切换;再从虚拟机监控程序切换回虚拟机并触发中断,虚拟机从用户态切换至内存态,引起虚拟机的上下文切换。当网络数据包数量特别多时,宿主机CPU反复进行超级调用和中断,引起频繁的上下文切换,严重影响数据包的转发性能。
为此,本申请实施例提供了一种用于虚拟机的数据传输方法及装置,利用共享内存技术,在收发包过程中摒弃了超级调用和中断,避免了上下文切换造成的传输效率下降,提高了CPU的利用效率,能够显著提高虚拟机的网络通信性能。
基于上述思想,为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。
参见图1,该图示出了本申请实施例的具体应用场景。本申请实施例提供的数据传输方法及装置可以应用于图1中虚拟机与宿主机间的通信,还可以应用于同一虚拟网络中的多台虚拟机之间的通信,以及,虚拟机与外网设备(如服务器、客户端、不同虚拟网络中的宿主机和虚拟机等)间的通信。
在本申请实施例中,该数据传输方法具体用于实现第一处理模块和第二处理模块之间的数据传输,第一处理模块和第二处理模块可以分别运行于宿主机和虚拟机上。具体的,可以是第一处理模块运行于宿主机、第二处理模块运行于虚拟机,也可以是第一处理模块运行于虚拟机、第二处理模块运行于宿主机,本申请实施例对此不做具体限定。下面对本申请实施例提供的数据传输方法进行详细的说明。
参见图2,该图为本申请实施例提供的一种数据传输方法的流程示意图。该数据传输方法,具体包括以下步骤S201-S203。
S201:第一处理模块访问第一数据通道。
在本申请实施例中,第一数据通道位于共享内存区域,用于存储第二处理模块写入的第一数据包。
这里需要说明的是,共享内存区域是内存中第一处理模块和第二处理模块均能够访问的一段内存区域,可以利用操作***中预留的一定数量的内存页(hugepage)创建得到。可以理解的是,在操作***中,一般以内存页为单位对内存进行管理。上述操作***中预留的一定数量的内存页即为操作***中预留的一定大小的未配置的内存。
由于第一数据通道位于第一处理模块和第二处理模块均能够访问的共享内存区域,则第二处理模块可以将待传输的第一数据包写入该共享内存区域中的第一数据通道,第一处理模块可以通过对第一数据通道进行访问来获取第一数据通道中存储的第一数据包。下文将对具体如何创建共享内存区域以及共享内存区域的架构进行详细的说明,这里就不再重复说明。
S202:当第一数据通道中存储有第一数据包时,第一处理模块获取第一数据通道中的第一数据包。
在本申请实施例中,由于第一处理模块和第二处理模块的数据传输过程相互独立,第二处理模块写入第一数据之后不会触发第一处理模块进行数据的获取,而是由第一处理模块通过自行对第一数据通道进行访问去获取该第一数据包,不会引起上下文的切换,提高了CPU的利用率和数据传输的效率。
这里需要说明的是,当第一处理模块从第一数据通道中获取到第一数据包后,可以通过将第一数据通道相应的第一数据包删除,以防止重复对同一数据包的重复获取,造成数据传输错误。
S203:第一处理模块根据获取到的第一数据包所携带的接收方信息,发送该第一数据包。
作为一个示例,第一数据包的接收方可以是与第一处理模块运行于同一操作***中的其他模块,还可以是其他操作***(如服务器或终端设备上运行的操作***),这里不再一一列举。
为了实现双端的数据传输,在本申请实施例一些可能的实现方式中,该数据传输方法还包括如下步骤:
S204:第一处理模块将第二数据包写入第二数据通道,以便第二处理模块从第二数据通道获取该第二数据包。
类似的,该第二数据通道位于第一处理模块和第二处理模块均能够访问的共享内存区域。第二数据通道与第一数据通道类似,第二处理模块从第二数据通道获取第二数据包的方式与第一处理模块从第一数据通道获取第一数据包的方式类似,具体参见相关说明即可,这里不再赘述。
在本申请实施例中,通过分别运行于宿主机和虚拟机的第一处理模块和第二处理模块实现了二者之间的数据传输,第一处理模块和第二处理模块之间利用共享内存进行通信。具体的,第一处理模块利用轮询的机制自行访问位于共享内存区域的第一数据通道,第一数据通道用于存储第二处理模块写入的第一数据包。当第一数据通道中存储有第二处理模块写入的第一数据包时,第一处理模块获取该第一数据包,并根据该第一数据包携带的接收方信息,发送该第一数据包,完成数据的传输。第一处理模块和第二处理模块之间的数据传输过程,使得虚拟机和宿主机之间的数据传输过程无需执行超级调用,避免了超级调用引起的虚拟机与宿主机之间的上下文切换,提高了CPU的利用率和数据传输的效率,进而显著提高虚拟机的网络通信效率及性能。
在本申请实施例一些可能的实现方式中,由于第一处理模块和第二处理模块的数据传输过程相互独立,存在第一处理模块访问第一数据通道时,第二处理模块未将待传输的第一数据包写入第二数据通道的情况。当第一数据通道中未存储第一数据包时,第一处理模块在预设时间段T后,返回执行步骤S201,再次访问第一数据通道以及时获取第二处理模块写入的第一数据包。本领域技术人员可以根据实际情况,具体设定第一处理模块再次访问第一数据通道的间隔时间,即预设时间段T,这里不再列举。
类似的,为了及时获取第二处理模块写入的第一数据包,提高数据传输的效率,在本申请实施例可能的实现方式中,该数据传输方法在步骤S203之后,返回执行步骤S201,再次访问第一数据通道以及时获取第二处理模块写入的第一数据包。
下面对共享内存区域的结构进行详细的说明。图3示出了本申请具体实施例中共享内存区域的结构示意图。
共享内存区域,包括:第一数据通道100、第二数据通道200和元数据存储区域300。
第一数据通道100,用于存储第二处理模块写入的第一数据包。第一处理模块轮询第一数据通道100获取第二处理模块写入的第一数据包。第二处理模块至第一处理模块的数据传输,不会触发上下文切换,保证了数据传输的效率。
第二数据通道200,用于存储第一处理模块写入的第二数据包。第二处理模块轮询第二数据通道200获取第一处理模块写入的第二数据包。
在实际应用中,第一数据通道100和第二数据通道200均可以是先进先出(First-In-First-Out,FIFO)队列。
这里需要说明的是,由于第一处理模块和第二处理模块均能够访问共享内存区域,而用于两端数据传输的数据通道一般采用的先进先出(First-In-First-Out,FIFO)循环队列为单生产者-单消费者队列,只能用于单向通信,因此,在本申请实施例中,共享内存区域包括第一数据通道100和第二数据通道200这两个FIFO队列。
在本申请实施例可能的实现方式中,第一数据通道100和第二数据通道200中每个元素对应一个数据包存储结构pkt,pkt的长度大于或等于KVM***中所能传输的最大数据包长度。这样,第一数据通道100和第一数据通道200的队列中每个元素即为待传输的一个数据包,便于数据的传输。
元数据存储区域300,用于存储第一数据通道100和第二数据通道200的队列信息。
可以理解的是,第一数据通道100和第二数据通道200的队列信息,包括但不限于通道的总长度、剩余长度、队首游标和队尾游标等。
此外,为了保证数据传输的准确性,元数据存储区域300还用于存储对应的数据传输信息,该数据传输信息用于使第一处理模块准确的将对应的第二数据包传输至对应的第二处理模块。
具体的,数据传输信息,包括但不限于:虚拟机的通用唯一标识符(UniversallyUnique Identifier,UUID)、虚拟机对应的虚拟数据传输设备(如虚拟网卡)的标识(Identifier,ID)和该虚拟数据传输设备(虚拟网卡)的物理地址(MAC地址)等。
在实际的数据传输过程中,第一处理模块和第二处理模块在向共享内存区域写入数据和从共享内存区域读出数据时,均需对元数据存储区域300中第一数据通道100和第二数据通道200的队列信息进行相应的修改,以保证数据传输的可行性和准确性。另外,虚拟网卡的MAC地址等属性修改时,同样也需对元数据存储区域300中存储的相应内容进行适应性的修改,使得第一处理模块可以准确的将第二数据包写入接收该第二数据包的第二处理模块所对应的第二数据通道中。
在本申请实施例可能的实现方式中,为了提高第二数据通道100和第一数据通道200的工作效率,可以将第二数据通道100的大小设置为2nkb,第一数据通道200的大小设置为2mkb(n和m均为正整数,n和m可以相等也可以不相等),以避免FIFO实现中的除法运算。相应的,共享内存区域的大小可以设置为2kkb。
其中,k为正整数,2k-1<S≤2k,S=Smeta+Sfifo1+Sfifo2,Smeta为元数据存储区域的大小,Sfifo1为第一数据通道100的大小,Sfifo2为第二数据通道200的大小。
在一个应用场景中,共享内存区域由宿主机创建,每当宿主机为虚拟机创建一个虚拟数据传输设备(如虚拟网卡)时,都应当对应创建一个共享内存区域。当第一处理模块运行于宿主机时,步骤S201之前还包括创建共享内存区域的步骤:创建共享内存区域;利用内存映射机制,配置该共享内存区域,以便第一处理模块访问共享内存区域。
在实际应用中,宿主机中运行的第一处理模块创建并配置共享内存区域的具体流程如下第一步至第四步所述:
第一步,宿主机操作***启动时,预留一定数量的内存页(hugepage);
第二步,宿主机将预留的内存页挂载到一个空目录中,例如/mnt/hugepage;
第三步,宿主机在该空目录中创建一个空的文件,向该文件中写入任意字符,将其扩展到预设的大小(即上文中2kkb);
第四步,宿主机将扩展后的文件通过mmap***调用映射到宿主机的进程空间中,mmap***的返回值即第一共享内存区域在宿主机中的起始地址。
通过上述步骤,即可实现共享内存区域的创建和配置,共享内存区域在宿主机端通过mmap***调用映射到宿主机内存地址空间的普通文件。
在虚拟机端,共享内存区域是虚拟的IVSHMEM类型的PCI设备,当第一处理模块运行于虚拟机时,步骤S201之前还包括配置虚拟网卡的步骤,以使虚拟机利用共享内存区域完成数据包的收发:
在实际应用中,虚拟机中运行的第一处理模块在虚拟机启动时加载并初始化时,创建并配置虚拟网卡的具体流程如下第一步至第四步所述:
第一,激活IVSHMEM对应的PCI设备;
第二,将PCI设备的内存地址(即BAR2寄存器)映射到共享内存区域在内核地址空间,该内核地址空间的起始地址为共享内存区域在虚拟机中的起始地址;
第三,在PCI设备的总线上创建一个虚拟网卡设备,并将该虚拟网卡设备注册到操作***的内核网络协议栈中;
第四,将虚拟网卡的MAC地址和ID以及虚拟机的UUID写入元数据存储区域,以便于宿主机的数据传输。
需要说明的是,由于在虚拟机中预先将共享内存区域配置为虚拟PCI设备上的网卡设备,这样,在不修改虚拟机主机用户态程序的前提下,即可完成第一数据包的传输。
通过上述过程,即可完成对共享内存的构建及配置,以使第一处理模块通过轮询访问该共享内存区域实现数据的传输。
下面结合具体场景,以第一处理模块运行于宿主机、第二处理模块运行于虚拟机为例,对本申请实施例提供的数据传输方法进行详细的说明。
需要说明的是,在本实施例可能的实现方式中,宿主机包括:至少一个第一CPU核心和至少一个第二CPU核心;宿主机执行的方法应用于至少一个第一CPU核心;第二CPU核心,用于运行虚拟机。
在上述实施例提供的数据传输方法中,当第一处理模块运行于宿主机时,该第一处理模块运行于宿主机上一个或多个独立的CPU核心(即第一CPU核心)实现,该一个或多个独立的CPU核心(即第二CPU核心)上不运行虚拟机程序,以避免虚拟机程序占用过多CPU资源的情况所导致的数据传输效率下降的问题。也就是说,将宿主机的CPU核心不同时负责数据的收发以及虚拟机的运行,不仅保证了数据收发的效率,提高了数据传输的效率,还保证了虚拟机的运行效果和数据收发效率,整体提高了虚拟机网络通信的效率及性能。
参见图4,该图为本申请具体实施例提供的一种数据传输方法的流程示意图。
本实施例提供的数据传输方法,具体包括以下步骤S401-S403。
S401:宿主机访问第一数据通道。
需要说明的是,第一数据通道所位于的共享内存区域可以由宿主机根据操作***中预留的一定数量的内存页创建得到。虚拟机将待传输的第一数据包写入位于共享内存区域中后,宿主机即可通过访问第一数据通道中直接获取第一数据包,以完成数据的传输,该过程无需执行超级调用,避免了上下文切换所导致的传输效率下降的问题。
还需要说明的是,具体应用过程中,一台宿主机上有时运行有不止一台虚拟机。为了实现每台虚拟机与宿主机的数据传输,宿主机可以为每台虚拟机创建不同的共享内存区域用于数据的传输,每个共享内存区域均包括一个用于存储虚拟机写入的第一数据包的第一数据通道。虚拟机将待传输的第一数据包写入其对应的共享内存区域中的第一数据通道中,以便宿主机访问该第一数据通道获取该第一数据包。下面以宿主机上运行一台虚拟机为例进行说明,宿主机上运行多台虚拟机的情况与此类似,具体参见相关说明即可,这里不再一一列举。
在实际应用中,宿主机可以利用KVM***的IVSHMEM技术中,构建并得到第一共享内存区域。IVSHMEM的本质是一段共享内存。在虚拟机端,该共享内存区域是虚拟的IVSHMEM类型的外设部件互连标准(Peripheral Component Interconnect,PCI)设备,虚拟机通过访问该PCI设备实现对第一共享内存区域的访问。在宿主机端,该共享内存区域是一个通过mmap***调用映射到宿主机内存地址空间的普通文件,宿主机可以直接对该文件进行访问。可以理解的是,mmap是一种内存映射文件的方法,利用mmap函数可以将一个文件或者其它对象映射进内存,下面将具体说明共享内存区域的创建及配置方法,这里不再赘述。
由于虚拟机向第一数据通道写入第一数据包的过程独立于宿主机从第一数据通道中获取第一数据包,摒弃了其中的超级调用操作,当宿主机访问第一数据通道时,存在第一数据通道中没有虚拟机写入的第一数据包的情况。因此,在一些可能的实现方式中,当第一数据通道中未存储虚拟机传输的第一数据包时,宿主机在预设时间段T后,返回执行步骤S401,再次访问第一数据通道,以便及时获取虚拟机传输的第一数据包。
可以理解的是,本领域技术人员可以根据实际情况,具体设定预设时间段T,本申请实施例对此不做限定,这里也不再一一列举。
S402:当第一数据通道中存储有第一数据包时,宿主机获取第一数据通道中的第一数据包。
这里需要说明的是,当宿主机上运行多台虚拟机时,为了实现每台虚拟机与宿主机的数据传输,宿主机可以通过轮询的方式逐一访问每台虚拟机对应的第一数据通道,以获取该虚拟机写入的第一数据包。
S403:宿主机根据第一数据包携带的接收方信息,发送第一数据包后,宿主机返回执行步骤S401。
可以理解的是,第一数据包的接收方可以是该宿主机,也可以是该宿主机上运行的另一台虚拟机,还可以是外网设备,如服务器、移动终端、另一台宿主机和另一台宿主机上运行虚拟机等。
还需要说明的是,本领域技术人员可以根据实际情况,具体设定在预设时间段T'后返回执行步骤S401,本申请实施例对预设时间段T'不做具体限定,这里也不再一一列举。在可能的情况中,宿主机可以在步骤S403之后直接返回执行步骤S401,以提高数据传输的效率。
通过上述步骤S401-S403,宿主机采用了轮询的机制,循环访问存储虚拟机上待传输数据的第一数据通道,从第一数据通道中获取虚拟机待传输的第一数据包,摒弃了数据传输过程中的超级调用,不会引起虚拟机和宿主机间的上下文切换,提高了数据传输的效率。
在一些可能的实现方式中,为了实现双向数据传输,该数据传输方法,还包括:
S404:宿主机将第二数据包写入第二数据通道,以便虚拟机从第二数据通道获取第二数据包。
其中,第二数据通道位于共享内存区域,用于存储宿主机写入的第二数据包。可以理解的是,第二数据通道和第一数据通道可以位于同一共享内存区域,也可以分别位于不同的共享内存区域,本申请实施例对此不做限定。第二数据通道对应的共享内存区域的构建及配置方法与第一数据通道对应的共享内存区域类似,具体参见相关说明即可,这里不再赘述。
下面结合具体场景,以第一处理模块运行于虚拟机、第二处理模块运行于宿主机为例,对本申请实施例提供的数据传输方法进行详细的说明。
参见图5,该图为本申请具体实施例提供的另一种数据传输方法的流程示意图。
本申请实施例提供的数据传输方法,具体还包括以下步骤S501-S503。
S501:虚拟机访问第一数据通道。
其中,第一数据通道位于共享内存区域,用于存储宿主机写入的第一数据包。
由于共享内存区域在虚拟机端可以配置为IVSHMEM类型的PCI设备,虚拟机端可以通过自主访问该PCI设备的内存从中获取相应的第二数据包,无需宿主机触发中断。
同理,由于宿主机向第一数据通道写入第一数据包的过程独立于虚拟机从第一数据通道中获取第一数据包,摒弃了过程中的中断操作,当虚拟机访问第一数据通道时,存在第一数据通道中没有宿主机写入的第一数据包的情况。因此,在一些可能的实现方式中,当第一数据通道中未存储宿主机传输的第一数据包时,虚拟机在预设时间段t后,返回执行步骤S501,再次访问第一数据通道,以便及时获取宿主机传输的第一数据包。
可以理解的是,本领域技术人员可以根据实际情况,具体设定预设时间段t,本申请实施例对此不做限定,这里也不再一一列举。
S502:当第一数据通道中存储有第一数据包时,虚拟机获取第一数据通道中的第一数据包后,返回步骤S501。
由于虚拟机操作***中对应的数据结构与宿主机***中的数据结构不同,在实际应用中,虚拟机在获取第一数据通道中的第一数据包时,可以预先申请一个虚拟机操作***中用于表示数据包的数据存储结构(pkt),将第一数据通道中的第一数据包拷贝到pkt中。
在虚拟机从第一数据通道中的第一数据包后,可以通过将第一数据通道相应的第一数据包删除,以防止重复收包。
需要说明的是,本领域技术人员可以根据实际情况,具体设定在预设时间段t'后,返回步骤S501,本申请实施例对预设时间段t'不做具体限定,这里也不再一一列举。在可能的情况中,虚拟机可以在步骤S502之后直接返回执行步骤S501,以提高数据传输的效率。
然而,由于虚拟机为宿主机上运行的一个特殊的软件,其运行占用宿主机CPU,若虚拟机连续执行上述步骤S501-S502的收包过程,则又会影响宿主机上其他软件的运行效果,因此,在具体实施时,可以设置收包数量阈值并记录上述步骤S501-S502的执行次数,当该次数达到收包数量阈值时,让出CPU一定时间(可以由虚拟机操作***的初始设置决定)后,再继续执行上述步骤S501。
通过上述步骤S501-S502,虚拟机采用了轮询的机制,循环访问存储宿主机写入数据的第二数据通道,从第二数据通道中获取宿主机待传输的第二数据包,无需宿主机触发中断,避免了虚拟机从用户态切换至内存态所引起的上下文切换,提高了数据传输的效率。
在一些可能的实现方式中,为了实现双向数据传输,该数据传输方法,还包括:
S503:虚拟机将第二数据包写入第二数据通道,以便宿主机从第二数据通道获取第二数据包。
同理,第二数据通道位于共享内存区域,用于存储宿主机写入的第二数据包。可以理解的是,第二数据通道和第一数据通道可以位于同一共享内存区域,也可以分别位于不同的共享内存区域,本申请实施例对此不做限定。第二数据通道对应的共享内存区域的构建及配置方法与第一数据通道对应的共享内存区域类似,具体参见相关说明即可,这里不再赘述。
下面结合具体场景对宿主机和虚拟机利用上述第一处理模块和第二处理模块的数据传输机制实现的数据传输过程进行详细的说明。
虚拟机的发包过程,即虚拟机将待传输的第一数据包写入预先构建的第一数据通道中,具体可以包括如下步骤:
第一步,判断预先配置的PCI设备(即虚拟网卡)对应的内存队列(即共享内存区域中的第一数据通道)是否已满;若是则丢弃第一数据包,若否则执行第二步。其中,虚拟网卡的内存队列预先映射至共享内存中的第一数据通道。
第二步,根据该内存队列(即第一数据通道)的队尾游标,找出其中首个可用的数据包存储空间,将第一数据包的数据部分写入该内存队列;
第三步,修改元数据存储区域中第一数据通道的队列信息(通道的总长度、剩余长度、队首游标和队尾游标等),并丢弃第一数据包,以便宿主机获取该第一数据包。
相应的,宿主机采用轮询收包的方式从共享内存区域中收包,并转发至对应的接收方,无需超级调用。宿主机收包的核心为一个死循环的收包线程,下面以宿主机上创建有多个虚拟网卡为例进行详细说明,该收包过程具体如下:
第一步,遍历每个虚拟网卡对应的共享内存区域,访问其中的第一数据通道,查看是否存在第一数据包,若是则执行第二步,若否则访问下一个虚拟网卡对应的共享内存区域;
第二步,调用KVM中vswitch的相关接口,获取该第一数据通道中的第一数据包以及该第一数据包携带的接收方信息后,返回第一步。
通过上述第一虚拟机发包、宿主机收包的步骤,在避免网络通信过程中的超级调用的基础上,实现了虚拟机向外发送数据。下面对虚拟机接收数据的过程进行说明。
宿主机向虚拟机发包的过程具体如下:
检测获取到的第二数据包所携带的接收方信息,若接收方为虚拟机,则将其记作dest-nics;将该第二数据包复制到dest-nics对应的所有共享内存区域的第二数据通道中,并修改该第二数据通道的队列信息(通道的总长度、剩余长度、队首游标和队尾游标等)。
虚拟机的收包流程可以由内核线程recv_kthread完成,通过轮询的方式收取数据包,无需中断操作。recv_kthread内核线程是一个死循环,具体收包流程如下:
第一步,轮询第一共享内存区域中上行先进先出通道,查看是否存在第二数据包,若是则执行第二步,若否则执行第四步;
第二步,申请一个操作***中用于表示数据包的数据包存储结构pkt,将第二数据通道中第二数据包的数据部分拷贝到该pkt中,并从第二数据通道删除该第二数据包;
第三步,修改元数据存储区域中存储的第二数据通道的队列信息,并记录连续收包次数加1;
第四步,判断连续收包次数是否达到预设阈值(如5万次),若是则执行第五步,若否则返回第一步。
第五步,让出CPU一段时间,后返回第一步。该一段时间可以由操作***本身决定。
通过上述步骤,在摒弃了超级调用和中断,既实现了虚拟机的向外发包,又实现了虚拟机的收包,高效的完成虚拟机与宿主机、虚拟机与虚拟机以及虚拟机与外网的数据通信,提高了CPU的利用率,整体提高了虚拟机网络通信的效率及性能。
基于上述实施例提供的数据传输方法,本申请实施例还提供了一种数据传输***。
参见图6,该图为本申请实施例提供的一种数据传输***的结构示意图。
本申请实施例提供的数据传输***,包括:第一处理模块601和第二处理模块602。
同理,在本申请实施例中,具体可以是第一处理模块运行于宿主机、第二处理模块运行于虚拟机,也可以是第一处理模块运行于虚拟机、第二处理模块运行于宿主机。
第一处理模块601,用于访问第一数据通道,当第一数据通道中存储有第一数据包时,获取第一数据通道中的第一数据包;还用于根据第一数据包携带的接收方信息,发送该第一数据包。
第二处理模块602,用于将待传输的第一数据包写入第一数据通道。
其中,第一数据通道位于共享内存区域603。
在一些可能的实现方式中,第一处理模块601,还用于当所述第一数据通道中未存储第一数据包时,在预设时间段T后,返回所述访问第一数据通道。
作为一个示例,在虚拟机的操作***内核中运行第一处理模块601或第二处理模块602。
在一些可能的实现方式中,第一处理模块601,还用于当第一数据通道中未存储第一数据包时,再次访问第一数据通道。
在一些可能的实现方式中,第一处理模块601,还用于将第二数据包写入第二数据通道,以便第二处理模块602从第二数据通道获取该第二数据包。
可以理解的是,第二数据通道也位于第一处理模块601和第二处理模块602均可访问的共享内存区域。
在本申请实施例中,通过分别运行于宿主机和虚拟机的第一处理模块和第二处理模块实现了二者之间的数据传输,第一处理模块和第二处理模块之间利用共享内存进行通信。具体的,第一处理模块利用轮询的机制自行访问位于共享内存区域的第一数据通道,第一数据通道用于存储第二处理模块写入的第一数据包。当第一数据通道中存储有第二处理模块写入的第一数据包时,第一处理模块获取该第一数据包,并根据该第一数据包携带的接收方信息,发送该第一数据包,完成数据的传输。第一处理模块和第二处理模块之间的数据传输过程,使得虚拟机和宿主机之间的数据传输过程无需执行超级调用,避免了超级调用引起的虚拟机与宿主机之间的上下文切换,提高了中央处理器(Central ProcessingUnit,CPU)的利用率和数据传输的效率,进而显著提高虚拟机的网络通信效率及性能。
基于上述实施例提供的数据传输方法及***,本申请实施例还提供了一种终端。参见图7,该图为本申请实施例提供的一种终端的结构示意图。
该终端包括:处理器10以及存储器20;
该存储器20,用于存储程序代码,并将该程序代码传输给处理器10;该处理器10,用于调用存储器20中的指令执行如本申请上述实施例所提供的数据传输方法。
基于上述实施例提供的数据传输方法及***,本申请实施例还提供了一种计算机可读存储介质,该机算机可读存储介质中存储有指令,当该指令在终端设备上运行时,使得终端设备执行如本申请上述实施例所提供的数据传输方法。
基于上述实施例提供的数据传输方法及***,本申请实施例还提供了一种计算机程序产品,该计算机程序产品在终端设备上运行时,使得终端设备执行如本申请上述实施例所提供的数据传输方法。
需要说明的是,本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的***而言,由于其与实施例公开的方法相对应,所以描述比较简单,相关之处参见方法部分说明即可。
还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
以上所述,仅是本申请的较佳实施例而已,并非对本申请作任何形式上的限制。虽然本申请已以较佳实施例揭露如上,然而并非用以限定本申请。任何熟悉本领域的技术人员,在不脱离本申请技术方案范围情况下,都可利用上述揭示的方法和技术内容对本申请技术方案做出许多可能的变动和修饰,或修改为等同变化的等效实施例。因此,凡是未脱离本申请技术方案的内容,依据本申请的技术实质对以上实施例所做的任何简单修改、等同变化及修饰,均仍属于本申请技术方案保护的范围内。
Claims (11)
1.一种数据传输方法,其特征在于,应用于第一处理模块,所述第一处理模块运行于宿主机、第二处理模块运行于虚拟机,或者,所述第一处理模块运行于虚拟机、第二处理模块运行于宿主机,所述方法,包括:
访问第一数据通道;所述第一数据通道位于共享内存区域,用于存储第二处理模块写入的第一数据包;
当所述第一数据通道中存储有第一数据包时,获取所述第一数据通道中的第一数据包;
当所述第一处理模块运行于宿主机时,根据获取到的第一数据包所携带的接收方信息,发送该第一数据包,所述第一数据包的接收方是该宿主机,或者是外网设备,所述外网设备包括服务器、移动终端、另一台宿主机以及另一台宿主机上运行的虚拟机。
2.根据权利要求1所述的数据传输方法,其特征在于,所述方法,还包括:
将第二数据包写入第二数据通道,以便所述第二处理模块从所述第二数据通道获取该第二数据包;所述第二数据通道位于共享内存区域。
3.根据权利要求1所述的数据传输方法,其特征在于,当所述第一处理模块运行于宿主机时,所述访问第一数据通道,之前还包括:
创建所述共享内存区域;
利用内存映射机制,配置所述共享内存区域,以便所述第一处理模块访问所述共享内存区域;
其中,所述共享内存区域包括所述第一数据通道、所述第二数据通道和元数据存储区域,所述元数据存储区域用于存储所述第一数据通道和所述第二数据通道的队列信息。
4.根据权利要求1所述的数据传输方法,其特征在于,当所述第一处理模块运行于虚拟机时,所述访问第一数据通道,之前还包括:
激活虚拟外部控制器接口设备;
将所述虚拟外部控制器接口设备的内存地址映射至所述共享内存区域;所述共享内存区域由宿主机创建,包括所述第一数据通道、所述第二数据通道和元数据存储区域,所述元数据存储区域用于存储所述第一数据通道和所述第二数据通道的队列信息;
创建并注册虚拟网卡设备;
将所述虚拟网卡的物理地址和身份标识以及所述虚拟机的通用唯一标识符写入所述元数据存储区域。
5.根据权利要求1所述的数据传输方法,其特征在于,所述方法,还包括:
当所述第一数据通道中未存储第一数据包时,在预设时间段T后,返回所述访问第一数据通道。
6.根据权利要求4所述的数据传输方法,其特征在于,
所述共享内存区域的大小为2kkb;所述第一数据通道的大小Sfifo1为2mkb;所述第二数据通道的大小Sfifo2为2nkb;
其中,k、m和n均为正整数,S=Smeta+Sfifo1+Sfifo2,2k-1<S≤2k,Smeta为所述元数据存储区域的大小。
7.根据权利要求1-6任意一项所述的数据传输方法,其特征在于,所述宿主机包括:至少一个第一CPU核心和至少一个第二CPU核心;
当所述第一处理模块运行于宿主机时,所述至少一个第一CPU核心,用于运行所述第一处理模块;所述第二CPU核心,用于运行虚拟机;
当所述第二处理模块运行于宿主机时,所述至少一个第一CPU核心,用于运行所述第二处理模块;所述第二CPU核心,用于运行虚拟机。
8.一种数据传输***,其特征在于,所述***包括:第一处理模块和第二处理模块;所述第一处理模块运行于宿主机、第二处理模块运行于虚拟机,或者,所述第一处理模块运行于虚拟机、第二处理模块运行于宿主机;
所述第一处理模块,用于访问第一数据通道,当所述第一数据通道中存储有第一数据包时,获取所述第一数据通道中的第一数据包;当所述第一处理模块运行于宿主机时,还用于根据所述第一数据包携带的接收方信息,发送所述第一数据包,所述第一数据包的接收方是该宿主机,或者是外网设备,所述外网设备包括服务器、移动终端、另一台宿主机以及另一台宿主机上运行的虚拟机;
其中,所述第一数据通道位于共享内存区域;
所述第二处理模块,用于将待传输的第一数据包写入所述第一数据通道。
9.根据权利要求8所述的数据传输***,其特征在于,
所述第一处理模块,还用于当所述第一数据通道中未存储第一数据包时,再次访问所述第一数据通道。
10.一种终端,其特征在于,所述终端包括:处理器以及存储器;所述存储器,用于存储程序代码,并将所述程序代码传输给所述处理器;所述处理器,用于调用存储器中的指令执行权利要求1-7任一项所述的数据传输方法。
11.一种计算机可读存储介质,其特征在于,所述计 算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备执行权利要求1-7任一项所述的数据传输方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710923276.0A CN107678835B (zh) | 2017-09-30 | 2017-09-30 | 一种数据传输方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710923276.0A CN107678835B (zh) | 2017-09-30 | 2017-09-30 | 一种数据传输方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107678835A CN107678835A (zh) | 2018-02-09 |
CN107678835B true CN107678835B (zh) | 2020-05-08 |
Family
ID=61139625
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710923276.0A Active CN107678835B (zh) | 2017-09-30 | 2017-09-30 | 一种数据传输方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107678835B (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019161557A1 (zh) | 2018-02-24 | 2019-08-29 | 华为技术有限公司 | 一种通信的方法及装置 |
CN108847972A (zh) * | 2018-06-08 | 2018-11-20 | 山东超越数控电子股份有限公司 | 一种虚拟环境下提高网络数据传输速率的方法 |
CN110012033B (zh) * | 2019-05-05 | 2022-03-22 | 深信服科技股份有限公司 | 一种数据传输方法、***及相关组件 |
CN110659143B (zh) * | 2019-08-13 | 2022-09-09 | 深圳信息职业技术学院 | 一种容器间的通讯方法、装置及电子设备 |
CN110502312A (zh) * | 2019-08-15 | 2019-11-26 | 东软集团股份有限公司 | 一种数据读取方法、数据存储方法及装置 |
CN112860506B (zh) * | 2019-11-28 | 2024-05-17 | 阿里巴巴集团控股有限公司 | 监控数据的处理方法、装置、***和存储介质 |
CN111813584A (zh) * | 2020-08-05 | 2020-10-23 | Oppo广东移动通信有限公司 | 内存共享方法、装置、电子设备及存储介质 |
CN113110916B (zh) * | 2021-04-22 | 2023-11-07 | 深信服科技股份有限公司 | 一种虚拟机数据读写方法、装置、设备及介质 |
CN113778611A (zh) * | 2021-07-06 | 2021-12-10 | 锐捷网络(苏州)有限公司 | 数据传输方法、装置、***及存储介质 |
CN113630442B (zh) * | 2021-07-14 | 2023-09-12 | 远景智能国际私人投资有限公司 | 数据传输方法、装置及*** |
WO2023123163A1 (zh) * | 2021-12-30 | 2023-07-06 | 华为技术有限公司 | 计算装置中的跨域通信方法和跨域通信装置 |
CN117931381A (zh) * | 2024-03-25 | 2024-04-26 | 成都菁蓉联创科技有限公司 | 一种基于ivshmem技术的端对端通讯方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101667144A (zh) * | 2009-09-29 | 2010-03-10 | 北京航空航天大学 | 一种基于共享内存的虚拟机通信方法 |
CN101819564A (zh) * | 2009-02-26 | 2010-09-01 | 国际商业机器公司 | 协助在虚拟机之间进行通信的方法和装置 |
CN106161110A (zh) * | 2016-08-31 | 2016-11-23 | 东软集团股份有限公司 | 一种网络设备中的数据处理方法及*** |
CN106612306A (zh) * | 2015-10-22 | 2017-05-03 | 中兴通讯股份有限公司 | 虚拟机的数据共享方法及装置 |
CN106874128A (zh) * | 2017-01-22 | 2017-06-20 | 广州华多网络科技有限公司 | 数据传输方法及装置 |
-
2017
- 2017-09-30 CN CN201710923276.0A patent/CN107678835B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101819564A (zh) * | 2009-02-26 | 2010-09-01 | 国际商业机器公司 | 协助在虚拟机之间进行通信的方法和装置 |
CN101667144A (zh) * | 2009-09-29 | 2010-03-10 | 北京航空航天大学 | 一种基于共享内存的虚拟机通信方法 |
CN106612306A (zh) * | 2015-10-22 | 2017-05-03 | 中兴通讯股份有限公司 | 虚拟机的数据共享方法及装置 |
CN106161110A (zh) * | 2016-08-31 | 2016-11-23 | 东软集团股份有限公司 | 一种网络设备中的数据处理方法及*** |
CN106874128A (zh) * | 2017-01-22 | 2017-06-20 | 广州华多网络科技有限公司 | 数据传输方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN107678835A (zh) | 2018-02-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107678835B (zh) | 一种数据传输方法及*** | |
CN107193673B (zh) | 一种报文处理方法及设备 | |
Garzarella et al. | Virtual device passthrough for high speed VM networking | |
WO2018004953A1 (en) | Technologies for scalable packet reception and transmission | |
WO2017032152A1 (zh) | 将数据写入存储设备的方法及存储设备 | |
CN109525495B (zh) | 一种数据处理装置、方法和fpga板卡 | |
CN114371811A (zh) | 用于存储管理的方法、电子设备和计算机程序产品 | |
CN110399329B (zh) | 一种rdma的数据处理方法及相关装置 | |
US9836338B2 (en) | Method and apparatus for message interactive processing | |
CN112905304A (zh) | 一种虚拟机间通信方法、装置、物理主机及介质 | |
CN110798520B (zh) | 一种业务处理方法、***、装置及可读存储介质 | |
US10437760B2 (en) | Virtual universal serial bus peripheral controller | |
US9344376B2 (en) | Quality of service in multi-tenant network | |
CN113037649B (zh) | 网络中断数据包的收发方法和装置、电子设备和存储介质 | |
WO2017218133A1 (en) | Technologies for coordinating access to data packets in a memory | |
CN112306693B (zh) | 数据包的处理方法和设备 | |
CN111901386A (zh) | 一种远端文件处理的方法、***、设备及可读存储介质 | |
WO2018057165A1 (en) | Technologies for dynamically transitioning network traffic host buffer queues | |
US8041902B2 (en) | Direct memory move of multiple buffers between logical partitions | |
CN113986621B (zh) | 数据备份性能的优化方法、装置、设备及存储介质 | |
CN115495406A (zh) | 一种基于PCIe的报文传输方法、装置、设备及存储介质 | |
EP4261671A1 (en) | Data access method and related device | |
Casanova et al. | The performance of PVM on MPP systems | |
CN116136790A (zh) | 任务处理方法和装置 | |
CN113326151A (zh) | 进程间通信方法、装置、设备、***及存储介质 |
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 |