一种测量虚拟机之间通信依赖关系的方法和系统的制作方法

文档序号:10626671阅读:330来源:国知局
一种测量虚拟机之间通信依赖关系的方法和系统的制作方法
【专利摘要】本发明提供一种测量虚拟机之间通信依赖关系的方法、系统和控制器。该测量系统包含服务器、控制器、交换设备和设置在服务器上的虚拟机,服务器对虚拟机的通信数据包进行采样,并将采样结果发送至控制器;控制器根据采样结果预分析各虚拟机之间的通信关系,并根据所述通信关系选择要测量的至少一个虚拟机对,以及获取所述虚拟机对之间的数据包转发路径,控制器在所述转发路径上选择一个负荷最小的交换设备来测量所述虚拟机对之间的通信流量;交换设备将所测量到的流量结果返回控制器;服务器上设置有深度分析模块,其通过软件交换机获取虚拟机对之间通信数据包的镜像,进行深度分析。
【专利说明】
一种测量虚拟机之间通信依赖关系的方法和系统
技术领域
[0001]本发明涉及虚拟机通信领域,尤其涉及一种测量虚拟机之间通信依赖关系的系统和方法,其应用在数据中心中以准确高效的获取虚拟机之间的通信依赖关系。
【背景技术】
[0002]随着服务器虚拟化技术的成熟,数据中心已广泛采用服务器虚拟化技术。利用虚拟化技术,一个物理服务器上承载了多个相互隔离的虚拟机。因此,通过将应用部署在虚拟机中,提高了服务器资源的利用率和应用部署的灵活性。同时,根据需求将一个虚拟机从一台服务器迀移到另一台服务器,以实现不同的资源优化目标,例如,负载均衡、节能优化和设备维护等。
[0003]采用虚拟化技术后,数据中心管理平台需要决定并且优化虚拟机的部署位置以提高资源利用率、满足应用性能需求并节省能源消耗。虚拟机之间的依赖关系是优化虚拟机部署位置需要考虑的重要因素。例如,通过将两个具有大量数据交互的虚拟机放置在同一台物理服务器上,以满足其通信带宽需求并节省网络资源。然而,在数据中心,部署在虚拟机中的应用是由用户(应用开发者)决定的,数据中心管理平台无法提前预知虚拟机里运行的应用和虚拟机之间的通信依赖关系,因此只能通过测量的方法获得。

【发明内容】

[0004]现有技术中公开了以下文献:
[0005]文献1:USA Pat.US 6785240B2,Cisco,“Methods and apparatus providing VPNtraffic matrix construct1n,,,2010.
[0006]文献I1:USA Pat.US 7457244B1,Cisco,“System and method for generating atraffic matrix in a network environment.,,,2008.
[0007]现有文献II1:Amin Tootoonchian, Monia Ghobadi, Yashar Ganjal1.0penTM: Traffic Matrix Estimator for OpenFlow Networks.1n Proc.0f Passive andActive Measurement Conference,Zurich, Switzerland, April7-9, 2010.
[0008]文献1: USA Pat.US 6785240 和文献 I1: USA Pat.US 7457244 提出了基于 NetFlow协议获取网络中流量矩阵的方法。NetFlow协议是由思科提出的用于统计网络中数据流流量的协议。在一个支持NetFlow协议的路由器的某个端口上配置了 NetFlow协议后,该路由器将记录经过该端口的所有流的流量大小,并将流量信息定期上报给预先配置的流量分析器。文献 1:USA Pat.US 6785240 提出了基于 NetFlow 协议获取 MPLS(Multiple-ProtocolLayer Switching,多协议标签交换)网络中某个MPLS标签对应的流量,通过收集网络中流和标签的对应关系,然后在流量分析器上对每个标签对应的所有流的流量进行汇聚以得到某个MPLS标签对应的流量。文献I1:USA Pat.US 7457244提出了基于NetFlow协议获取运营商网络中边缘节点对之间流量矩阵的方法,通过收集网络中BGP(B0rder GatewayProtocol,边界网关协议)下一跳的信息,获取每条流对应的出口边缘节点,然后在流量分析器上按照入口节点和出口节点对对所有流的流量进行汇聚以得到任意两个节点之间的流量。
[0009]直接采用上述基于NetFlow协议的方法获取虚拟机之间的通信流量需要在每个转发设备上收集所有流的统计信息,将消耗大量转发设备的CPU (Central ProcessingUnit,中央处理器)和存储资源;另外,采用上述方法只能获取虚拟机之间的通信流量,无法进一步分析虚拟机之间的通信依赖关系。
[0010]现有文献III提出了一种在OpenFlow网络中测量流量矩阵的方法。OpenFlow是一种软件定义网络的实现方式。在OpenFlow中,数据平面设备(OpenFlow交换机)通过流表对数据包的转发和处理进行抽象,逻辑集中式的控制器通过流表来控制数据平面设备对数据包的转发和处理。一条流表包括匹配域(Matching Filed)、优先级(Pr1rity)、操作(Act1n)和流量统计(Statistics)三部分。流量统计记录了与当前流表匹配的所有数据包的数目和流量大小。在OpenTM中,控制器记录了所有的通信流,然后针对每条通信流,控制器选择其转发路径上的一个交换机进行查询,获取该流的流量大小。最后,控制器按照特定的粒度将所有流的流量进行汇聚以得到流量矩阵。例如,以(源虚拟机IP,目的虚拟机IP)对的粒度进行汇聚则得到虚拟机之间的通信流量。
[0011]现有文献III所提方案利用了转发设备中已经存在的流表来获取流量统计信息。当已有流表匹配域的粒度较粗,如基于目的IP地址的匹配时,则无法利用所提方案获取任意两个虚拟机之间的通信流量。另外,该方案也不能获取除通信流量之外其他的通信依赖关系O
[0012]本发明提供了一种测量虚拟机之间依赖关系的方法和系统,以及一种测量虚拟机之间依赖关系的控制器。通过本发明实施方案测量虚拟机之间依赖关系时,不依赖转发设备中已经存在的流表,使得本发明的方案更加通用;此外,本发明实施方案通过预分析虚拟机的通信关系,只针对需要分析的虚拟机对写入测量流表,节省了系统资源;另外,通过合理设置新写入流表的优先级及转发操作,避免了用于测量的流表影响正常的数据包转发和处理;最后,本发明提出的方案支持不同协议层次通信依赖关系的测量,准确高效地获取了虚拟机之间的通信依赖关系,更好地支持了虚拟机部署优化或其他资源管理和优化任务。
[0013]在本发明的一个方面,提供了一种测量虚拟机之间通信依赖关系的方法,该方法包括以下步骤:采样步骤,对虚拟机的通信数据包进行采样,并发送采样结果;预分析步骤,收到所述采样结果后,根据采样结果预分析各虚拟机之间的通信关系;测量步骤,根据所述通信关系选择要测量的至少一个虚拟机对,获取所述虚拟机对之间的数据包转发路径,选择所述转发路径上的一个交换设备来测量所述虚拟机对之间的通信流量,并发送所测量到的通信流量结果。
[0014]此外该方法还包括,深度分析步骤,根据预分析得到的通信关系和测量到的通信流量结果或根据用户请求确定是否需要进行深度分析,如果需要,获取所述虚拟机对之间通信数据包的镜像,并进行深度分析,然后发送深度分析结果。
[0015]此外该方法还包括,所述测量步骤之后还包括流量分析步骤,根据测量到的通信流量结果,获取所述虚拟机对之间的通信流量速率和数据包的个数的速率;其中所述通信流量速率=总的通信流量/总的通信时间,所述数据包个数速率=总的数据包个数/总的通信时间。
[0016]此外该方法还包括,所述通信关系至少包含:所述虚拟机对地址,传输层信息和收集到的采样数据包个数。
[0017]此外该方法还包括,所述采样步骤包括:设置计数器,用来对数据包从I到N循环编号,初始化为O;设置ID值,其表示下一个待采样的数据包的编号,取值范围为I到N,其中ID值每N个数据包随机生成一次;所述采样步骤进一步包括以下步骤:步骤1,当收到一个数据包时,将计数器加1,然后判断计数器的值是否和ID值相同;步骤2,如果计数器值和ID相同,对当前数据包进行采样,并发送数据包的前B个字节;如果不同则执行步骤3 ;步骤3,如果计数器值和ID不同,则判断计数器值是否为N,如果是,则表示完成一轮采样,然后执行步骤4,否则,采样步骤对当前数据包的处理结束,等待接收和处理下一个数据包;步骤4,将计数器清0,并生成新的待采样的数据包编号ID。对当前的数据包处理结束,等待接收和处理下一个数据包,其中,所述N,B和ID值为正整数。
[0018]此外该方法还包括,采用写入流表的方式来测量所述虚拟机对的通信流量。
[0019]此外该方法还包括,其中所述交换设备为转发路径上可用流表数量最多或负荷最小的设备。
[0020]此外该方法还包括,所述一条流表至少包括匹配域、优先级、执行操作和统计值四个部分,所述匹配域包括所述虚拟机对源和目的MAC地址、源和目的IP地址、传输层协议类型和传输层端口号字段。
[0021]此外该方法还包括,当所述交换设备中支持多表流水线处理时,采用一个专门用于测量虚拟机之间通信流量的表,并将该表设置为多表流水线处理的第一个,然后向该表中写入包含所测量到的通信流量结果的流表,该流表的匹配域至少包含源和目IP的地址,优先级为默认值,操作为转发到多表流水线上的下一个表。
[0022]此外该方法还包括,当所述交换设备中支持单表处理时,采用所述虚拟机对源和目的IP地址作为匹配域查询所述交换设备单表中的流表,并根据查询到的流表在所述交换设备的单表中写入新流表。
[0023]此外该方法还包括,其中根据匹配域将在交换设备单表中查询到的流表分为三类,第一类为每条流表匹配域对应的包头集合都真包含所述虚拟机对源和目的IP地址对应的包头集合;第二类为每条流表匹配域对应的包头都包含在所述虚拟机对源和目的IP地址对应的包头集合中;第三类为每条流表匹配域对应的包头集合与所述虚拟机对源和目的IP地址对应的包头集合存在交集,但不存在一个被另一个包含的情况;所述第三类流表被优先处理,然后处理所述第一类流表,所述第二类流表直接作为测量流表使用。
[0024]此外该方法还包括,逐个处理第三类流表中的每个流表,具体的处理过程为:对于所述第三类流表中的每个流表,首先获取其匹配域、优先级和执行操作部分,然后计算匹配域与所述虚拟机对源和目的IP地址的对应的匹配域交集,最后在所述交换设备的单表中写入新流表,所述新流表的匹配域为所述计算得到的匹配域交集,所述新流表的优先级高于原流表的优先级,所述新流表的执行操作与原流表相同。
[0025]此外该方法还包括,处理第一类流表中的每个流表,具体的处理过程为:获取所有第一类流表中优先级最大值,然后在交换设备单表中写入新的流表,所述新流表匹配域包含所述虚拟机对源和目的IP地址,所述新流表的优先级高于所述优先级最大值,所述新流表的执行操作为转发到转发路径上所述交换设备的下一个交换设备。
[0026]在本发明的另一个方面,还提供了一种测量虚拟机之间通信依赖关系的系统,包括服务器、运行在服务器上的虚拟机、交换设备和控制器,其特征在于:服务器,对虚拟机的通信数据包进行采样,并将采样结果发送至控制器;控制器,根据采样结果预分析各虚拟机之间的通信关系,并根据所述通信关系选择要测量的至少一个虚拟机对,以及获取所述虚拟机对之间的数据包转发路径,并在所述转发路径上选择一个交换设备来测量所述虚拟机对之间的通信流量;交换设备,测量所述虚拟机对之间的通信流量,并将测量到的通信流量结果返回至控制器。
[0027]此外该系统还包括,所述系统包括设置在服务器上的深度分析模块,控制器根据预分析得到的通信关系和测量到的通信流量结果以及用户请求确定是否需要进行深度分析,如果需要,所述深度分析模块获取所述虚拟机对之间通信数据包的镜像,进行深度分析,并将分析结果返回控制器。
[0028]此外该系统还包括,控制器根据测量到的通信流量结果,获取所述虚拟机对之间的通信流量速率和数据包的个数的速率;
[0029]其中所述通信流量速率=总的通信流量/总的通信时间,所述数据包个数速率=总的数据包个数/总的通信时间。
[0030]此外该系统还包括,所述通信关系至少包含:所述虚拟机对地址,传输层信息和收集到的采样数据包个数。
[0031]此外该系统还包括,所述服务器中还包括软件交换机,其将交换设备转发到服务器的数据包转发到不同的虚拟机,或将虚拟机发送的数据包转发到与服务器直接相连的交换设备。
[0032]此外该系统还包括,所述交换设备的特征在于按照流表对数据包进行处理。
[0033]此外该系统还包括,其中所述交换设备为转发路径上可用流表数量最多或负荷最小的交换机,或转发路径上可用流表数量最多或负荷最小的软件交换机,所述软件交换机设置在服务器中。
[0034]此外该系统还包括,服务器中还包括采样模块,其中所述采样模块中设置有计数器,用来对数据包从I到N循环编号,初始化为O ;设置ID值,其表示下一个待采样的数据包的编号,取值范围为I到N,其中ID值每N个数据包随机生成一次;所述采样模块的采样过程为:
[0035]步骤1,当收到一个数据包时,将计数器加1,然后判断计数器的值是否和ID值相同;步骤2,如果计数器值和ID相同,对当前数据包进行采样,并发送数据包的前B个字节;如果不同则执行步骤3;
[0036]步骤3,计数器值和ID不同,则判断计数器值是否为N,如果是,则表示完成一轮采样,然后执行步骤4,否则,采样过程对当前数据包的处理结束,等待接收和处理下一个数据包;步骤4,将计数器清0,并生成新的待采样的数据包编号ID,进行下一轮采样处理;之后,采样过程对当前数据包的处理结束,等待接收和处理下一个数据包;其中,所述N,B和ID值为正整数。
[0037]此外该系统还包括,其中控制器在交换设备中写入流表用于测量虚拟机对的通信流量。
[0038]此外该系统还包括,所述一条流表至少包括匹配域、优先级、执行操作和统计值四个部分,所述匹配域包括源和目的MAC地址、源和目的IP地址、传输层协议类型和传输层端口号字段。
[0039]此外该系统还包括,当所述交换设备中支持多表流水线处理时,控制器采用一个专门用于测量虚拟机之间通信流量的表,并将该表设置为多表流水线处理的第一个,然后向该表中写入流表测量所述虚拟机对之间的通信流量,该流表的匹配域包含源和IP目的地址,优先级为默认值,操作为转发到多表流水线上的下一个表。
[0040]此外该系统还包括,当所述交换设备中支持单表处理时,控制器采用所述虚拟机对源和目的IP地址作为匹配域查询所述交换设备单表中的流表,并根据查询到的流表在所述交换设备的单表中写入新流表。
[0041]此外该系统还包括,控制器根据匹配域将在交换设备单表中查询到的流表分为三类,第一类为每条流表匹配域对应的包头集合都真包含所述虚拟机对源和目的IP地址对应的包头集合;第二类为每条流表匹配域对应的包头都包含在所述虚拟机对源和目的IP地址对应的包头集合中;第三类为每条流表匹配域对应的包头集合与所述虚拟机对源和目的IP地址对应的包头集合存在交集,但不存在一个被另一个包含的情况;控制器优先处理所述第三类流表,其次处理所述第一类流表,控制器将所述第二类流表直接作为测量流表使用。
[0042]此外该系统还包括,控制器逐个处理第三类流表中的每个流表,具体的处理过程为:对于所述第三类流表中的每个流表,首先获取其匹配域、优先级和执行操作部分,然后计算匹配域与所述虚拟机对源和目的IP地址的对应的匹配域交集,最后在所述交换设备的单表中写入新流表,所述新流表的匹配域为所述计算得到的匹配域交集,所述新流表的优先级高于原流表的优先级,所述新流表的执行操作与原流表相同。
[0043]此外该系统还包括,控制器处理第一类流表中的每个流表,具体的处理过程为:获取所有第一类流表中优先级最大值,然后在交换设备单表中写入新的流表,所述新流表匹配域包含所述虚拟机对源和目的IP地址,所述新流表的优先级高于所述优先级最大值,所述新流表的执行操作为转发到转发路径上所述交换设备的下一个交换设备。
[0044]在本发明的另一个方面,提供了一种测量虚拟机之间通信依赖关系的控制器,,包括采样数据存储模块,预分析模块,流量测量模块,其特征在于:采样数据存储模块,接收并存储从服务器收集到的虚拟机通信数据包采样结果;预分析模块,根据收集到的采样结果预分析服务器中各虚拟机之间的通信关系,并根据所述通信关系选择要测量的至少一个虚拟机对;流量测量模块,获取所述虚拟机对之间的数据包转发路径,选择所述转发路径上的一个交换设备来测量所述虚拟机对之间的通信流量,并接收由交换设备返回的测量到的通信流量结果。
[0045]此外该控制器还包括,深度分析控制模块,其用于请求服务器开启内部设置的深度分析模块并装载相关程序,并且发出查询深度分析结果请求,请求服务器响应该请求并返还深度分析结果。
[0046]此外该控制器还包括,结果分析模块,其根据流量测量模块测量到的通信流量结果,获取所述虚拟机对之间的通信流量速率和数据包的个数的速率;其中所述通信流量速率=总的通信流量/总的通信时间,所述数据包个数速率=总的数据包个数/总的通信时间。
[0047]此外该控制器还包括,所述通信关系至少包含:所述虚拟机对地址,传输层信息和收集到的采样数据包个数。
[0048]此外该控制器还包括,其中流量测量模块选择所述转发路径上可用流表数量最多或负荷最小的交换设备。
[0049]此外该控制器还包括,所述流量测量模块中还包括测量流表写入单元,其通过控制器在交换设备中写入用于流量测量的流表。
[0050]此外该控制器还包括,所述一条流表至少包括匹配域、优先级、执行操作和统计值四个部分,所述匹配域包括源和目的MAC地址、源和目的IP地址、传输层协议类型和传输层端口号字段。
[0051]本发明在测量虚拟机之间的通信流量方面,相比文献I和文献II,所提方案中,转发设备中不用记录每条流的流量统计信息,节省了转发设备的CPU和存储资源。相比文献III,所提方案不依赖转发设备中已经存在的流表,更加通用。所提方案的优势还在于通过预先分析虚拟机之间的通信关系,只针对互相通信的虚拟机对写入流表测量,在很大程度上减少了完成测量所需要的流表数量。同时,所提方案通过合理设置新写入流表的优先级以及转发操作,保证写入的用于测量的流表不会影响数据包的正常处理和转发。另外,除了测量虚拟机之间的通信流量,所提方案通过将转发设备和服务器结合,支持了不同协议层次通信依赖关系的测量,包括网络层、传输层和应用层。综上,采用所提方案,准确高效地获取了虚拟机之间的通信依赖关系,更好地支持虚拟机部署优化或其他资源管理和优化任务。
【附图说明】
[0052]图1示出了测量虚拟机之间通信依赖关系的数据中心系统结构图。
[0053]图2示出了数据中心系统中控制器功能模块图。
[0054]图3示出了数据中心系统中交换机功能模块图。
[0055]图4示出了数据中心系统中服务器中的软件交换机功能模块图。
[0056]图5示出了测量虚拟机通信依赖关系的流程图。
[0057]图6示出了预分析虚拟机通信关系的流程图。
[0058]图7示出了控制器中流量测量模块流程图。
[0059]图8示出了控制器中深度分析控制模块流程图。
[0060]图9示出了选择测量虚拟机之间通信流量的交换机的流程图。
[0061]图10示出了在交换机中写入用于测量的流表的流程图。
[0062]图11示出了图10中处理第三类流表#Flow3的流程图。
[0063]图12示出了交换机对数据包的处理流程图。
[0064]图13示出了软件交换机中数据包采样流程图。
[0065]图14示出了 #Flow流表分类示意图。
[0066]图15示出了控制器与交换机交互时序图。
[0067]图16示出了测量虚拟机之间通信依赖关系时序图。
[0068]图17示出了虚拟机IP地址表。
[0069]图18示出了交换机本地流表存储格式。
[0070]图19示出了虚拟机通信关系表格式。
[0071]图20示出了对于虚拟机140-147,控制器预分析得到的通信关系表。
[0072]图21示出了交换机剩余可用流表数量的表。
[0073]图22示出了交换机113中的流表。
[0074]图23示出了交换机113中写入的用于测量的流表。
[0075]图24示出了测量元数据表格式。
[0076]图25示出了虚拟机之间通信依赖关系表。
【具体实施方式】
[0077]在下文中,将参考附图详细地描述本发明的示例性实施例。
[0078]图1是根据本发明的一个实施例的系统结构图。具体由一个控制器(100),5个交换设备(交换机或路由器)(110-114)和四个服务器(120-123)组成。控制器和交换机以及服务器之间通过控制链路相连,用以传递控制指令和数据平面的信息。交换机之间通过物理链路相连。每个服务器与一个交换机相连:服务器120与交换机113 ;服务器121与交换机113 ;服务器122与交换机114 ;服务器123与交换机114。每个服务器内部由软件交换机(OVS,OpenvSwitch)、若干运行在服务器上的用户虚拟机(VM, Virtual Machine)和一个用于执行深度数据包检测(DPI, Deep Packet Inspect1n)功能的深度分析模块组成,该模块可以为虚拟机,也可以为运行在服务器中的一个程序。例如,服务器120内部包括:软件交换机130、用户虚拟机140和141以及深度分析模块150。每个用户虚拟机配置了一个IP地址,例如,图17记录了 VM 140-VM 147的IP地址。
[0079]图3示出了交换机的功能模块框图。包括:通信代理模块300,用以实现与控制器的通信;本地流表存储模块301,用以存储控制器写入到该交换机上的流表;交换机系统配置模块302,用以实现对交换机的配置;测量和转发模块303,用以处理转发到该交换机的数据包。
[0080]本发明采用了软件定义网络架构,控制器通过流表控制交换机对数据包的转发和处理。图18示出了本发明中交换机本地流表格式。如图18所示,一条流表项包括匹配域、优先级、执行操作和统计值四部分。匹配域规定了与该流表项匹配的数据包包头格式,常用的匹配域字段包括源和目的MAC地址,源和目的IP地址,传输层协议以及传输层所使用的端口号等字段。优先级的取值越大,优先级越高。执行操作规定了对匹配的数据包的处理操作,可能的选项包括转发到某个端口、丢弃、发送到控制器或者转发到下一个流表继续处理。统计值记录了与该流表项匹配的数据包的个数以及流量大小。本发明中流表的主要特征在于包含匹配域、优先级、执行操作和统计值四部分,其中流表匹配域字段内容、优先级定义方式、可能的执行操作以及统计值所包含的数据除了上述列出的之外,还可以包括其他方式,如在OpenFlow协议及其扩展中所定义的流表。
[0081]交换机根据本地存储的流表,对收到的数据包进行转发和处理。简单来说,交换机将收到的数据包与本地流表匹配,根据匹配的流表中的执行操作对数据包进行处理。其详细流程如图12所示。假设在步骤1200,交换机收到一个数据包。之后,步骤1201中,交换机解析数据包包头,获取流表匹配域中各字段的值,然后,交换机将其与本地存储的流表进行匹配。当流表匹配域中的某字段被设置为any时,该字段匹配任意值。另外,对于源IP字段和目的IP字段,可以只匹配该字段的前若干位。例如,当流表中源IP的值被设置为10.0.1.0/26时,表示匹配源IP地址的前26位。步骤1202判断是否存在匹配的流表项,如果不存在,执行步骤1207,将数据包发送到控制器,由控制器决定如何处理该数据包;如果存在匹配的流表项,执行步骤1203,判断是否存在多个匹配的流表项。如果只有一个匹配的流表项,交换机将其作为匹配结果,如步骤1208所示;如果存在多个匹配的流表项,交换机执行步骤1204,选择优先级最高的流表项作为匹配结果。获取匹配结果后,交换机执行步骤1205,更新匹配结果对应流表项的统计信息,然后在步骤1206中根据该流表项的执行操作处理数据包。
[0082]图4示出了本发明系统中软件交换机的功能模块。由于软件交换机最主要的任务是将交换机转发到服务器的数据包转发到不同的虚拟机,或将虚拟机发送的数据包转发到与服务器直接相连的交换机,因此软件交换机的大多数功能模块与交换机的功能模块相同。唯一多出来的为数据包采样模块403,其作用是对收到的数据包进行采样,并将采样的数据包包头若干个字节发送到控制器。
[0083]假设数据包采样模块被控制器配置为只发送数据包的前B个字节。图13示出了本发明一种可能的实现数据包采样的方案。在该方案中,采样模块从N个连续的数据包中,随机选择一个数据包,并将其包头的前B个字节上传到控制器。具体来说,由控制器负责开启或关闭数据包采样模块,因此当服务器在步骤1300中收到一个数据包后,在步骤1301中,它首先判断数据包采样模块是否开启。如果未开启,则数据包直接被转发至测量和转发模块进行处理,如步骤1307所示。如果开启,服务器执行步骤1302到1306实现对数据包的采样。在步骤1302,将计数器Count的值加I。Count用来对数据包从I到N进行循环编号,在开启采样模块时被初始化为O。然后,在步骤1303,服务器判断Count的值是否与ID相同,其中ID用来表示下一个待采样的数据包的编号,取值范围为1,2,...,N;每N个数据包随机生成一次。若两者取值不同,则直接执行步骤1305。否则,服务器对当前的数据包进行采样,将数据包的前B个字节发送到控制器,如步骤1304所示,然后执行步骤1305。在步骤1305,服务器判断当前数据包的编号Count是否等于N,如果是,则表明已经完成一轮采样,执行步骤1306,,否则,数据包采样模块对当前数据包的处理结束,在步骤1307中将当前数据包转发至测量与转发模块继续处理,并等待接收和处理下一个数据包。在步骤1306,服务器将数据包编号Count清零,并生成新的待采样数据包编号ID。然后执行步骤1307,将当前数据包转发至测量与转发模块继续处理,并等待接收和处理下一个数据包。服务器中测量与转发模块对数据包的处理流程与交换机对数据包的处理流程相同。需要说明,上述过程只是实现数据包采样模块的一种可能方案,在本发明中,还可以使用其他方案实现数据包采样模块。例如,可以将待采样的数据包编号ID设置为随机取值或固定取值;或者在采样过程中改变N的值,实现非均匀采样等。
[0084]图2示出了本发明控制器的功能模块。功能模块分为两部分,第一部分为一般控制器都具有的通用模块,包括:控制平面通信模块200,用来作为控制器与交换机和服务器通信的接口模块;网络拓扑存储模块201,用来存储当前的网络拓扑;路由计算模块202,用来计算两个虚拟机之间的转发路径,并将结果发送至流量测量模块。第二部分为实现测量虚拟机之间依赖关系所需要的模块,包括:采样数据包存储模块203,用来接收并存储从服务器收集到的虚拟机通信数据包采样结果;预分析模块204,用来分析虚拟机之间的相互通信关系,预分析模块还可根据各虚拟机之间的通信关系进行流量初步分析,并将初步分析结果返回管理员或用户,以供用户选择;流量测量模块205,获取所述虚拟机对之间的数据包转发路径,选择所述转发路径上的一个交换设备来测量所述虚拟机对之间的通信流量,并接收由交换设备返回的通信流量测量结果;深度分析控制模块206,用于请求服务器开启内部设置的深度分析模块并装载相关程序,并且发出查询深度分析结果请求,请求服务器响应该请求并返还深度分析结果。此外控制器中还包括了结果分析模块(在图2中未示出),其根据流量测量模块测量到的通信流量结果,获取所述虚拟机对之间的通信流量速率和数据包的个数的速率;整合模块(在图2中未示出),其将预分析模块得到的通信关系、流量测量模块测量到的通信流量结果和深度分析模块得到的深度分析结果整合,得到各虚拟机之间的通信依赖关系。
[0085]图5示出了根据本发明另一个实施例提供的用于测量虚拟机依赖关系的流程。首先,在步骤500,管理员或用户向控制器请求测量虚拟机之间的依赖关系并给出待测量的虚拟机集合(#VM)。所述虚拟机集合在图1中所示为:#VM为虚拟机140-147。然后,在步骤501,控制器获取包含虚拟机#VM的服务器集合#Server,对于虚拟机140-147,该集合为服务器120-123。然后,在步骤502,对于《Server中的每台服务器,控制器向该服务器上的软件交换机发出控制命令,开启数据包采样模块并对其进行配置。例如对于图13所示的采样模块实现方案,控制器需要设置N和B的取值。控制器在设置B的取值时,需要保证上传到控制器的数据包中至少包含流表匹配域中定义的各字段,如,源MAC地址,目的MAC地址,源IP地址,目的IP地址以及传输层协议和源端口号、目的端口号。控制器对收到的数据包采样进行缓存,然后在步骤503利用这些数据包采样分析虚拟机之间的通信关系。得到虚拟机之间的通信关系后,控制器在步骤504启动流量测量模块进一步测量虚拟机之间的通信流量;最后,控制器根据虚拟机之间的通信关系以及通信流量测量结果,启动服务器中的深度分析模块,进一步分析虚拟机之间在应用层的通信依赖关系。
[0086]图6示出了控制器中预分析虚拟机之间通信关系的流程。首先,在步骤600中,控制器将虚拟机之间的通信关系表初始化为空表。虚拟机之间的通信关系表的格式如图19所示。其中,每一项通信关系主要包含四个元素,即源虚拟机IP、目的虚拟机IP、传输层信息和收到的采样数据包个数。采样数据包个数用来对虚拟机之间的通信流量进行初判,并将初判结果返回管理员或用户,以供用户选择。由于两个相互通信的虚拟机在传输层可能存在多个依赖,因此用子表的形式记录传输层信息。每个子表的表项包括传输层协议以及传输层所使用的源端口号和目的端口号。
[0087]步骤601判断是否仍有未处理的数据包采样。如果所有的数据包采样已经处理完毕,控制器保存虚拟机之间通信关系表并退出该流程;否则,控制器执行步骤602,从数据包采样存储模块中取出新的数据包采样进行处理。
[0088]步骤603-607为对新数据包采样的处理过程。在步骤603中,控制器分析数据包采样,获取该数据包中的源IP地址、目的IP地址以及传输层信息(协议,源端口号,目的端口号)。源IP地址、目的IP地址以及传输层协议通过解析IP包头获得。源端口号和目的端口号通过解析传输层包头获得。
[0089]步骤604,控制器判断当前通信关系表中是否已经包含了步骤603中分析得到的源IP和目的IP项。例如,若步骤603分析得到的源IP为10.1.0.1,目的IP为10.1.0.2 ;且当前通信关系表的内容如图19所示,则通信关系表中已经包含了源虚拟机IP和目的虚拟机IP的表项。若分析得到的源IP为10.1.0.2,目的IP为10.1.0.4 ;则当前通信关系表中不包含该项。
[0090]当通信关系表中不包含步骤603分析得到的源IP,目的IP项时,需要执行步骤605,在通信关系表中新建一行,并写入源虚拟机和目的虚拟机的IP地址。
[0091]完成步骤605后,保证通信关系表中包含了步骤603分析得到的源IP和目的IP项。因此在步骤606中,控制器首先查询该表项中的传输层信息,判断是否已经包含步骤603分析得到的传输层信息,若是,则执行步骤607,将对应表项采样数据包个数加1,然后返回执行步骤601 ;否则,先执行步骤608,将步骤603分析得到的传输层信息加入该表项,并将采样数据包个数设置为1,然后返回执行步骤601。
[0092]图20示出了针对虚拟机140-147,控制器分析得到的一种可能的虚拟机通信关系表。该表表示虚拟机140和虚拟机144、145之间通过TCP协议互相交互,虚拟机141和虚拟机144、145之间通过TCP协议互相交互。虚拟机142向虚拟机146、147通过UDP协议发送数据,虚拟机143向虚拟机146、147通过UDP协议发送数据。另外,从该表得出,由虚拟机145发送到虚拟机140的通信流量可能最大。
[0093]图7示出了控制器流量测量模块的流程。步骤700,控制器启动流量测量模块。之后,步骤701和步骤702用来逐个对所有需要测量通信流量的虚拟机对进行测量。其中,需要测量通信流量的虚拟机对可以由管理员指定,如果管理员不指定,则控制器默认对预分析结果中所有存在通信关系的虚拟机对进行测量。步骤701判断是否所有需要测量的虚拟机对已经测量,步骤702取出下一个需要测量的虚拟机对,并用源虚拟机IP和目的虚拟机IP初始化变量#SrcIP和#DstIP,例如,对于测量虚拟机140和虚拟机144之间的通信流量,#SrcIP将被初始化为10.1.0.l,#DstIP将被初始化为10.1.0.5。之后,步骤703-705写入流表测量源虚拟机和目的虚拟机之间的通信流量。
[0094]步骤703,控制器调用路由计算模块,获取从#SrcIP到#DstIP的转发路径。之后,在步骤704,控制器从转发路径上选择一个交换机用来完成测量任务。具体选择过程如图9所示,首先,在步骤900,控制器根据路由计算模块的计算结果,初始化转发路径上所有交换机的集合#SW,由于软件交换机也实现测量与转发的功能,因此#SW中也包括软件交换机。然后,在步骤901-902,控制器查询#SW中每个交换机中剩余流表的数量,然后选择剩余流表数量最多的交换机用来完成测量任务,控制器也可选择负荷较小的交换机来完成测量任务。例如当 #SrcIP= 10.1.0.1 (VM140), SDstIP = 10.1.0.5 (VM144)时,该转发路径为虚拟机140->软件交换机130->交换机113->交换机111->交换机114_>软件交换机132_>虚拟机144。因此#SW= {软件交换机130,交换机113,交换机111,交换机114,软件交换机132}。对于图21中所示的交换机剩余流表数量,交换机113将被选择用来完成测量任务。
[0095]测量过程中,若由于交换机故障或者路由变化导致从#SrcIP到#DstIP的转发路径发生变化,控制器通信模块将该消息转发至流量测量模块。流量测量模块收到该消息后,首先删除在原来的交换机上写入的用于测量的流表。然后,针对虚拟机对(#SrcIP, #DstIP),重新执行步骤702到步骤707,选择新的交换机用来完成测量任务。
[0096]步骤705,控制器在步骤704所选择出的交换机上写入用于测量的流表。图10为图7中步骤705的具体流程。首先,在步骤1000中,控制器启动测量流表写入单元(测量流表写入单元位于图2的测量流量模块中,在图2中未示出),并初始化源IP地址#SrcIP,目的IP地址#DstIP以及待写入流表的交换机#Switch等输入参数。由于新写入的用于测量的流表的匹配域可能会和交换机中已有的流表的匹配域存在交集,因此为避免出现冲突,在写入用于测量的流表时要仔细处理。考虑到有些交换机支持多表流水线处理,也即交换机中存在多个流表,当收到数据包后,交换机先将其与第一个流表中的表项进行匹配,若匹配的流表项的操作为转发到下一个表,则交换机继续将该数据包与下一个流表中的表项匹配,依次类推;而有些交换机只能支持单表处理,针对这两种不同情况,在写入流表时的处理方法不同。因此,在步骤1001,控制器根据交换机#Switch是否能支持多表流水线处理分两种情况实现写入流表的过程。步骤1002-1006是针对第一种情况,即交换机#Switch只支持单表处理的流程,步骤1007-1008是针对第二种情况,即交换机#Switch支持多表流水线处理的流程。下面分别介绍。
[0097]对于第一种情况,基本的解决思路是通过合理设置新写入的流表的优先级和执行操作,使其在不影响数据包正常转发的情况下能够完成测量任务。具体过程如下,在步骤1002中,控制器以虚拟机对的源和目的IP地址(#SrcIP,#DstIP)为匹配域查询SSwitch中的流表,将查询结果的流表集合记作#Fl0w0需要说明,与流表匹配时考虑所有字段不同,查询时只考虑源IP和目的IP字段是否匹配。因此,#Flow包含了所有匹配域和(#SrcIP,#DstIP)对应的匹配域存在交集的流表。之后,在步骤1003,控制器根据每条流表的匹配域与(#SrcIP,#DstIP)对应的匹配域的关系将#Flow中的流表进行分类。所述(#SrcIP,#DstIP)对应的匹配域是指将匹配域源IP字段设置为#SrcIP,目的IP字段设置为#DstIP,其他字段设置为any。每条流表的匹配域对应特定特征的数据包的集合,例如(#SrcIP, #DstIP)对应的匹配域可看作源IP地址为#SrcIP,目的IP地址为SDstIP的数据包的集合。上述查询过程保证了 #Flow中每条流表的匹配域对应的包头集合与(#SrcIP, #DstIP)对应的包头集合(特指(#SrcIP,#DstIP)对应的匹配域对应的包头集合)存在交集。图14示出了 #flow分类示意图,如图14所示,根据包头集合的关系将#Flow中的流表分为三类:其中,#Flowl中每条流表匹配域对应的包头集合都真包含(#SrcIP,#DstIP)对应的包头集合;也即,若数据包能够匹配(#SrcIP,#DstIP)对应的匹配域,则它也一定能够匹配#Flowl中每条流表的匹配域。#Flow2中每条流表匹配域对应的包头集合都包含在(#SrcIP,#DstIP)对应的包头集合中;也即,若数据包能够匹配#Flow2中某条流表的匹配域,则它也一定能够匹配(#SrcIP,#DstIP)对应的匹配域。#Flow3为其他流表项,这种情况下,#Flow3中的每条流表匹配域对应的包头集合与(#SrcIp,#DstIP)对应的包头集合存在交集,但不存在一个被另一个包含的情况。也即,对于#Flow3中的任一流表项,存在数据包能够与该流表项匹配,但不能够与(#SrcIP,#DstIP)对应的匹配域匹配。完成分类后,在步骤1004,控制器首先逐个处理#Flow3中的流表项,处理过程如图11所示。具体来说,对于每条流表,控制器在步骤1100中获取其匹配域#CMF,优先级#CPR和操作#CAC’然后在步骤1101中求匹配域#CMF和(#SrcIP,#DstIP)对应的匹配域的交集,并将其记作#CMF 1,最后,在步骤1102中,控制器在交换机#Switch中写入新的流表,流表的匹配域为#CMF1,优先级为#CPR+1,操作为UCAC0由于和#CMF1匹配的数据包同时会和#Flow3中原流表的匹配域#CMF匹配,因此这里将优先级加1,保证这些数据包会按照新写入的流表处理,从而新写入的流表的统计值会记录这些数据包的个数和流量大小,达到测量的目的。同时,由于新写入的流表的操作和#Flow3中原流表相同,因此,不会影响正常的数据包转发处理。需要说明,在具体实现时,只需保证新写入的流表的优先级高于原有流表的优先级#CPR,不用将其限制为#CPR+1.
[0098]处理完#Flow3中的流表后,控制器在步骤1005中逐个处理#Flowl中的流表,获取所有流表的优先级的最大值,记作#MP。然后,控制器在步骤1006向交换机#Switch写入新的流表,其匹配域为(#SrcIP,#DstIP),优先级为#MP+1,操作为转发到步骤703所获取的转发路径上的下一个交换机。这里提高优先级的目的同上,因此,也只需要保证新写入的流表的优先级高于优先级#MP,不用将其限制为#MP+1.
[0099]第二类流表直接作为测量流表使用,不做特殊处理。
[0100]下面以图22所示交换机113中的流表为例说明上述过程。控制器以源IP为10.1.0.1、目的IP为10.1.0.5查询交换机113中的流表,查询结果#Flow ={#5,#9,#10,#11},括号里的数字为流表的索引。根据所述分类原则,SFlowl = {#5,#9},因为第5条流表和第9条流表只匹配目的IP地址,且包含了目的IP 10.1.0.5,因此从
10.1.0.1发送到10.1.0.5的数据包一定会与这两条流表匹配。#Flow2 = {#10},因为第10条流表除了需要匹配源IP和目的IP,还需要匹配TCP端口号,因此与该流表匹配的数据包一定是从10.1.0.1发送到10.1.0.5的。#Flow3= {#11},因为第11条流表需要匹配目的IP和目的TCP端口号,因此只有从10.1.0.1发送到10.1.0.5,且采用了 TCP协议,目的端口为4973的数据包才会与该流表匹配。得到上述分类结果后,根据所述过程,需要在交换机113中写入两条流表,第一条是在步骤1003中处理#Flow3中写入,具体内容如图23中(a)所示;第二条是在步骤1006中写入,具体内容如图23中(b)所示。在所示内容中,我们假设新写入的两条流表的索引分别为#12和#13。
[0101]对于第二种情况,解决思路是将流表写入一个专门用于测量的表。具体过程如下,在步骤1007,控制器在#Switch中设置一个专门用于测量的表,并将该表设置为多表流水线处理的第一个表。如果#Switch中已经设置了用于测量的表,则跳过步骤1007。然后,在步骤1008,控制器向#Switch中专门用于测量的表中写入新的流表,该流表的匹配域为(#SrcIP, #DstIP),优先级为默认值,操作为转发到多表流水线上的下一个表。
[0102]在交换机上写入流表后,控制器在测量元数据表中记录测量信息,如步骤706所示。测量元数据表的格式如图24所示,包括:源虚拟机、目的虚拟机;所选择的交换机编号;在该交换机中新写入的用于测量的流表索引;该交换机中所有用于测量的流表的索引,每条流表的统计值,当前的时间,也即开始测量的时间。元数据还包括测量结束时间,以及结束时每条流表的统计值。这些信息将在测量结束时获取。用于测量的流表包括新写入的流表和#Flow2中的流表。
[0103]针对所有互相通信的虚拟机对写入测量流表后,在步骤707,控制器等待一段时间#T1,该时间可由管理员在请求测量虚拟机之间依赖关系时指定。
[0104]之后,在步骤708,控制器根据测量元数据表,对于表中的每个源虚拟机和目的虚拟机对,控制器根据交换机编号和用于测量的流表索引,查询匹配流表的统计值并记录在测量元数据表中。控制器也将记录测量结束的时间。
[0105]然后,在步骤709,控制器分析测量元数据表,获取源虚拟机和目的虚拟机的通信流量速率,和数据包个数的速率。通信流量(数据包个数)速率=总的通信流量(总的数据包个数)/总的通信时间。总的通信流量(数据包个数)等于测量结束时所有用于测量的流表的流量和(数据包个数和)减去测量开始时所有用于测量的流表的流量和(数据包个数和)。完成分析后,控制器记录通信流量(数据包个数)速率。
[0106]最后,在步骤710,控制器根据测量元数据表,删除新写入的用于测量的流表。最后,控制器删除测量元数据表。
[0107]上述过程涉及控制器与交换机之间的交互,一种可能的交互时序如图15所示。首先,控制器发出连接请求,交换机收到连接请求后,判断是否为合法连接,若为合法连接,则响应控制器的连接请求。连接建立之后,控制器向交换机发出控制指令和相应的数据,每条控制指令都会携带控制类型信息,且数据由控制指令的类型决定。如上所述,可能的控制指令类型包括(I):按照匹配域查询流表,该类型的控制指令中携带的数据为匹配域;(2):向交换机中写入流表,该类型的控制指令中携带的数据为待写入的流表;(3):按照索引查询流表,该类型的控制指令中携带的数据为流表索引值。交换机收到控制指令后,按照控制指令的类型执行特定的处理,并将处理结果返回给控制器。例如,对于上述指令(1),交换机计算匹配域与指定匹配域存在交集的流表,并将结果返回控制器;对于上述指令(2),交换机在本地流表存储模块中写入流表并将是否成功写入的结果返回控制器;对于上述指令
(3),交换机按照索引值查询流表,并将查询结果返回控制器。本发明不局限于上述交互时序及控制指令类型,例如,在其他可能的实现中,控制器与交换机之间存在长期连接,因此在发送控制指令之前不需要建立连接的过程。图15所示出的控制器和交换机之间的交互时序能够应用在本发明实施例的测量系统和上述各方法流程中。
[0108]图8示出了控制器中深度分析控制模块的流程。步骤800,控制器启动深度分析控制模块,并初始化虚拟机对集合#VM。在步骤801和802,控制器逐个获取#VM中的虚拟机对进行检测,当前的虚拟机对被记作#VM 10
[0109]步骤803判断#VM I是否需要进行深度分析。管理员在初始请求中指定需要执行深度数据包检测的虚拟机对,或者需要执行深度数据包检测的条件,例如针对某些特定TCP端口需要进行深度数据包检测,或者当虚拟机之间的通信流量超过某一阈值时执行深度数据包检测。另一种可能的方案是,控制器将通信流量的测量结果返回管理员,管理员根据该结果指定需要执行深度数据包检测的虚拟机对。如果管理员不指定,则控制器默认对所有具有通信关系的虚拟机对执行深度数据包检测。
[0110]对于需要进行深度数据包检测的虚拟机对#VM I,步骤804-806在承载该虚拟机对的服务器#SVR1中的深度分析模块中安装用于深度数据包检测的软件。之后,在步骤807,控制器向服务器#SVR1的软件交换机发送指令,将所有属于该虚拟机对的数据包镜像到#5¥1?1中的深度分析模块。最后,控制器在虚拟机对集合#VM中删除#VM I,并转到步骤801尝试获取下一个虚拟机对。
[0111]当对所有虚拟机执行完上述步骤后,如步骤809所示,控制器等待一段时间町2,该时间由管理员设定。最后,控制器查询服务器,获取深度分析结果,将结果保存之后退出深度分析控制模块。
[0112]完成所有后,控制器将获得待测虚拟机之间的通信依赖关系。一种可能的结果如图25所示。所得依赖关系中包括虚拟机之间的通信流量信息、虚拟机之间通信的传输层信息。所得通信依赖关系中的传输层信息包括传输层的协议及端口号。例如,在图25所示结果中,VM140和VM145通过TCP协议交互,且两者之间建立了两个TCP连接。除此之外,所得通信依赖关系中还包含了应用层的依赖关系。图25所示为管理员指定对TCP协议且目的端口号为9906的数据包进行深度数据包检测的结果。结果包括目的端口号为9906对应的TCP连接所使用的应用层协议以及相应请求的平均时间间隔。例如,在图25所示结果中,对于VM141和VM145之间的TCP连接,应用层协议为HTTP,且HTTP请求的平均时间间隔为
1.85s.
[0113]图16示出了测量虚拟机通信依赖关系的时序图。如图所示,管理员/用户首先提交测量虚拟机依赖关系请求,该请求将指定待测量的虚拟机。收到该请求后,控制器请求相应的服务器启动数据包采样模块。之后,服务器响应控制器请求,启动数据包采样模块,并将采样数据包发送到控制器。然后,控制器等待一段时间TO后,请求服务器停止数据包采样,服务器响应该请求,关闭数据包采样模块。控制器然后根据采样数据包,执行图6所示流程,预分析虚拟机之间的通信关系图。
[0114]得到虚拟机之间的通信关系图后,控制器根据管理员/用户的配置将预分析结果返回给管理员/用户。然后,管理员/用户提交流量测量请求,指定需要测量的虚拟机对。如果管理员/用户不指定需要测量的虚拟机对,则控制器默认对预分析结果中所有具有通信关系的虚拟机对进行测量。之后,对于每一个需要测量的虚拟机对,控制器首先选择交换机用来完成测量任务,然后请求查询该交换机中与(源IP,目的IP)匹配的流表项。交换机返回查询结果后,控制器计算需要写入的流表项,然后请求交换机写入流表项。交换机响应请求并在本地流表中写入相应的流表项。之后,控制器等待一段时间Tl,然后请求交换机查询相应流表项对应的通信流量,交换机响应请求并返回查询结果。之后,控制器根据交换机返回的结果计算虚拟机对之间的通信流量。
[0115]类似上面的过程,得到虚拟机对之间的通信流量后,控制器根据管理员/用户的配置将通信流量结果返回给管理员/用户。然后,管理员/用户提交深度数据包检测请求,指定需要进行深度数据包检测的虚拟机对,该请求也在提交测量虚拟机依赖关系时提交。如果管理员/用户不指定需要进行深度数据包检测的虚拟机对,则控制器默认对所有具有通信关系的虚拟机对执行深度数据包检测。之后,对于每一个需要执行深度数据包检测的虚拟机对,控制器请求相应的服务器开启深度分析模块并请求安装用于深度数据包检测的软件,服务器响应控制器请求开启深度分析模块并安装相应软件。然后,控制器请求相应的软件交换机将数据包镜像至深度分析模块,软件交换机响应请求执行数据包镜像。之后,等待一段时间T2,控制器向服务器发出查询深度分析结果的请求,服务器响应该请求并返回深度数据包检测结果。
[0116]最后,控制器整合预分析结果、通信流量测量结果以及深度分析结果,将最终的虚拟机之间通信依赖关系的测量结果返回给用户,具体的通信依赖关系至少包含虚拟机对之间的通信流量信息和传输层信息。
[0117]综上所述,所提方案通过结合数据包采样、主动写入流表和在服务器中使用专门的深度分析模块进行深度数据包检测和分析,高效的实现了虚拟机之间通信依赖关系的测量。特别地,所提方案通过数据包采样来预先分析虚拟机之间的通信关系,只针对互相通信的虚拟机对写入流表测量,在很大程度上减少完成测量所需要的流表数量。同时,所提方案通过合理设置新写入流表的优先级以及转发操作,保证写入的用于测量的流表不会影响正常的数据包处理和转发。数据中心资源管理程序能够使用所提方案得到的虚拟机之间的依赖关系表优化虚拟机的部署,提高物理资源利用率和不同应用的性能。
【主权项】
1.一种测量虚拟机之间通信依赖关系的方法,所述方法包括以下步骤: 采样步骤,对虚拟机的通信数据包进行采样,并发送采样结果; 预分析步骤,收到所述采样结果后,根据采样结果预分析各虚拟机之间的通信关系;测量步骤,根据所述通信关系选择要测量的至少一个虚拟机对,获取所述虚拟机对之间的数据包转发路径,选择所述转发路径上的一个交换设备来测量所述虚拟机对之间的通信流量,并发送所测量到的通信流量结果。2.根据权利要求1所述的方法,还包括以下步骤: 深度分析步骤,根据预分析得到的通信关系和测量到的通信流量结果或根据用户请求确定是否需要进行深度分析,如果需要,获取所述虚拟机对之间通信数据包的镜像,并进行深度分析,然后发送深度分析结果。3.根据权利要求1或2所述的方法,其特征在于, 所述测量步骤之后还包括流量分析步骤,根据测量到的通信流量结果,获取所述虚拟机对之间的通信流量速率和数据包的个数的速率; 其中所述通信流量速率=总的通信流量/总的通信时间,所述数据包个数速率=总的数据包个数/总的通信时间。4.根据权利要求1或2所述的方法,其特征在于, 所述通信关系至少包含:所述虚拟机对地址,传输层信息和收集到的采样数据包个数。5.根据上述权利要求1或2所述的方法,其特征在于,所述采样步骤包括: 设置计数器,用来对数据包从I到N循环编号,初始化为O ;设置ID值,其表示下一个待采样的数据包的编号,取值范围为I到N,其中ID值每N个数据包随机生成一次;所述采样步骤进一步包括以下步骤: 步骤1,当收到一个数据包时,将计数器加1,然后判断计数器的值是否和ID值相同;步骤2,如果计数器值和ID相同,对当前数据包进行采样,并发送数据包的前B个字节;如果不同则执行步骤3; 步骤3,如果计数器值和ID不同,则判断计数器值是否为N,如果是,则表示完成一轮采样,然后执行步骤4,否则,采样步骤对当前数据包的处理结束,等待接收和处理下一个数据包; 步骤4,将计数器清O,并生成新的待采样的数据包编号ID。对当前的数据包处理结束,等待接收和处理下一个数据包; 其中,所述N,B和ID值为正整数。6.根据权利要求1或2所述的方法,其特征在于, 采用写入流表的方式来测量所述虚拟机对的通信流量。7.根据上述权利要求1,2或6所述方法,其特征在于, 其中所述交换设备为转发路径上可用流表数量最多或负荷最小的设备。8.根据权利要求6所述的方法,其特征在于, 所述一条流表至少包括匹配域、优先级、执行操作和统计值四个部分,所述匹配域包括所述虚拟机对源和目的MAC地址、源和目的IP地址、传输层协议类型和传输层端口号字段。9.根据上述权利要求8所述的方法,其特征在于, 当所述交换设备中支持多表流水线处理时,采用一个专门用于测量虚拟机之间通信流量的表,并将该表设置为多表流水线处理的第一个,然后向该表中写入流表测量所述虚拟机对之间的通信流量,该流表的匹配域至少包含源和目的IP地址,优先级为默认值,操作为转发到多表流水线上的下一个表。10.根据上述权利要求8所述的方法,其特征在于, 当所述交换设备中支持单表处理时,采用所述虚拟机对源和目的IP地址作为匹配域查询所述交换设备单表中的流表,并根据查询到的流表在所述交换设备的单表中写入新流表。11.根据权利要求10所述的方法,其特征在于, 其中根据匹配域将在交换设备单表中查询到的流表分为三类,第一类为每条流表匹配域对应的包头集合都真包含所述虚拟机对源和目的IP地址对应的包头集合;第二类为每条流表匹配域对应的包头都包含在所述虚拟机对源和目的IP地址对应的包头集合中;第三类为每条流表匹配域对应的包头集合与所述虚拟机对源和目的IP地址对应的包头集合存在交集,但不存在一个被另一个包含的情况;所述第三类流表被优先处理,然后处理所述第一类流表,所述第二类流表直接作为测量流表使用。12.根据权利要求11所述的方法,其特征在于, 逐个处理第三类流表中的每个流表,具体的处理过程为:对于所述第三类流表中的每个流表,首先获取其匹配域、优先级和执行操作部分,然后计算匹配域与所述虚拟机对源和目的IP地址对应的匹配域的交集,最后在所述交换设备的单表中写入新流表,所述新流表的匹配域为所述计算得到的匹配域交集,所述新流表的优先级高于原流表的优先级,所述新流表的执行操作与原流表相同。13.根据权利要求11或12所述的方法,其特征在于, 处理第一类流表中的每个流表,具体的处理过程为:获取所有第一类流表中优先级最大值,然后在交换设备单表中写入新的流表,所述新流表匹配域包含所述虚拟机对源和目的IP地址,所述新流表的优先级高于所述优先级最大值,所述新流表的执行操作为转发到转发路径上所述交换设备的下一个交换设备。14.一种测量虚拟机之间通信依赖关系的系统,包括服务器、运行在服务器上的虚拟机、交换设备和控制器,其特征在于: 服务器,对虚拟机的通信数据包进行采样,并将采样结果发送至控制器; 控制器,根据采样结果预分析各虚拟机之间的通信关系,并根据所述通信关系选择要测量的至少一个虚拟机对,以及获取所述虚拟机对之间的数据包转发路径,并在所述转发路径上选择一个交换设备来测量所述虚拟机对之间的通信流量; 交换设备,测量所述虚拟机对之间的通信流量,并将测量到的通信流量结果返回至控制器。15.根据权利要求14所述的系统,其特征在于, 所述系统包括设置在服务器上的深度分析模块,控制器根据预分析得到的通信关系和测量到的通信流量结果以及用户请求确定是否需要进行深度分析,如果需要,所述深度分析模块获取所述虚拟机对之间通信数据包的镜像,进行深度分析,并将分析结果返回控制器。16.根据权利要求14或15所述的系统,其特征在于, 控制器根据测量到的通信流量结果,获取所述虚拟机对之间的通信流量速率和数据包的个数的速率; 其中所述通信流量速率=总的通信流量/总的通信时间,所述数据包个数速率=总的数据包个数/总的通信时间。17.根据权利要求14或15所述的系统,其特征在于, 所述通信关系至少包含:所述虚拟机对地址,传输层信息和收集到的采样数据包个数。18.根据权利要求14或15所述的系统,其特征在于, 所述服务器中还包括软件交换机,其将交换设备转发到服务器的数据包转发到不同的虚拟机,或将虚拟机发送的数据包转发到与服务器直接相连的交换设备。19.根据权利要求14或15所述的系统,其特征在于, 所述交换设备的特征在于按照流表对数据包进行处理。20.根据权利要求14,15所述系统,其特征在于, 其中所述交换设备为转发路径上可用流表数量最多或负荷最小的交换机,或转发路径上可用流表数量最多或负荷最小的软件交换机,所述软件交换机设置在服务器中。21.根据权利要求14或15的系统,其特征在于, 服务器中还包括采样模块,其中所述采样模块中设置有计数器,用来对数据包从I到N循环编号,初始化为O ;设置ID值,其表示下一个待采样的数据包的编号,取值范围为I到N,其中ID值每N个数据包随机生成一次;所述采样模块的采样过程为: 步骤1,当收到一个数据包时,将计数器加1,然后判断计数器的值是否和ID值相同; 步骤2,如果计数器值和ID相同,对当前数据包进行采样,并发送数据包的前B个字节;如果不同则执行步骤3; 步骤3,计数器值和ID不同,则判断计数器值是否为N,如果是,则表示完成一轮采样,然后执行步骤4,否则,采样过程对当前数据包的处理结束,等待接收和处理下一个数据包; 步骤4,将计数器清0,并生成新的待采样的数据包编号ID,进行下一轮采样处理;之后,采样过程对当前数据包的处理结束,等待接收和处理下一个数据包; 其中,所述N,B和ID值为正整数。22.根据上述权利要求14或15所述的系统,其特征在于, 其中控制器在交换设备中写入流表用于测量虚拟机对的通信流量。23.根据上述权利要求22所述的系统,其特征在于, 所述一条流表至少包括匹配域、优先级、执行操作和统计值四个部分,所述匹配域包括源和目的MAC地址、源和目的IP地址、传输层协议类型和传输层端口号字段。24.根据上述权利要求22或23所述的系统,其特征在于, 当所述交换设备中支持多表流水线处理时,控制器采用一个专门用于测量虚拟机之间通信流量的表,并将该表设置为多表流水线处理的第一个,然后向该表中写入流表测量所述虚拟机对之间的流量,该流表的匹配域至少包含源和目的IP地址,优先级为默认值,操作为转发到多表流水线上的下一个表。25.根据上述权利要求22或23所述的系统,其特征在于, 当所述交换设备中支持单表处理时,控制器采用所述虚拟机对源和目的IP地址作为匹配域查询所述交换设备单表中的流表,并根据查询到的流表在所述交换设备的单表中写入新流表。26.根据权利要求25所述的系统,其特征在于, 控制器根据匹配域将在交换设备单表中查询到的流表分为三类,第一类为每条流表匹配域对应的包头集合都真包含所述虚拟机对源和目的IP地址对应的包头集合;第二类为每条流表匹配域对应的包头都包含在所述虚拟机对源和目的IP地址对应的包头集合中;第三类为每条流表匹配域对应的包头集合与所述虚拟机对源和目的IP地址对应的包头集合存在交集,但不存在一个被另一个包含的情况; 控制器优先处理所述第三类流表,其次处理所述第一类流表,控制器将所述第二类流表直接作为测量流表使用。27.根据权利要求26所述的系统,其特征在于, 控制器逐个处理第三类流表中的每个流表,具体的处理过程为:对于所述第三类流表中的每个流表,首先获取其匹配域、优先级和执行操作部分,然后计算匹配域与所述虚拟机对源和目的IP地址的对应的匹配域交集,最后在所述交换设备的单表中写入新流表,所述新流表的匹配域为所述计算得到的匹配域交集,所述新流表的优先级高于原流表的优先级,所述新流表的执行操作与原流表相同。28.根据权利要求26或27所述的系统,其特征在于, 控制器处理第一类流表中的每个流表,具体的处理过程为:获取所有第一类流表中优先级最大值,然后在交换设备单表中写入新的流表,所述新流表匹配域包含所述虚拟机对源和目的IP地址,所述新流表的优先级高于所述优先级最大值,所述新流表的执行操作为转发路径上所述交换设备的下一个交换设备。29.—种测量虚拟机之间通信依赖关系的控制器,包括采样数据存储模块,预分析模块,流量测量模块,其特征在于: 采样数据存储模块,接收并存储从服务器收集到的虚拟机通信数据包采样结果; 预分析模块,根据收集到的采样结果预分析服务器中各虚拟机之间的通信关系,并根据所述通信关系选择要测量的至少一个虚拟机对; 流量测量模块,获取所述虚拟机对之间的数据包转发路径,选择所述转发路径上的一个交换设备来测量所述虚拟机对之间的通信流量,并接收由交换设备返回的测量到的通信流量结果。30.根据权利要求29所述的控制器,其特征在于,还包括, 深度分析控制模块,其用于请求服务器开启内部设置的深度分析模块并装载相关程序,并且发出查询深度分析结果请求,请求服务器响应该请求并返还深度分析结果。31.根据权利要求29或30所述的控制器,其特征在于, 控制器中还包括结果分析模块,其根据流量测量模块测量到的通信流量结果,获取所述虚拟机对之间的通信流量速率和数据包的个数的速率; 其中所述通信流量速率=总的通信流量/总的通信时间,所述数据包个数速率=总的数据包个数/总的通信时间。32.根据权利要求29或30所述的控制器,其特征在于, 所述通信关系至少包含:所述虚拟机对地址,传输层信息和收集到的采样数据包个数。33.根据权利要求29或30所述控制器,其特征在于, 其中流量测量模块选择所述转发路径上可用流表数量最多或负荷最小的交换设备。34.根据权利要求29或30所述控制器,其特征在于, 所述流量测量模块中还包括测量流表写入单元,其通过控制器在交换设备中写入用于流量测量的流表。35.根据权利要求34所述控制器,其特征在于, 所述一条流表至少包括匹配域、优先级、执行操作和统计值四个部分,所述匹配域包括源和目的MAC地址、源和目的IP地址、传输层协议类型和传输层端口号字段。
【文档编号】H04L12/26GK105991367SQ201510100366
【公开日】2016年10月5日
【申请日】2015年3月6日
【发明人】柳嘉强, 李勇, 石颖, 吴娟, 金德鹏
【申请人】清华大学, 日立(中国)研究开发有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1