CN103176833B - 一种基于虚拟机的数据发送方法、接收方法及系统 - Google Patents
一种基于虚拟机的数据发送方法、接收方法及系统 Download PDFInfo
- Publication number
- CN103176833B CN103176833B CN201310076510.2A CN201310076510A CN103176833B CN 103176833 B CN103176833 B CN 103176833B CN 201310076510 A CN201310076510 A CN 201310076510A CN 103176833 B CN103176833 B CN 103176833B
- Authority
- CN
- China
- Prior art keywords
- data slot
- data
- slot
- shared drive
- drive region
- 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.)
- Expired - Fee Related
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开一种基于虚拟机的数据发送方法、接收方法及系统。所述发送方法应用于具有宿主机和客户机的虚拟机架构,所述方法包括:宿主机的后端虚拟网络设备获取套接字缓冲区的数据;所述套接字缓冲区的数据的数据片段,采用链表形式存储,所述数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等;将所述数据片段映射至共享内存区域,以便客户机从所述共享内存区域读取所述数据片段。采用本发明的方法或系统,可以避免对较大的数据包进行拆分,减少Host的系统开销。
Description
技术领域
本发明涉及数据传输领域,特别是涉及一种基于虚拟机的数据发送方法、接收方法及系统。
背景技术
虚拟机(Virtual Machine)是指通过软件模拟的、具有完整硬件系统功能的,运行在一个完全隔离环境中的完整计算机系统。通过虚拟机软件,可以在一台物理计算机上模拟出一台或多台虚拟的计算机。虚拟机可以像真正的计算机那样进行工作,例如可以安装操作系统、安装应用程序、访问网络资源等等。
通常,虚拟机所在的物理计算机称为宿主机(Host),虚拟机自身称为客户机(Guest)。
在Xen虚拟机架构中,宿主机向客户机发送数据的过程主要是:宿主机的Netback(宿主机的后端虚拟网络设备)先对需要发送的数据包进行切包。切包可以将数据量较大的数据包拆分成多个数据量较小(不大于允许传输的最大值)的数据包。然后,Netback端将拆分后的数据包逐一发送至客户机的Netfront(客户机的前端虚拟网络设备)。Netfront逐一接收Netback发送的数据包,并逐一回复ACK(Acknowledgement)包,以告知Host“Guest已经对某个数据包接收成功”。
可见,现有技术中,基于虚拟机的数据发送、接收方法,需要对较大的数据包进行拆分,相对于拆分之前,拆分后得到的较小的数据包的数目较多,逐个传递数目较多的数据包,会导致Host和Guest的系统开销较大。另外,由于Guest对于每个数据包还需要逐一发送ACK包,导致对Guest的开销进一步增大。
发明内容
本发明的目的是提供一种基于虚拟机的数据发送方法、接收方法及系统,能够避免对较大的数据进行拆分,减少Host的系统开销。
为实现上述目的,本发明提供了如下方案:
根据本发明的第一方面的第一种可能的实现方式,本发明提供一种基于虚拟机的数据发送方法,所述方法应用于具有宿主机和客户机的虚拟机架构,所述方法包括:
宿主机的后端虚拟网络设备获取套接字缓冲区的数据;所述套接字缓冲区的数据的数据片段,采用链表形式存储,所述数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等;
将所述数据片段映射至共享内存区域,以便客户机从所述共享内存区域读取所述数据片段。
结合第一方面的第二种可能的实现方式,所述共享内存区域为IO环。
结合第一方面的第三种可能的实现方式,将所述数据片段映射至共享内存区域,包括:
对所述数据片段进行标识,以表明所述数据片段是采用链表形式存储的;
将标识后的数据片段映射至共享内存区域。
结合第一方面的第四种可能的实现方式,还包括:
获取客户机的前端虚拟网络设备支持的数据片段聚合方式;
当所述数据片段聚合方式表示所述客户机的前端虚拟网络设备只支持按照数组形式进行数据片段聚合时,
所述将所述数据片段映射至共享内存区域,包括:
每次将预设数目的数据片段映射至所述共享内存区域,所述预设数目小于或等于所述数组形式定义的数据片段的个数的最大值。
根据本发明的第二方面的第一种可能的实现方式,本发明提供一种基于虚拟机的数据接收方法,所述方法包括:
客户机的前端虚拟网络设备从所述共享内存区域中获取所述数据片段;其中,所述数据片段为宿主机的后端虚拟网络设备将套接字缓冲区中的数据的数据片段映射至所述共享内存区域而得到的结果,所述套接字缓冲区中的数据数据片段采用链表形式存储,所述数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等;
按照链表形式,将所述数据片段聚合为套接字缓冲区的数据。
结合第二方面的第二种可能的实现方式,所述将所述数据片段聚合为套接字缓冲区的数据,包括:
获取所述数据片段的链表属性;所述链表属性用于表示各个数据片段之间的顺序;
按照所述顺序,将所述数据片段聚合为套接字缓冲区的数据。
结合第二方面的两种可能的实现方式中的任意一种,所述方法还包括:
获取所述数据片段的存储标识;
当所述存储标识表示所述数据片段是采用数组形式存储时,按照数组形式,将所述数据片段聚合为套接字缓冲区的数据。
根据本发明的第三方面的第一种可能的实现方式,本发明提供一种基于虚拟机的数据发送系统,所述系统应用于具有宿主机和客户机的虚拟机架构,所述系统包括:
数据获取模块,用于获取套接字缓冲区的数据;所述套接字缓冲区的数据的数据片段,采用链表形式存储,所述数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等;
数据片段映射模块,用于将所述数据片段映射至共享内存区域,以便客户机从所述共享内存区域读取所述数据片段。
结合第三方面的第二种可能的实现方式,所述共享内存区域为IO环。
结合第三方面的第三种可能的实现方式,所述数据片段映射模块包括:
数据片段标识单元,用于对所述数据片段进行标识,以表明所述数据片段是采用链表形式存储的;
数据片段映射单元,用于将标识后的数据片段映射至共享内存区域。
结合第三方面的第四种可能的实现方式,所述系统还包括:
聚合方式获取模块,用于获取客户机的前端虚拟网络设备支持的数据片段聚合方式;
所述数据片段映射模块包括:
数组形式数据片段映射单元,用于当所述数据片段聚合方式表示所述客户机的前端虚拟网络设备只支持按照数组形式进行数据片段聚合时,每次将预设数目的数据片段映射至所述共享内存区域,所述预设数目小于或等于所述数组形式定义的数据片段的个数的最大值。
根据本发明的第四方面的第一种可能的实现方式,本发明提供一种基于虚拟机的数据接收系统,所述系统包括:
数据片段获取模块,用于从所述共享内存区域中获取所述数据片段;其中,所述数据片段为宿主机的后端虚拟网络设备将套接字缓冲区中的数据的数据片段映射至所述共享内存区域而得到的结果,所述套接字缓冲区中的数据数据片段采用链表形式存储,所述数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等;
第一数据片段聚合模块,用于按照链表形式,将所述数据片段聚合为套接字缓冲区的数据。
结合第四方面的第二种可能的实现方式,所述第一数据片段聚合模块,包括:
链表属性获取单元,用于获取所述数据片段的链表属性;所述链表属性用于表示各个数据片段之间的顺序;
数据片段聚合单元,按照所述顺序,将所述数据片段聚合为套接字缓冲区的数据。
结合第四方面的两种可能的实现方式中的任意一种,所述系统还包括:
存储标识模块,用于获取所述数据片段的存储标识;
第二数据片段聚合模块,用于当所述存储标识表示所述数据片段是采用数组形式存储时,按照数组形式,将所述数据片段聚合为套接字缓冲区类型的数据。
根据本发明提供的具体实施例,本发明公开了以下技术效果:
本发明公开的基于虚拟机的数据发送方法、接收方法及系统,通过采用链表形式存储所述数据片段,将所述数据片段映射至共享内存区域,并且所述数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等,可以避免对较大的数据包进行拆分,减少Host的系统开销。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明的基于虚拟机的数据发送方法实施例1的流程图;
图2为本发明的基于虚拟机的数据发送方法实施例2的流程图;
图3为本发明的基于虚拟机的数据发送方法实施例3的流程图;
图4为本发明的基于虚拟机的数据接收方法实施例1的流程图;
图5为本发明的基于虚拟机的数据接收方法实施例2的流程图;
图6为本发明的基于虚拟机的数据发送系统实施例1的结构图;
图7为本发明的基于虚拟机的数据发送系统实施例2的结构图;
图8为本发明的基于虚拟机的数据发送系统实施例3的结构图;
图9为本发明的基于虚拟机的数据接收系统实施例1的结构图;
图10为本发明的计算节点的系统实施例的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
本发明的基于虚拟机的数据发送方法,应用于具有宿主机和客户机的虚拟机架构。例如Xen虚拟机架构。
图1为本发明的基于虚拟机的数据发送方法实施例1的流程图。如图1所示,该方法可以包括:
步骤101:宿主机的后端虚拟网络设备获取套接字缓冲区的数据;所述套接字缓冲区的数据的数据片段,采用链表形式存储,所述数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等;
多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口。
具体的,Socket可以看成在两个程序进行通讯连接中的一个端点,是连接应用程序和网络驱动程序的桥梁。此后,应用程序送给Socket的数据,由Socket交给网络驱动程序向网络上发送出去。计算机从网络上收到与该Socket绑定IP地址和端口号相关的数据后,由网络驱动程序交给Socket,应用程序便可从该Socket中提取接收到的数据,应用程序通过Socket进行数据的发送与接收。
套接字缓冲区(socket buffer,skb)是内存中为套接字设置的区域,用于存储Socket中的数据。在linux系统中,专门定义了套接字缓冲区的数据结构。数据按照套接字缓冲区的数据结构存储在套接字缓冲区中。
套接字缓冲区的数据可以由多个数据片段构成。数据片段主要有两种组织形式。一种组织形式是数组(frags)形式,另一种组织形式是链表(fraglist)形式。本发明中的数据片段,采用链表形式存储。
所述数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等。由于Socket中的数据是物理网卡的网络驱动程序发送的,所以Socket中的数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等。
步骤102:将所述数据片段映射至共享内存区域,以便客户机从所述共享内存区域读取所述数据片段。
所述共享内存区域,是宿主机和客户机均可以访问的内存区域。宿主机的后端虚拟网络设备(netback)将数据片段映射到共享内存区域后,客户机就可以从共享内存区域读取数据片段。
下面对本实施例的有益效果进行说明。现有技术中,netback发送的数据片段的数据量大小受限于最大传输单元(Maximum Transmission Unit,MTU)。当socket发送的数据片段的大小大于MTU所允许的最大值时,netback就需要对数据片段再进行拆分,以使得每个需要被传输的数据片段的大小均小于或等于MTU允许的最大值。本实施例中,netback不再对数据片段进行拆分,直接将与所述宿主机的物理网卡发送的数据包的大小相等的数据片段发送至共享内存区域,令客户机从共享内存区域中获取数据片段,因此,可以减少netback的负荷(即不再需要对较大数据片段进行拆分)。
现有技术中,数据片段采用数组(frags)的组织形式。物理设备聚合的数据包的数据片段采用的是链表(fraglist)的组织形式。因此,物理设备聚合的数据包的数据片段通过虚拟机架构进行传输时,netback需要将fraglist形式的数据片段拆分成frags的形式,而本发明实施例的基于虚拟机的数据包发送方法,可以使得netback支持fraglist形式的数据片段的传输,不必进行数据包的拆分。
Fraglist中可以包含的成员数目没有上限。所以,采用fraglist的形式存储数据片段时,netback向共享内存区域每次最多映射的数据片段的大小,最大可以等于linux系统中协议栈规定的上限,64KB。
综上所述,本实施例的基于虚拟机的数据发送方法,通过采用链表形式存储所述数据片段,将所述数据片段映射至共享内存区域,并且所述数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等,可以避免对较大的数据包进行拆分,减少Host的系统开销。
图2为本发明的基于虚拟机的数据发送方法实施例2的流程图。如图2所示,该方法可以包括:
步骤201:宿主机的后端虚拟网络设备获取套接字缓冲区的数据;所述套接字缓冲区的数据的数据片段,采用链表形式存储,所述数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等;
步骤202:对所述数据片段进行标识,以表明所述数据片段是采用链表形式存储的;
可以采用数据片段中的一个数据位对数据片段的存储形式进行标识。例如,当该数据位为“1”时,表明所述数据片段是采用链表形式存储的;当该数据位为“0”时,表明所述数据片段是采用数组形式存储的。
步骤203:将所述数据片段映射至IO环,以便客户机从所述共享内存区域读取所述数据片段。
IO环也称为,I/O共享环。IO环是在不同域(Domain)之间存在的一块固定的共享内存。I/O共享环利用生产者和消费者的机理来产生发送以及响应IO请求。
本实施例中,宿主机的后端虚拟网络设备同时具备发送链表形式的数据片段和发送数组形式的数据片段两种能力。通过对数据片段进行标识,可以使客户机的前端虚拟网络设备识别数据片段的存储形式,以便采用相对应的聚合方式对数据片段进行聚合。
图3为本发明的基于虚拟机的数据发送方法实施例3的流程图。如图3所示,该方法可以包括:
步骤301:宿主机的后端虚拟网络设备获取套接字缓冲区的数据;所述套接字缓冲区的数据的数据片段,采用链表形式存储,所述数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等;
步骤302:获取客户机的前端虚拟网络设备支持的数据片段聚合方式;
客户机的前端虚拟网络设备支持的数据片段聚合方式,可以是数组形式,也可以是链表形式。
步骤303:当所述数据片段聚合方式表示客户机的前端虚拟网络设备只支持按照数组形式进行数据片段聚合时,每次将预设数目的数据片段映射至所述共享内存区域,所述预设数目小于或等于所述数组形式定义的数据片段的个数的最大值。
例如,数组形式定义的数据片段的个数的最大值通常是16。因此,当所述判断结果表示客户机的前端虚拟网络设备只支持按照数组形式进行数据片段聚合时,每次可以将预设16个数据片段映射至所述共享内存区域。
本实施例中,通过修改每次映射至所述共享内存区域的数据片段个数,使得改进后的netback发送的数据片段,也可以被未改进的netfront读取,使得netfront可以按照数组方式对获取到的数据片段进行聚合。
本发明还公开了一种基于虚拟机的数据接收方法。所述方法应用于具有宿主机和客户机的虚拟机架构,宿主机的后端虚拟网络设备获取套接字缓冲区的数据;所述套接字缓冲区的数据的数据片段,采用链表形式存储,所述数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等;所述后端虚拟网络设备将所述数据片段映射至共享内存区域。
图4为本发明的基于虚拟机的数据接收方法实施例1的流程图。如图4所示,所述方法包括:
步骤401:客户机的前端虚拟网络设备从所述共享内存区域中获取所述数据片段;其中,所述数据片段为宿主机的后端虚拟网络设备将套接字缓冲区中的数据的数据片段映射至所述共享内存区域而得到的结果,所述套接字缓冲区中的数据数据片段采用链表形式存储,所述数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等;
步骤402:按照链表形式,将所述数据片段聚合为套接字缓冲区的数据。
具体的,将所述数据片段聚合为套接字缓冲区的数据,可以包括:
获取所述数据片段的链表属性;所述链表属性用于表示各个数据片段之间的顺序;
按照所述顺序,将所述数据片段聚合为套接字缓冲区的数据。
具体的,每个数据片段都具有frag_list这一属性。可以先判断frag_list是否为空,当frag_list不为空时,可以将上一个聚合的数据片段的next指针指向当前正在处理的数据片段;当frag_list为空(null)时,表示该数据片段为构成套接字缓冲区的数据最后一个数据片段,可以将第一个处理的数据片段的pre指针指向当前正在处理的数据片段。重复上述步骤可以聚合出一个完整的数据。
本实施例的基于虚拟机的数据接收方法,与本发明的基于虚拟机的数据发送方法相对应,使得客户机可以接收链表形式的数据片段,由于宿主机不再将数据包按照MTU的限制进行拆分,所以客户机需要接收的数据片段的数量减少,降低了客户机的系统开销。
此外,当客户机通过链表形式将数据片段聚合成一个完整的数据后,才发送ACK包,可以进一步减少由于发送ACK包而带来的系统开销。
图5为本发明的基于虚拟机的数据接收方法实施例2的流程图。如图5所示,所述方法包括:
步骤501:客户机的前端虚拟网络设备从所述共享内存区域中获取所述数据片段;
步骤502:获取所述数据片段的存储标识;
步骤503:当所述存储标识表示所述数据片段是采用数组形式存储时,按照数组形式,将所述数据片段聚合为套接字缓冲区的数据。
本实施例中,虚拟机可以按照现有技术中的方式,将数据片段按照数组形式聚合为套接字缓冲区的数据。
本发明还公开了一种基于虚拟机的数据发送系统。所述系统应用于具有宿主机和客户机的虚拟机架构。图6为本发明的基于虚拟机的数据发送系统实施例1的结构图。如图6所示,所述系统可以包括:
数据获取模块601,用于获取套接字缓冲区的数据;所述套接字缓冲区的数据的数据片段,采用链表形式存储,所述数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等;
数据片段映射模块602,用于将所述数据片段映射至共享内存区域,以便客户机从所述共享内存区域读取所述数据片段。
所述共享内存区域可以为IO环。
其中,所述数据获取模块601和数据片段映射模块602可以设置在客户机的前端虚拟网络设备(netfront)中,也可以独立于客户机的前端虚拟网络设备而存在。
本实施例的基于虚拟机的数据发送系统,通过采用链表形式存储所述数据片段,将所述数据片段映射至共享内存区域,并且所述数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等,可以避免对较大的数据包进行拆分,减少Host的系统开销。
图7为本发明的基于虚拟机的数据发送系统实施例2的结构图。如图7所示,所述系统可以包括:
数据获取模块601,用于获取套接字缓冲区的数据;所述套接字缓冲区的数据的数据片段,采用链表形式存储,所述数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等;
数据片段标识单元701,用于对所述数据片段进行标识,以表明所述数据片段是采用链表形式存储的;
数据片段映射单元702,用于将标识后的数据片段映射至共享内存区域。
其中,所述数据片段标识单元701和数据片段映射单元702可以包含于数据片段映射模块602。
图8为本发明的基于虚拟机的数据发送系统实施例3的结构图。如图8所示,所述系统可以包括:
数据获取模块601,用于获取套接字缓冲区的数据;所述套接字缓冲区的数据的数据片段,采用链表形式存储,所述数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等;
聚合方式获取模块801,用于获取客户机的前端虚拟网络设备支持的数据片段聚合方式;
数组形式数据片段映射单元802,用于当所述客户机的前端虚拟网络设备只支持按照数组形式进行数据片段聚合时,每次将预设数目的数据片段映射至所述共享内存区域,所述预设数目小于或等于所述数组形式定义的数据片段的个数的最大值。
其中,所述数组形式数据片段映射单元802可以包含于所述数据片段映射模块602。
本发明还公开了一种基于虚拟机的数据接收系统。所述系统应用于具有宿主机和客户机的虚拟机架构,宿主机的后端虚拟网络设备获取套接字缓冲区的数据;所述套接字缓冲区的数据的数据片段,采用链表形式存储,所述数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等;所述后端虚拟网络设备将所述数据片段映射至共享内存区域。
图9为本发明的基于虚拟机的数据接收系统实施例1的结构图。如图9所示,所述系统可以包括:
数据片段获取模块901,用于从所述共享内存区域中获取所述数据片段;
第一数据片段聚合模块902,用于按照链表形式,将所述数据片段聚合为套接字缓冲区的数据。
其中,所述第一数据片段聚合模块902,可以包括:
链表属性获取单元,用于获取所述数据片段的链表属性;所述链表属性用于表示各个数据片段之间的顺序;
数据片段聚合单元,按照所述顺序,将所述数据片段聚合为套接字缓冲区的数据。
所述系统还可以包括:
存储标识模块,用于获取所述数据片段的存储标识;
第二数据片段聚合模块,用于当所述存储标识表示所述数据片段是采用数组形式存储时,按照数组形式,将所述数据片段聚合为套接字缓冲区类型的数据。
本实施例的基于虚拟机的数据接收系统,与本发明的基于虚拟机的数据发送系统相对应,使得客户机可以接收链表形式的数据片段,由于宿主机不再将数据包按照MTU的限制进行拆分,所以客户机需要接收的数据片段的数量减少,降低了客户机的系统开销。
此外,当客户机通过链表形式将数据片段聚合成一个完整的数据后,才发送ACK包,可以进一步减少由于发送ACK包而带来的系统开销。
另外,本发明实施例还提供了一种计算节点。图10为本发明的计算节点的系统实施例的结构图。
如图10所示,计算节点700可能是包含计算能力的主机服务器,或者是个人计算机PC,或者是可携带的便携式计算机或终端等等,本发明具体实施例并不对计算节点700的具体实现做限定。计算节点700包括:
处理器(processor)710,通信接口(Communications Interface)720,存储器(memory)730,总线740。
处理器710,通信接口720,存储器730通过总线740完成相互间的通信。
处理器710,用于执行程序732。
具体地,程序732可以包括程序代码,所述程序代码包括计算机操作指令。
处理器710可能是一个中央处理器CPU,或者是特定集成电路ASIC(Application Specific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。
存储器730,用于存放程序732。存储器730可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。程序732具体可以包括:
数据获取模块601,用于通过宿主机的后端虚拟网络设备获取套接字缓冲区的数据;所述套接字缓冲区的数据的数据片段,采用链表形式存储,所述数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等;
数据片段映射模块602,用于将所述数据片段映射至共享内存区域,以便客户机从所述共享内存区域读取所述数据片段。
程序732中各模块的具体实现参见图6-图9所示实施例中的相应单元,在此不赘述。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可借助软件加必需的硬件平台的方式来实现,当然也可以全部通过硬件来实施,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案对背景技术做出贡献的全部或者部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处。综上所述,本说明书内容不应理解为对本发明的限制。
Claims (14)
1.一种基于虚拟机的数据发送方法,其特征在于,所述方法应用于具有宿主机和客户机的虚拟机架构,所述方法包括:
宿主机的后端虚拟网络设备获取套接字缓冲区的数据;所述套接字缓冲区的数据的数据片段,采用链表形式存储,所述数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等;
将所述数据片段映射至共享内存区域,以便客户机从所述共享内存区域读取所述数据片段,按照链表形式,将所述数据片段聚合为套接字缓冲区的数据。
2.根据权利要求1所述的方法,其特征在于,所述共享内存区域为IO环。
3.根据权利要求1所述的方法,其特征在于,将所述数据片段映射至共享内存区域,包括:
对所述数据片段进行标识,以表明所述数据片段是采用链表形式存储的;
将标识后的数据片段映射至共享内存区域。
4.根据权利要求1所述的方法,其特征在于,
所述方法还包括:
获取客户机的前端虚拟网络设备支持的数据片段聚合方式;
当所述数据片段聚合方式表示所述客户机的前端虚拟网络设备只支持按照数组形式进行数据片段聚合时,
所述将所述数据片段映射至共享内存区域,包括:
每次将预设数目的数据片段映射至所述共享内存区域,所述预设数目小于或等于数组形式定义的数据片段的个数的最大值。
5.一种基于虚拟机的数据接收方法,其特征在于,所述方法包括:
客户机的前端虚拟网络设备从共享内存区域中获取数据片段;其中,所述数据片段为宿主机的后端虚拟网络设备将套接字缓冲区中的数据的数据片段映射至所述共享内存区域而得到的结果,所述套接字缓冲区中的数据的数据片段采用链表形式存储,所述数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等;
按照链表形式,将所述数据片段聚合为套接字缓冲区的数据。
6.根据权利要求5所述的方法,其特征在于,所述将所述数据片段聚合为套接字缓冲区的数据,包括:
获取所述数据片段的链表属性;所述链表属性用于表示各个数据片段之间的顺序;
按照所述顺序,将所述数据片段聚合为套接字缓冲区的数据。
7.根据权利要求5或6所述的方法,其特征在于,还包括:
获取所述数据片段的存储标识;
当所述存储标识表示所述数据片段是采用数组形式存储时,按照数组形式,将所述数据片段聚合为套接字缓冲区的数据。
8.一种基于虚拟机的数据发送系统,其特征在于,所述系统应用于具有宿主机和客户机的虚拟机架构,所述系统包括:
数据获取模块,用于获取套接字缓冲区的数据;所述套接字缓冲区的数据的数据片段,采用链表形式存储,所述数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等;
数据片段映射模块,用于将所述数据片段映射至共享内存区域,以便客户机从所述共享内存区域读取所述数据片段,按照链表形式,将所述数据片段聚合为套接字缓冲区的数据。
9.根据权利要求8所述的系统,其特征在于,所述共享内存区域为IO环。
10.根据权利要求8所述的系统,其特征在于,所述数据片段映射模块包括:
数据片段标识单元,用于对所述数据片段进行标识,以表明所述数据片段是采用链表形式存储的;
数据片段映射单元,用于将标识后的数据片段映射至共享内存区域。
11.根据权利要求8所述的系统,其特征在于,还包括:
聚合方式获取模块,用于获取客户机的前端虚拟网络设备支持的数据片段聚合方式;
所述数据片段映射模块包括:
数组形式数据片段映射单元,用于当所述数据片段聚合方式表示所述客户机的前端虚拟网络设备只支持按照数组形式进行数据片段聚合时,每次将预设数目的数据片段映射至所述共享内存区域,所述预设数目小于或等于数组形式定义的数据片段的个数的最大值。
12.一种基于虚拟机的数据接收系统,其特征在于,所述系统包括:
数据片段获取模块,用于从共享内存区域中获取数据片段;其中,所述数据片段为宿主机的后端虚拟网络设备将套接字缓冲区中的数据的数据片段映射至所述共享内存区域而得到的结果,所述套接字缓冲区中的数据的数据片段采用链表形式存储,所述数据片段的大小与所述宿主机的物理网卡发送的数据包的大小相等;
第一数据片段聚合模块,用于按照链表形式,将所述数据片段聚合为套接字缓冲区的数据。
13.根据权利要求12所述的系统,其特征在于,所述第一数据片段聚合模块,包括:
链表属性获取单元,用于获取所述数据片段的链表属性;所述链表属性用于表示各个数据片段之间的顺序;
数据片段聚合单元,按照所述顺序,将所述数据片段聚合为套接字缓冲区的数据。
14.根据权利要求12或13所述的系统,其特征在于,还包括:
存储标识模块,用于获取所述数据片段的存储标识;
第二数据片段聚合模块,用于当所述存储标识表示所述数据片段是采用数组形式存储时,按照数组形式,将所述数据片段聚合为套接字缓冲区类型的数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310076510.2A CN103176833B (zh) | 2013-03-11 | 2013-03-11 | 一种基于虚拟机的数据发送方法、接收方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310076510.2A CN103176833B (zh) | 2013-03-11 | 2013-03-11 | 一种基于虚拟机的数据发送方法、接收方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103176833A CN103176833A (zh) | 2013-06-26 |
CN103176833B true CN103176833B (zh) | 2016-12-28 |
Family
ID=48636736
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310076510.2A Expired - Fee Related CN103176833B (zh) | 2013-03-11 | 2013-03-11 | 一种基于虚拟机的数据发送方法、接收方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103176833B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015013920A1 (zh) * | 2013-07-31 | 2015-02-05 | 华为技术有限公司 | 一种数据转发方法、装置及系统 |
CN103618809A (zh) * | 2013-11-12 | 2014-03-05 | 华为技术有限公司 | 一种虚拟化环境下通信的方法、装置和系统 |
CN103885813B (zh) * | 2013-12-27 | 2017-03-22 | 北京天融信软件有限公司 | 一种虚拟机环境下的抓包方法 |
CN103763403B (zh) * | 2013-12-30 | 2017-03-15 | 华为技术有限公司 | 报文流量控制方法及相关装置和计算节点 |
US9921867B2 (en) | 2013-12-30 | 2018-03-20 | Huawei Technologies Co., Ltd. | Negotiation between virtual machine and host to determine executor of packet flow control policy with reduced address space |
WO2017004269A1 (en) * | 2015-06-30 | 2017-01-05 | Vmware, Inc. | Methods and apparatus for software lifecycle management of a virtual computing environment |
CN106817388B (zh) * | 2015-11-30 | 2020-07-28 | 阿里巴巴集团控股有限公司 | 虚拟机、宿主机获取数据的方法、装置及访问数据的系统 |
CN105630576B (zh) * | 2015-12-23 | 2019-08-20 | 华为技术有限公司 | 一种虚拟化平台中的数据处理方法及装置 |
CN107122224A (zh) * | 2016-02-25 | 2017-09-01 | 中兴通讯股份有限公司 | 一种数据传输方法、虚拟机和宿主机 |
CN107943596A (zh) * | 2016-10-12 | 2018-04-20 | 阿里巴巴集团控股有限公司 | 进程通信方法、装置及系统 |
CN109992352B (zh) * | 2017-12-29 | 2021-10-08 | 迈普通信技术股份有限公司 | 数据传输方法、装置、电子设备及可读取存储介质 |
CN110688196B (zh) * | 2019-08-22 | 2022-03-01 | 曲阜师范大学 | 多人工智能云服务下的虚拟机的讯息处理方法 |
US11249789B2 (en) | 2020-01-06 | 2022-02-15 | International Business Machines Corporation | Network performance optimization in a hypervisor-based system |
CN114637574A (zh) * | 2022-02-18 | 2022-06-17 | 阿里巴巴(中国)有限公司 | 基于半虚拟化设备的数据处理方法、装置和系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101667144A (zh) * | 2009-09-29 | 2010-03-10 | 北京航空航天大学 | 一种基于共享内存的虚拟机通信方法 |
CN102075434A (zh) * | 2011-01-28 | 2011-05-25 | 华中科技大学 | 一种虚拟集群中的通信方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7480908B1 (en) * | 2005-06-24 | 2009-01-20 | Azul Systems, Inc. | Segmented virtual machine transport mechanism |
-
2013
- 2013-03-11 CN CN201310076510.2A patent/CN103176833B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101667144A (zh) * | 2009-09-29 | 2010-03-10 | 北京航空航天大学 | 一种基于共享内存的虚拟机通信方法 |
CN102075434A (zh) * | 2011-01-28 | 2011-05-25 | 华中科技大学 | 一种虚拟集群中的通信方法 |
Non-Patent Citations (2)
Title |
---|
Xen前端驱动接受数据过程;新浪博客;《http://blog.sina.com.cn/s/blog_6a18dd270100kehv.html》;20100803;第1-28段 * |
基于XEN的前端虚拟网卡技术的研究与改进;邹荣春;《中国优秀硕士学位论文全文数据库》;20110430;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN103176833A (zh) | 2013-06-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103176833B (zh) | 一种基于虚拟机的数据发送方法、接收方法及系统 | |
CN103942087B (zh) | 虚拟机热迁移方法及相关装置和集群系统 | |
CN104142867B (zh) | 数据处理装置及数据处理方法 | |
CN106301859B (zh) | 一种管理网卡的方法、装置及系统 | |
CN103414535B (zh) | 数据发送方法和数据接收方法及相关装置 | |
US9002970B2 (en) | Remote direct memory access socket aggregation | |
TW202016815A (zh) | 一種並行化執行區塊鏈交易的方法、裝置及系統 | |
US9742616B2 (en) | Device for indicating packet processing hints | |
US20150098469A1 (en) | Tcp segmentation offload in a server on a chip | |
US20110222557A1 (en) | Multi-stage large send offload | |
CN101158954B (zh) | 一种在计算机存储中识别重复数据的方法 | |
US20080148013A1 (en) | RDMA Method for MPI_REDUCE/MPI_ALLREDUCE on Large Vectors | |
CN103530167A (zh) | 一种虚拟机内存数据的迁移方法及相关装置和集群系统 | |
CN105335309B (zh) | 一种数据传输方法及计算机 | |
CN109542857B (zh) | 审计日志存储方法、查询方法、装置及相关设备 | |
CN114201268B (zh) | 一种数据处理方法、装置、设备及可读存储介质 | |
CN108965148A (zh) | 一种处理器及报文处理方法 | |
CN104841131A (zh) | 一种音频控制方法和装置 | |
CN114095567A (zh) | 数据访问请求的处理方法、装置、计算机设备及介质 | |
CN113051102B (zh) | 文件备份方法、装置、系统、存储介质和计算机设备 | |
CN103942149A (zh) | 用户态程序与内核交互报文的方法及系统 | |
EP3113015B1 (en) | Method and apparatus for data communication in virtualized environment | |
US9894012B2 (en) | Method and system to improve network connection locality on multicore systems | |
CN108829340B (zh) | 存储处理方法、装置、存储介质及处理器 | |
CN109218371B (zh) | 一种调用数据的方法和设备 |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20161228 Termination date: 20180311 |