发明内容
本发明实施例提供了一种SR-IOV环境下的KVM虚拟机网络优化方法及装置,能够根据虚拟机负载的类型来分配资源,根据虚拟机的网络工作负载分配相应的带宽。
根据本发明的一实施例,提供了一种SR-IOV环境下的KVM虚拟机网络优化方法,包括:
在每个虚拟机上配置SR-IOV的VF网卡和半虚拟化网卡;
采集每个虚拟机的运行状态和网络数据,在每次采样周期结束后将运行状态和网络数据进行传输;
接收传输的运行状态和网络数据,根据运行状态和网络数据判断每个虚拟机的网络I/O密集程度,并根据网络I/O密集程度对每个虚拟机通过VF网卡配置与该网络I/O密集程度相对应带宽大小的VF。
进一步地,网络优化方法还包括:
使用层级划分的方法为每个VF设置最大发送带宽和最大接收带宽,按需分配网络带宽给虚拟机。
进一步地,半虚拟化网卡通过特权域Dom0创建虚拟机时为每个虚拟机自动分配,VF网卡只在虚拟机运行的过程中动态分配给网络I/O密集型的虚拟机。
进一步地,虚拟机使用Bonding驱动的激活备份模式将VF设置为主设备,而半虚拟化的网卡被设置为从设备;在默认情况下不给虚拟机分配VF,虚拟机使用半虚拟化网卡工作,当虚拟机变成网络I/O密集型时才给虚拟机分配VF,此时主设备被激活,虚拟机会自动切换为VF进行工作。
进一步地,采集每个虚拟机的运行状态和网络数据,在每次采样周期结束后将运行状态和网络数据进行传输包括:
采集每个虚拟机的运行状态和网络数据的采样频率依据使读写文件带来的性能损失最小来设定;在每个虚拟机处的守护进程中收集虚拟机的网络数据,在主机处通过virtio-serial串行通信机制接收每个虚拟机发送的网络数据并进行统一的处理,同时获取虚拟机运行的CPU利用率数据。
进一步地,采集每个虚拟机的运行状态和网络数据,在每次采样周期结束后将运行状态和网络数据进行传输具体包括:
在获取虚拟机的网络数据时为每个虚拟机构建两个virtio-serial串行通信通道,分别为virtio数据通道和virtio控制通道;在虚拟机中运行的守护进程中对控制通道进行异步监听,当检测到主机向虚拟机发送指令时,虚拟机通过数据通道向主机发送数据以完成响应;数据通道在初始是关闭状态,只有在控制通道监听到有相应请求时才会打开数据通道,当传输完数据之后数据通道会重新关闭;
通过Libvirt中的virDomainGetInfo接口获取在采样周期内虚拟机运行的时间差,并除以主机的实际CPU运行时间计算得到虚拟机的CPU使用率;
读取虚拟机的Linux内核接口文件/proc/net/dev获取虚拟机的网络流量数据,将现有的发送或接收总流量减去上次发送或接收总流量便是本次采样周期发送或接收总流量和;
通过virtio-serial串行通信的方式将各个虚拟机的数据发送给特权域Dom0。
进一步地,接收传输的运行状态和网络数据,根据运行状态和网络数据判断每个虚拟机的网络I/O密集程度,并根据网络I/O密集程度对每个虚拟机通过VF网卡配置与该网络I/O密集程度相对应带宽大小的VF具体包括:
在特权域Dom0中对VF进行全局调度,所有虚拟机都被放入优先队列和通用队列中,其中优先队列是红黑树,存放的是网络I/O密集型的虚拟机,而通用队列存放的是磁盘I/O密集型和CPU密集型的虚拟机;
首先让每个虚拟机的CPU利用率与设定的阈值相比较将虚拟机分为网络I/O密集型和网络非I/O密集型,然后将网络I/O密集型的虚拟机按照虚拟机的网络流量信息从大到小排序,网络流量越大的虚拟机网络I/O密集程度越大;
最初所有的虚拟机都被放入通用队列中,然后依次将网络I/O密集程度高的虚拟机插入到优先队列中;
在调度的过程中当优先队列中虚拟机的网络I/O密集程度低于通用队列某一虚拟机时,优先队列中的这一虚拟机会被移到通用队列中并剥夺其VF,而选择通用队列中网络I/O密集程度最大的虚拟机插入优先队列并分配VF;
根据虚拟机的网络I/O密集程度分配对应带宽大小的VF,具体是根据网络I/O密集程度从大到小对虚拟机进行排序,然后依次给虚拟机分配层级带宽划分后的VF。
进一步地,VF的分配和移除采用ACPI机制对虚拟机进行PCIe设备的热插拔,在不影响虚拟机运行的情况下动态的分配或移除VF设备。
根据本发明的另一实施例,提供了一种SR-IOV环境下的KVM虚拟机网络优化装置,包括:
配置模块,用于在每个虚拟机上配置SR-IOV的VF网卡和半虚拟化网卡;
状态监控模块,用于采集每个虚拟机的运行状态和网络数据,在每次采样周期结束后将运行状态和网络数据进行传输;
VF调度模块,用于接收传输的运行状态和网络数据,根据运行状态和网络数据判断每个虚拟机的网络I/O密集程度,并根据网络I/O密集程度对每个虚拟机通过VF网卡配置与该网络I/O密集程度相对应带宽大小的VF。
进一步地,网络优化装置还包括:
传输速率控制模块,用于使用层级划分的方法为每个VF设置最大发送带宽和最大接收带宽,按需分配网络带宽给虚拟机。
本发明实施例中的SR-IOV环境下的KVM虚拟机网络优化方法及装置,接收传输的运行状态和网络数据,根据运行状态和网络数据判断每个虚拟机的网络I/O密集程度,并根据网络I/O密集程度对每个虚拟机通过VF网卡配置与该网络I/O密集程度相对应带宽大小的VF,针对虚拟机负载多样性和变化性的特点,结合虚拟机上层的网络I/O特性,对VF以按需给虚拟机分配网络资源,将带宽吞吐率与网络延迟进行统一的优化,以最大化云网络服务的性能。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
实施例1
根据本发明的实施例,参见图1,提供了一种SR-IOV环境下的KVM虚拟机网络优化方法,包括:
步骤S101:在每个虚拟机上配置SR-IOV的VF网卡和半虚拟化网卡;
步骤S102:采集每个虚拟机的运行状态和网络数据,在每次采样周期结束后将运行状态和网络数据进行传输;
步骤S103:接收传输的运行状态和网络数据,根据运行状态和网络数据判断每个虚拟机的网络I/O密集程度,并根据网络I/O密集程度对每个虚拟机通过VF网卡配置与该网络I/O密集程度相对应带宽大小的VF。
本发明实施例中的SR-IOV环境下的KVM虚拟机网络优化方法,接收传输的运行状态和网络数据,根据运行状态和网络数据判断每个虚拟机的网络I/O密集程度,并根据网络I/O密集程度对每个虚拟机通过VF网卡配置与该网络I/O密集程度相对应带宽大小的VF,针对虚拟机负载多样性和变化性的特点,结合虚拟机上层的网络I/O特性,对VF以按需给虚拟机分配网络资源,将带宽吞吐率与网络延迟进行统一的优化,以最大化云网络服务的性能。
优选地,参见图2,网络优化方法还包括:
步骤S104:使用层级划分的方法为每个VF设置最大发送带宽和最大接收带宽,按需分配网络带宽给虚拟机。
优选地,半虚拟化网卡通过特权域Dom0创建虚拟机时为每个虚拟机自动分配,VF网卡只在虚拟机运行的过程中动态分配给网络I/O密集型的虚拟机。
优选地,虚拟机使用Bonding驱动的激活备份模式将VF设置为主设备,而半虚拟化的网卡被设置为从设备;在默认情况下不给虚拟机分配VF,虚拟机使用半虚拟化网卡工作,当虚拟机变成网络I/O密集型时才给虚拟机分配VF,此时主设备被激活,虚拟机会自动切换为VF进行工作。
优选地,采集每个虚拟机的运行状态和网络数据,在每次采样周期结束后将运行状态和网络数据进行传输包括:
采集每个虚拟机的运行状态和网络数据的采样频率依据使读写文件带来的性能损失最小来设定;在每个虚拟机处的守护进程中收集虚拟机的网络数据,在主机处通过virtio-serial串行通信机制接收每个虚拟机发送的网络数据并进行统一的处理,同时获取虚拟机运行的CPU利用率数据。
优选地,采集每个虚拟机的运行状态和网络数据,在每次采样周期结束后将运行状态和网络数据进行传输具体包括:
在获取虚拟机的网络数据时为每个虚拟机构建两个virtio-serial串行通信通道,分别为virtio数据通道和virtio控制通道;在虚拟机中运行的守护进程中对控制通道进行异步监听,当检测到主机向虚拟机发送指令时,虚拟机通过数据通道向主机发送数据以完成响应;数据通道在初始是关闭状态,只有在控制通道监听到有相应请求时才会打开数据通道,当传输完数据之后数据通道会重新关闭;
通过Libvirt中的virDomainGetInfo接口获取在采样周期内虚拟机运行的时间差,并除以主机的实际CPU运行时间计算得到虚拟机的CPU使用率;
读取虚拟机的Linux内核接口文件/proc/net/dev获取虚拟机的网络流量数据,将现有的发送或接收总流量减去上次发送或接收总流量便是本次采样周期发送或接收总流量和;
通过virtio-serial串行通信的方式将各个虚拟机的数据发送给特权域Dom0。
优选地,接收传输的运行状态和网络数据,根据运行状态和网络数据判断每个虚拟机的网络I/O密集程度,并根据网络I/O密集程度对每个虚拟机通过VF网卡配置与该网络I/O密集程度相对应带宽大小的VF具体包括:
在特权域Dom0中对VF进行全局调度,所有虚拟机都被放入优先队列和通用队列中,其中优先队列是红黑树,存放的是网络I/O密集型的虚拟机,而通用队列存放的是磁盘I/O密集型和CPU密集型的虚拟机;
首先让每个虚拟机的CPU利用率与设定的阈值相比较将虚拟机分为网络I/O密集型和网络非I/O密集型,然后将网络I/O密集型的虚拟机按照虚拟机的网络流量信息从大到小排序,网络流量越大的虚拟机网络I/O密集程度越大;
最初所有的虚拟机都被放入通用队列中,然后依次将网络I/O密集程度高的虚拟机插入到优先队列中;
在调度的过程中当优先队列中虚拟机的网络I/O密集程度低于通用队列某一虚拟机时,优先队列中的这一虚拟机会被移到通用队列中并剥夺其VF,而选择通用队列中网络I/O密集程度最大的虚拟机插入优先队列并分配VF;
根据虚拟机的网络I/O密集程度分配对应带宽大小的VF,具体是根据网络I/O密集程度从大到小对虚拟机进行排序,然后依次给虚拟机分配层级带宽划分后的VF。
优选地,VF的分配和移除采用ACPI机制对虚拟机进行PCIe设备的热插拔,在不影响虚拟机运行的情况下动态的分配或移除VF设备。
本发明提供了一种SR-IOV环境下的KVM虚拟机网络优化方法。该方法针对现有的虚拟化方式无法满足灵活高效的资源分配需求,提出了一种按需分配的混合I/O虚拟化方式。该方法能够根据虚拟机负载的类型来分配资源,因此为了能够根据虚拟机的网络工作负载分配相应的带宽,该方法对VF的网络带宽进行层级划分以按需分配给虚拟机,并通过ACPI Hotplug和Bonding驱动技术的激活-备份策略来动态切换VF和半虚拟机网卡,以此来保证VF的动态分配。该方法能够动态感知虚拟机工作负载以按需分配虚拟网络资源,在提升系统网络性能的同时可以保证虚拟机的可扩展性。
本发明提供一种SR-IOV环境下的KVM虚拟机网络优化方法,为使本发明的目的及技术方案更加清楚明确,以下参照附图并举实例对本发明进一步做详细说明。
本发明提出的一种SR-IOV环境下的KVM虚拟机网络优化方法,是基于虚拟机的工作负载感知对网络带宽层级划分后的VF进行调度分配。SR-IOV技术是一种基于硬件的虚拟化解决方案,可提高性能和可伸缩性。SR-IOV标准允许在虚拟机之间高效共享PCIe(Peripheral Component Interconnect Express,快速外设组件互连)设备,并且它是在硬件中实现的,可以获得能够与本机性能媲美的I/O性能。该网络优化方法的系统框架分为三个主要部分,分别为状态监控模块、传输速率控制模块和VF调度模块,其中,状态监控模块又包括I/O状态监控模块和网络状态监控模块。在每个虚拟机中都运行着网络状态监控模块作为守护进程收集虚拟机的网络数据,而在主机的网络状态监控模块通过virtio-serial串行通信机制接收每个虚拟机发送的网络数据并进行统一的处理,同时I/O状态监控模块会获取虚拟机运行的CPU利用率数据。传输速率控制模块可以对每个虚拟机的虚拟功能VF(Virutal Function)设置最大发送带宽和接收带宽,状态监控模块按照设定的周期不断的将网络数据发送给VF调度模块,VF调度模块利用收集的网络数据进行VF的调度分配。
一种SR-IOV环境下的KVM虚拟机网络优化方法,该网络优化方法的系统框架包括如下模块:
(1)状态监控模块:
(1.1)状态监控模块负责监控和采集每个虚拟机的运行状态和网络等数据,并在每次采样周期结束后将数据发送于VF调度模块进行调度决策,采样频率依据使读写文件带来的性能损失最小来设定。状态监控模块包括I/O状态监控模块和网络状态监控模块。
(1.2)I/O状态监控模块通过Libvirt中的virDomainGetInfo接口获取在采样周期内虚拟机运行的时间差,并除以主机的实际CPU运行时间计算得到虚拟机的CPU使用率。
(1.3)网络监控模块读取虚拟机的Linux内核接口文件/proc/net/dev获取虚拟机的网络流量数据,将现有的发送(或接收)总流量减去上次发送(或接收)总流量便是本次采样周期发送(或接收)总流量和。
(1.4)状态监控模块通过virtio-serial串行通信的方式将各个虚拟机的数据发送给特权域Dom0。
(2)传输速率控制模块:
(2.1)SR-IOV网卡提供Transmit Rate Scheduler(TRS)功能对每个传输队列的数量进行限制以限制VF的传输速率,但VF自己没有设置传输速率的权限,由具有全局操作权限的PF进行设置和修改。
(2.2)为了能够根据网络密集型虚拟机的网络需求分配相应大小的带宽,传输速率控制模块在对VF的传输速率进行限制的时候使用层级划分的方法,即让每个VF的最大带宽按照阶梯上升的方法进行划分。
(2.3)传输速率控制模块通过sysfs系统文件限制每个VF的带宽,具体来说是设置/sys/class/net以限制VF的最大传输速率。
(3)VF调度模块:
(3.1)VF调度模块位于特权域Dom0中负责对VF的全局调度,所有虚拟机都被放入优先队列和通用队列中,其中优先队列是红黑树,存放的是网络I/O密集型的虚拟机,而通用队列存放的是其他类型的虚拟机,包括磁盘I/O密集型和CPU密集型的虚拟机。
(3.2)最初所有的虚拟机都被放入通用队列中,然后依次将网络密集程度高的虚拟机插入到优先队列中。
(3.3)VF调度模块在调度的过程中当优先队列中虚拟机的网络密集程度低于通用队列某一虚拟机时,优先队列中的这一虚拟机会被移到通用队列中并剥夺其VF,而选择通用队列中网络密集程度最大的虚拟机插入优先队列并分配VF。
(3.4)VF调度模块是根据虚拟机的网络密集程度分配对应带宽大小的VF,具体的做法是根据网络密集程度从大到小对虚拟机进行排序,然后依次给虚拟机分配层级带宽划分后的VF。
(3.5)VF调度模块会限制VF的数量以提升网络I/O密集型虚拟机的网络性能,VF的数量根据具体的环境而设定,如虚拟机的数量、可用带宽的大小等。
在本发明的一个实施例中,网络状态监控模块在获取虚拟机的网络数据时为每个虚拟机构建两个virtio-serial串行通信通道,分别为virtio数据通道和virtio控制通道。在虚拟机中运行的守护进程中对控制通道进行异步监听,当检测到主机向虚拟机发送指令时,虚拟机通过数据通道向主机发送数据以完成响应。数据通道在初始是关闭状态,只有在控制通道监听到有相应请求时才会打开数据通道,当传输完数据之后数据通道会重新关闭。
在本发明的一个实施例中,虚拟机使用Bonding驱动的激活备份模式将VF设置为主设备,而半虚拟化的网卡被设置为从设备。在默认情况下不给虚拟机分配VF,即主设备处于非激活状态,这时虚拟机使用半虚拟化网卡工作,而只有当虚拟机变成网络I/O密集型时才给虚拟机分配VF,这时主设备被激活所以虚拟机会自动切换为VF进行工作。
在本发明的一个实施例中,VF的分配和移除采用ACPI机制对虚拟机进行PCIe设备的热插拔,可在不影响虚拟机运行的情况下动态的分配或移除VF设备。
在本发明的一个实施例中,传输速率控制模块对VF的网络带宽进行层级划分后以按需分配网络带宽给虚拟机,VF调度模块是根据虚拟机的网络I/O密集程度分配相应的带宽大小的VF。
在本发明的一个实施例中,虚拟机网络密集程度判定的方法是首先让每个虚拟机的CPU利用率与设定的阈值相比较将虚拟机分为网络I/O密集型和网络非I/O密集型,然后将网络I/O密集型的虚拟机按照虚拟机的网络流量信息从大到小排序,网络流量越大的虚拟机网络密集程度越大。
以下结合附图对本发明所提供的SR-IOV环境下的KVM虚拟机网络优化方法做详细说明,图3为本发明SR-IOV环境下的KVM虚拟机网络优化方法框架示意图。在每个虚拟机都配置有两块网卡,分别为SR-IOV的VF网卡和半虚拟化的网卡。半虚拟化网卡通过特权域Dom0创建虚拟机时为每个虚拟机自动分配,而VF只在虚拟机运行的过程中动态分配给网络I/O密集型的虚拟机。传输速率控制模块按照阶梯上升的方法为每个VF设置最大发送带宽和最大接收带宽,状态监控模块按照设定的周期不断的将虚拟机的数据发送给VF调度模块,VF调度模块利用收集的数据进行VF的调度分配。默认情况下每个虚拟机都只配置有半虚拟化网卡,一旦VF调度模块判断一个虚拟机为网络I/O密集型虚拟机时,就分配一个对应带宽大小的VF以提高其性能。当VF调度模块感知该虚拟机不再为I/O密集型虚拟机时,其VF资源将被剥夺,从而可以分配给其他网络I/O密集型虚拟机。
本实施例中VF的分配和移除的方法是:采用ACPI机制对虚拟机的VF进行PCIe设备热插拔,一旦控制面板发送PCIe设备的热移除命令,Hotplug控制台收到命令后通过修改GPE位图中相应的二进制位用以标记要移除的设备,并将触发SCI(System ControlInterrupt)中断。当虚拟机中的ACPI驱动检测到SCI中断信号,将会清除GPE位图中相应的二进制位,并在Hotplug控制器中查询要移除的PCIe设备后发送给Linux,同时Linux将停止使用设备并卸载设备驱动。此外,ACPI驱动将会执行ACPI控制操作_EJ0以关闭虚拟机中的PCIe设备,同时利用_STA来验证设备是否移除成功。除了不使用ACPI控制操作_STA外,给添加虚拟机VF的流程跟移除的过程类似。
本发明提出的一种SR-IOV环境下的KVM虚拟机网络优化方法,针对虚拟机负载多样性和变化性的特点,结合虚拟机上层的网络I/O特性,对VF进行网络带宽的层级划分以按需给虚拟机分配网络资源,将带宽吞吐率与网络延迟进行统一的优化,以最大化云网络服务的性能。
实施例二
根据本发明的另一实施例,参见图4,提供了一种SR-IOV环境下的KVM虚拟机网络优化装置,包括:
配置模块201,用于在每个虚拟机上配置SR-IOV的VF网卡和半虚拟化网卡;
状态监控模块202,用于采集每个虚拟机的运行状态和网络数据,在每次采样周期结束后将运行状态和网络数据进行传输;
VF调度模块203,用于接收传输的运行状态和网络数据,根据运行状态和网络数据判断每个虚拟机的网络I/O密集程度,并根据网络I/O密集程度对每个虚拟机通过VF网卡配置与该网络I/O密集程度相对应带宽大小的VF。
本发明实施例中的SR-IOV环境下的KVM虚拟机网络优化装置,接收传输的运行状态和网络数据,根据运行状态和网络数据判断每个虚拟机的网络I/O密集程度,并根据网络I/O密集程度对每个虚拟机通过VF网卡配置与该网络I/O密集程度相对应带宽大小的VF,针对虚拟机负载多样性和变化性的特点,结合虚拟机上层的网络I/O特性,对VF以按需给虚拟机分配网络资源,将带宽吞吐率与网络延迟进行统一的优化,以最大化云网络服务的性能。
优选地,参见图5,该网络优化装置还包括:
传输速率控制模块204,用于使用层级划分的方法为每个VF设置最大发送带宽和最大接收带宽,按需分配网络带宽给虚拟机。
本发明提供一种SR-IOV环境下的KVM虚拟机网络优化装置,为使本发明的目的及技术方案更加清楚明确,以下参照附图并举实例对本发明进一步做详细说明。
本发明提出的一种SR-IOV环境下的KVM虚拟机网络优化装置,是基于虚拟机的工作负载感知对网络带宽层级划分后的VF进行调度分配。SR-IOV技术是一种基于硬件的虚拟化解决方案,可提高性能和可伸缩性。SR-IOV标准允许在虚拟机之间高效共享PCIe(Peripheral Component Interconnect Express,快速外设组件互连)设备,并且它是在硬件中实现的,可以获得能够与本机性能媲美的I/O性能。该网络优化装置分为三个主要部分,分别为状态监控模块202、传输速率控制模块204和VF调度模块203,其中,状态监控模块202又包括I/O状态监控模块和网络状态监控模块。在每个虚拟机中都运行着网络状态监控模块作为守护进程收集虚拟机的网络数据,而在主机的网络状态监控模块通过virtio-serial串行通信机制接收每个虚拟机发送的网络数据并进行统一的处理,同时I/O状态监控模块会获取虚拟机运行的CPU利用率数据。传输速率控制模块204可以对每个虚拟机的虚拟功能VF(Virutal Function)设置最大发送带宽和接收带宽,状态监控模块202按照设定的周期不断的将网络数据发送给VF调度模块203,VF调度模块203利用收集的网络数据进行VF的调度分配。
一种SR-IOV环境下的KVM虚拟机网络优化装置,该网络优化装置包括如下模块:
(1)状态监控模块202:
(1.1)状态监控模块202负责监控和采集每个虚拟机的运行状态和网络等数据,并在每次采样周期结束后将数据发送于VF调度模块203进行调度决策,采样频率依据使读写文件带来的性能损失最小来设定。状态监控模块202包括I/O状态监控模块和网络状态监控模块。
(1.2)I/O状态监控模块通过Libvirt中的virDomainGetInfo接口获取在采样周期内虚拟机运行的时间差,并除以主机的实际CPU运行时间计算得到虚拟机的CPU使用率。
(1.3)网络监控模块读取虚拟机的Linux内核接口文件/proc/net/dev获取虚拟机的网络流量数据,将现有的发送(或接收)总流量减去上次发送(或接收)总流量便是本次采样周期发送(或接收)总流量和。
(1.4)状态监控模块202通过virtio-serial串行通信的方式将各个虚拟机的数据发送给特权域Dom0。
(2)传输速率控制模块204:
(2.1)SR-IOV网卡提供Transmit Rate Scheduler(TRS)功能对每个传输队列的数量进行限制以限制VF的传输速率,但VF自己没有设置传输速率的权限,由具有全局操作权限的PF进行设置和修改。
(2.2)为了能够根据网络密集型虚拟机的网络需求分配相应大小的带宽,传输速率控制模块204在对VF的传输速率进行限制的时候使用层级划分的方法,即让每个VF的最大带宽按照阶梯上升的方法进行划分。
(2.3)传输速率控制模块204通过sysfs系统文件限制每个VF的带宽,具体来说是设置/sys/class/net以限制VF的最大传输速率。
(3)VF调度模块203:
(3.1)VF调度模块203位于特权域Dom0中负责对VF的全局调度,所有虚拟机都被放入优先队列和通用队列中,其中优先队列是红黑树,存放的是网络I/O密集型的虚拟机,而通用队列存放的是其他类型的虚拟机,包括磁盘I/O密集型和CPU密集型的虚拟机。
(3.2)最初所有的虚拟机都被放入通用队列中,然后依次将网络密集程度高的虚拟机插入到优先队列中。
(3.3)VF调度模块203在调度的过程中当优先队列中虚拟机的网络密集程度低于通用队列某一虚拟机时,优先队列中的这一虚拟机会被移到通用队列中并剥夺其VF,而选择通用队列中网络密集程度最大的虚拟机插入优先队列并分配VF。
(3.4)VF调度模块203是根据虚拟机的网络密集程度分配对应带宽大小的VF,具体的做法是根据网络密集程度从大到小对虚拟机进行排序,然后依次给虚拟机分配层级带宽划分后的VF。
(3.5)VF调度模块203会限制VF的数量以提升网络I/O密集型虚拟机的网络性能,VF的数量根据具体的环境而设定,如虚拟机的数量、可用带宽的大小等。
本发明提供了一种SR-IOV环境下的KVM虚拟机网络优化装置。该装置针对现有的虚拟化方式无法满足灵活高效的资源分配需求,提出了一种按需分配的混合I/O虚拟化方式。该装置能够根据虚拟机负载的类型来分配资源,因此为了能够根据虚拟机的网络工作负载分配相应的带宽,该装置对VF的网络带宽进行层级划分以按需分配给虚拟机,并通过ACPI Hotplug和Bonding驱动技术的激活-备份策略来动态切换VF和半虚拟机网卡,以此来保证VF的动态分配。该装置能够动态感知虚拟机工作负载以按需分配虚拟网络资源,在提升系统网络性能的同时可以保证虚拟机的可扩展性。
在本发明的一个实施例中,网络状态监控模块在获取虚拟机的网络数据时为每个虚拟机构建两个virtio-serial串行通信通道,分别为virtio数据通道和virtio控制通道。在虚拟机中运行的守护进程中对控制通道进行异步监听,当检测到主机向虚拟机发送指令时,虚拟机通过数据通道向主机发送数据以完成响应。数据通道在初始是关闭状态,只有在控制通道监听到有相应请求时才会打开数据通道,当传输完数据之后数据通道会重新关闭。
在本发明的一个实施例中,虚拟机使用Bonding驱动的激活备份模式将VF设置为主设备,而半虚拟化的网卡被设置为从设备。在默认情况下不给虚拟机分配VF,即主设备处于非激活状态,这时虚拟机使用半虚拟化网卡工作,而只有当虚拟机变成网络I/O密集型时才给虚拟机分配VF,这时主设备被激活所以虚拟机会自动切换为VF进行工作。
在本发明的一个实施例中,VF的分配和移除采用ACPI机制对虚拟机进行PCIe设备的热插拔,可在不影响虚拟机运行的情况下动态的分配或移除VF设备。
在本发明的一个实施例中,传输速率控制模块204对VF的网络带宽进行层级划分后以按需分配网络带宽给虚拟机,VF调度模块203是根据虚拟机的网络I/O密集程度分配相应的带宽大小的VF。
在本发明的一个实施例中,虚拟机网络密集程度判定的方法是首先让每个虚拟机的CPU利用率与设定的阈值相比较将虚拟机分为网络I/O密集型和网络非I/O密集型,然后将网络I/O密集型的虚拟机按照虚拟机的网络流量信息从大到小排序,网络流量越大的虚拟机网络密集程度越大。
以下结合附图对本发明所提供的SR-IOV环境下的KVM虚拟机网络优化装置做详细说明,图3为本发明SR-IOV环境下的KVM虚拟机网络优化装置的框架示意图。在每个虚拟机都配置有两块网卡,分别为SR-IOV的VF网卡和半虚拟化的网卡。半虚拟化网卡通过特权域Dom0创建虚拟机时为每个虚拟机自动分配,而VF只在虚拟机运行的过程中动态分配给网络I/O密集型的虚拟机。传输速率控制模块204按照阶梯上升的方法为每个VF设置最大发送带宽和最大接收带宽,状态监控模块202按照设定的周期不断的将虚拟机的数据发送给VF调度模块203,VF调度模块203利用收集的数据进行VF的调度分配。默认情况下每个虚拟机都只配置有半虚拟化网卡,一旦VF调度模块203判断一个虚拟机为网络I/O密集型虚拟机时,就分配一个对应带宽大小的VF以提高其性能。当VF调度模块203感知该虚拟机不再为I/O密集型虚拟机时,其VF资源将被剥夺,从而可以分配给其他网络I/O密集型虚拟机。
本实施例中VF的分配和移除的方法是:采用ACPI机制对虚拟机的VF进行PCIe设备热插拔,一旦控制面板发送PCIe设备的热移除命令,Hotplug控制台收到命令后通过修改GPE位图中相应的二进制位用以标记要移除的设备,并将触发SCI(System ControlInterrupt)中断。当虚拟机中的ACPI驱动检测到SCI中断信号,将会清除GPE位图中相应的二进制位,并在Hotplug控制器中查询要移除的PCIe设备后发送给Linux,同时Linux将停止使用设备并卸载设备驱动。此外,ACPI驱动将会执行ACPI控制操作_EJ0以关闭虚拟机中的PCIe设备,同时利用_STA来验证设备是否移除成功。除了不使用ACPI控制操作_STA外,给添加虚拟机VF的流程跟移除的过程类似。
本发明提出的一种SR-IOV环境下的KVM虚拟机网络优化装置,针对虚拟机负载多样性和变化性的特点,结合虚拟机上层的网络I/O特性,对VF进行网络带宽的层级划分以按需给虚拟机分配网络资源,将带宽吞吐率与网络延迟进行统一的优化,以最大化云网络服务的性能。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。