一种配置虚拟机网卡速率的方法及装置与流程

文档序号:11205898阅读:1155来源:国知局
一种配置虚拟机网卡速率的方法及装置与流程

本发明涉网络传输技术领域,特别是涉及一种配置虚拟机网卡速率的方法,和一种配置虚拟机网卡速率的装置。



背景技术:

随着计算机技术的不断发展,越来越多的用户会通过软件模拟具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,这样便使得用户可以将一台物理服务器虚拟化为多个虚拟机,以提高服务器资源利用率,降低使用成本。

在现有技术中,通常会在物理服务器内,服务器管理员或应用软件使用特定工具软件来获取物理网卡的最大传输速率(网卡限速),例如,通过在linux系统下查询及设置网卡参数的命令ethtool,或,通过读取sys/class/net/ethx/speed等字段来获取所安装网卡的传输速率。

然而,在虚拟机内,采用上述方法一般无法获取到虚拟网卡的实际最大传输速率,这是因为在虚拟化的环境下,虚拟机内的虚拟网卡一般没有速率指标,即便有速率指标,该速率指标也不具备实际参考价值,因为虚拟网卡的速率指标也与物理网卡的速率指标不同,所以也无法通过虚拟网卡的速率指标使虚拟机获得实际带宽。



技术实现要素:

鉴于上述问题,提出了本发明实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种配置虚拟机网卡速率的方法,和一种配置虚拟机网卡速率的装置。

依据本发明的一个方面,提供了一种配置虚拟机网卡速率的方法,所述虚拟机中设置有虚拟网卡,以及,用于配置所述虚拟网卡传输速率的内部接口,所述内部接口被配置为允许与物理机中用于获取传输速率的外部接口进行通信,所述方法包括:

在所述虚拟机启动后,通过所述内部接口配置所述虚拟网卡的初始传输速率,并将所述初始传输速率保存在所述虚拟网卡中;

在所述虚拟机运行过程中,若需要修改所述虚拟网卡传输速率,则调用所述外部接口获取目标传输速率后,连接所述内部接口重新配置所述虚拟网卡的目标传输速率。

优选地,其特征在于,所述内部接口通过如下方式生成:

获取所述虚拟网卡的系统文件;

在所述系统文件中增添指定字段;

将所述增添了指定字段后的系统文件作为内部接口。

优选地,其特征在于,所述将所述初始传输速率保存在所述虚拟网卡中的步骤包括:

从所述内部接口的指定字段中读取所述初始传输速率;

将所述初始传输速率保存在所述虚拟网卡中。

优选地,所述连接所述内部接口重新配置所述虚拟网卡的目标传输速率的步骤包括:

采用所述目标传输速率替换所述内部接口的指定字段中的初始传输速率;

将所述目标传输速率保存至所述虚拟网卡。

优选地,还包括:

所述虚拟机基于所述虚拟网卡的目标传输速率进行通信。

优选地,所述目标传输速率包括外部网络的实时速率,或,预设的限速速率。

优选地,还包括:

运行在虚拟机中的应用程序连接所述内部接口获取所述虚拟网卡的初始传输速率;

或者,运行在虚拟机中的应用程序连接所述内部接口获取所述虚拟网卡的目标传输速率。

根据本发明的另一方面,提供了一种配置虚拟机网卡速率的装置,所述虚拟机中设置有虚拟网卡,以及,用于配置所述虚拟网卡传输速率的内部接口,所述内部接口被配置为允许与物理机中用于获取传输速率的外部接口进行通信,所述装置包括:

初始传输速率配置模块,用于在所述虚拟机启动后,通过所述内部接口配置所述虚拟网卡的初始传输速率,并将所述初始传输速率保存在所述虚拟网卡中;

目标传输速率配置模块,用于在所述虚拟机运行过程中,若需要修改所述虚拟网卡传输速率,则调用所述外部接口获取目标传输速率后,连接所述内部接口重新配置所述虚拟网卡的目标传输速率。

优选地,所述虚拟机包括内部接口生成模块,所述内部接口生成模块包括:

系统文件获取子模块,用于获取所述虚拟网卡的系统文件;

指定字段增添子模块,用于在所述系统文件中增添指定字段;

内部接口确定子模块,用于将所述增添了指定字段后的系统文件作为内部接口。

优选地,所述初始传输速率配置模块包括:

初始传输速率读取子模块,用于从所述内部接口的指定字段中读取所述初始传输速率;

初始传输速率保存子模块,用于将所述初始传输速率保存在所述虚拟网卡中。

优选地,所述目标传输速率配置模块包括:

速率替换子模块,用于采用所述目标传输速率替换所述内部接口的指定字段中的初始传输速率;

目标传输速率保存子模块,用于将所述目标传输速率保存至所述虚拟网卡。

优选地,还包括:

所述虚拟机基于所述虚拟网卡的目标传输速率进行通信。

优选地,所述目标传输速率包括外部网络的实时速率,或,预设的限速速率。

优选地,所述虚拟机还包括如下模块:

应用程序初始传输速率获取模块,用于运行在虚拟机中的应用程序连接所述内部接口获取所述虚拟网卡的初始传输速率;

应用程序目标传输速率获取模块,用于运行在虚拟机中的应用程序连接所述内部接口获取所述虚拟网卡的目标传输速率。

本发明实施例包括以下优点:

1、本发明实施例中的虚拟机提供用于设置虚拟网卡速率的接口,可用于读取虚拟网卡的速率,还可以用于设置虚拟网卡的速率。

2、本发明实施例中的虚拟机内操作系统的虚拟网卡驱动可供物理机从物理机系统和虚拟机系统之间的中间软件层hypervisor中获取虚拟网卡速率,以及,可供应用程序获取虚拟网卡速率的接口。

3、在本发明实施例中,通过虚拟网卡速率的接口对虚拟网卡目标传输速率进行修改时,虚拟机内操作系统的虚拟网卡驱动能够同步该修改。

4、在本发明实施例中,虚拟机提供用于设置虚拟网卡速率的接口兼容现有的获取网卡速率的接口,无需再对应用软件进行修改即可读取到虚拟网卡的目标传输速率。

5、运用本发明实施例,虚拟机可以通过虚拟机提供用于设置虚拟网卡速率的接口获得物理机的实际速率,从而能够动态调整虚拟机应用程序能够使用的带宽,更好地利用好网络带宽资源,达到充分利用网络带宽资源的目的。

附图说明

图1是本发明实施例一的一种配置虚拟机网卡速率的方法实施例的步骤流程图;

图2是本发明实施例二的一种获取虚拟机网卡速率的方法实施例的步骤流程图;

图3是本发明实施例三的一种确定虚拟机网卡速率的方法实施例的步骤流程图;

图4是本发明实施例四的一种设置虚拟机网卡速率的方法实施例的步骤流程图;

图5是本发明实施例五的一种配置虚拟机网卡速率的装置实施例的结构框图;

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

本发明实施例的核心构思之一在于,修改虚拟机软件,增加设置虚拟网卡初始传输速率的命令行参数,这样虚拟机启动之后,每块虚拟网卡就有一个初始传输速率的限速值,修改虚拟机内运行的操作系统的虚拟网卡驱动,允许虚拟机操作系统把上述初始传输速率经由内部接口提供给应用程序;修改虚拟机软件,允许通过虚拟机的外部接口,在虚拟机运行状态下,动态地修改虚拟网卡的限速值,并且虚拟机操作系统能够实时地把修改后的限速值通过内部接口提供给应用程序。

实施例一

参考图1,示出了本发明的一种配置虚拟机网卡速率的方法实施例的步骤流程图,具体可以包括如下步骤:

步骤101,在所述虚拟机启动后,通过所述内部接口配置所述虚拟网卡的初始传输速率,并将所述初始传输速率保存在所述虚拟网卡中;

在具体实现中,本发明实施例可以应用在计算机的虚拟环境中,在虚拟环境中,每一个环境都相当于一个独立的操作系统,用户可以在虚拟环境中安装应用程序,以及,保存资料等等。

在本发明实施例中,内部接口通过如下方式生成:获取虚拟网卡的系统文件;在系统文件中增添指定字段;将增添了指定字段后的系统文件作为内部接口。

在实际应用中,本发明实施例可以在虚拟机中增加用于设置虚拟网卡速率的内部接口,该内部接口可以在虚拟机启动的时候给虚拟网卡配置一个初始传输速率。

例如,在linux操作系统中,系统文件是一个由/sys/class/net/ethx/多个字段组成的sysfs虚拟文件,在获取sysfs虚拟文件后,对其增添指定字段speed字段,使其变成由/sys/class/net/ethx/speed多个字段组成的sysfs虚拟文件,修改后的sysfs虚拟文件即为内部接口,通过读取这个文件的内容获得对应网卡的速率值。

在本发明实施例中,可以通过如下方式将初始传输速率保存在虚拟网卡中:从内部接口的指定字段中读取初始传输速率,将初始传输速率保存在虚拟网卡中。

在具体实现中,本发明实施例可以在使用命令行参数生成虚拟机的虚拟硬件配置后读取初始传输速率。

为使本领域技术人员更好的理解本发明,下面是本发明实施例提供一个具体的参考示例:

例如,在模拟处理器qemu中,对其命令行参数增添指定字段speed字段后,在一个虚拟网卡的命令行配置为:--netdevvirtio-net,mac=00:22:4a:df:cc:d2,id=veth0,speed=1000说明虚拟机设置有一个虚拟网卡,型号为virtio-net,mac地址为00:22:4a:df:cc:d2,最大传输速率为1000mbps,其中,speed就是增添的用于传入虚拟网卡的初始传输速率的命令行字段,该字段上的值在虚拟机启动运行后将被保存在虚拟机的虚拟网卡中。

当然,上述示例只作为一个参考示例,本领域技术人员通过生成内部接口也是可行的,本发明对此不作限制。

步骤102,在所述虚拟机运行过程中,若需要修改所述虚拟网卡传输速率,则调用所述外部接口获取目标传输速率后,连接所述内部接口重新配置所述虚拟网卡的目标传输速率。

在实际应用中,本发明实施例可以在虚拟机中预设一个用于获取虚拟网卡目标传输速率的外部接口,用户或者物理机中的外部程序可以通过外部接口对虚拟机传输目标传输速率。

在本发明的一个优选实施例中,为了使得虚拟机既能获取外部网络环境的真是速率,又能使得用户可以针对虚拟机的速率进行限制,目标传输速率可以包括外部网络的实时速率,或,预设的限速速率。

例如,在qemu的控制端monitor中设置一个设置链接速度set_link_speed的api(applicationprogramminginterface,应用程序编程接口)作为外部接口,外部接口在获取到外部网络的实时速率后,并将获取到的外部网络的实时速率作为目标传输速率,或者,用户预先设置一个限速速率供标外部口读取,当外部口获取到该限速速率时,将限速速率作为虚拟机的目标传输速率。

在本发明实施例中,可以通过如下方式连接内部接口重新配置虚拟网卡的目标传输速率:采用目标传输速率替换内部接口的指定字段中的初始传输速率,将目标传输速率保存至虚拟网卡。

在具体实现中,本发明实施例可以在获取到目标传输速率后,调用外部接口连接内部接口,通过外部接口将目标传输速率的速率值写入内部接口的指定字段中,替换内部接口的指定字段中的初始传输速率,并将目标传输速率的速率值储存于虚拟网卡中。

例如,在虚拟机运行中,一个虚拟网卡的命令行配置为:--netdevvirtio-net,mac=00:22:4a:df:cc:d2,id=veth0,speed=1000说明该虚拟机目前最大传输速率为1000mbps,如果外部接口获取到的目标传输速率为500mbps,则通过调用虚拟机的设置链接速度set_link_speed命令,将内部接口的speed字段上的值改为500,该字段上的值将被保存在虚拟机的虚拟网卡中,作为虚拟网卡的最大传输速率。

在本发明另一个优选实施例中,还可以使运行在虚拟机中的应用程序连接内部接口获取虚拟网卡的初始传输速率,或,目标传输速率。

在实际应用中,本发明实施例可以通过修改虚拟机软件实现代码,在虚拟机网卡中配置用于允许部接口从物理机系统和虚拟机系统之间的中间软件层hypervisor中获取虚拟网卡目标传输速率的虚拟网卡驱动,当虚拟机启动时,虚拟网卡驱动能够获取内部接口的初始传输速率,并允许运行在虚拟机内的应用程序通过读取内部接口获得虚拟网卡的初始传输速率。

当外部接口获取目标传输速率后,虚拟网卡驱动可以获取到目标传输速率的速率值,并将目标传输速率的速率值同步到内部接口中,并允许运行在虚拟机内的应用程序通过读取内部接口获得虚拟网卡的目标传输速率。

例如,在虚拟机运行中,一个虚拟网卡的命令行配置为:--netdevvirtio-net,mac=00:22:4a:df:cc:d2,id=veth0,speed=1000说明该虚拟机目前最大传输速率为1000mbps,这时,运行在虚拟机内的应用程序的初始传输速率为1000mbps,如果外部接口获取到的目标传输速率为500mbps,虚拟机将会给虚拟网卡驱动发送一个配置更改的中断,虚拟网卡驱动获得中断通知后,将从虚拟网卡的,端口读取到speed的值,并存储在虚拟网卡的vi->speed字段中,当应用程序访问内部接口/sys/class/net/ethx/speed时,读取到的就是更新后的vi->speed的值。

在实际应用中运用本发明实施例,可以在虚拟机启动后,通过内部接口配置虚拟网卡的初始传输速率,在完成初始传输速率的配置后,经由外部接口获取虚拟网卡的目标传输速率,并获取目标传输速率后,连接内部接口重新配置虚拟网卡的目标传输速率,从而能在虚拟机运行过程中动态调整虚拟网卡的可使用带宽大小,进而实现了用户在使用虚拟机的过程中能够更为充分的利用网络带宽资源。

实施例二

参照图2,示出了本发明的一种获取虚拟机网卡速率的方法实施例的步骤流程图,本实施例基于虚拟机中的应用程序侧进行描述,具体可以包括如下步骤:

步骤201,如果运行在虚拟机内部的应用程序需要读取所述虚拟机的虚拟网卡的目标传输速率,则调用所述外部接口获取所述虚拟网卡的目标传输速率;

在实际应用中,本发明实施例可以在运行在虚拟机内部的应用程序需要读取虚拟机的虚拟网卡的目标传输速率时,通过外部接口获取目标传输速率。

在本发明的一个优选实施例中,可以通过如下方法判断运行在虚拟机内部的应用程序是否需要读取虚拟网卡的目标传输速率,从而判定是否调用虚拟机的外部接口获取虚拟网卡的目标传输速率:

判断运行在虚拟机内部的应用程序的网络带宽使用率是否达到预设速率阈值,若是,则调用虚拟机的接口获取虚拟网卡的目标传输速率;

例如,用户可以设置合理的网络带宽使用率的报警阈值,当应用程序占用过多带宽时,调用外部接口获取虚拟网卡的目标传输速率对虚拟网卡设置限速,从而避免物理机带宽资源被过度使用或者低效使用。

在本发明的另一个优选实施例中,可以通过如下方法判断运行在虚拟机内部的应用程序是否需要读取虚拟机的虚拟网卡的目标传输速率,从而判定是否调用虚拟机的接口获取虚拟网卡的目标传输速率:

判断用户是否重新配置带宽大小;若是,则调用虚拟机的外部接口。

例如,用户变更带宽速率时,调用虚拟机的外部接口对虚拟网卡的传输速率重新进行配置,从而使得虚拟网卡得以根据物理机的带宽速率重新配置限速,进而控制运行在虚拟机内的应用程序的传输速率。

当然,本领域技术人员可以通过上述任意一种或多种方法调用虚拟机的接口,本发明对此不做限制。

步骤202,经由所述内部接口读取所述虚拟机的虚拟网卡的目标传输速率。

在实际应用中运用本发明实施例,可以在运行在虚拟机内部的应用程序需要读取虚拟机的虚拟网卡的目标传输速率时,调用外部接口,再经由内部接口读取虚拟机的虚拟网卡的目标传输速率,实现了通过获取目标传输速率控制运行在虚拟机的应用软件的传输速率。

实施例三

参照图3,示出了本发明的一种确定虚拟机网卡速率的方法实施例的步骤流程图,本实施例基于虚拟机侧进行描述,具体可以包括如下步骤:

步骤301,在虚拟机启动时,生成所述虚拟网卡的初始传输速率;

在本发明的一个优选实施例中,还可以通过如下方式生成虚拟网卡的初始传输速率:

方式一,在虚拟网卡中增添命令行参数,生成用于设置虚拟网卡初始传输速率的内部接口,采用内部接口,生成虚拟网卡的初始传输速率。

方式二,在虚拟网卡中增添配置项,生成用于设置虚拟网卡初始传输速率的内部接口,采用内部接口,生成虚拟网卡的初始传输速率。

当然,本领域技术人员可以根据实际需要采用上述任意一种或多种方式生成虚拟网卡的初始传输速率都是可行的,对此本发明不作限制。

例如,1.修改qemu,允许虚拟网卡的启动参数增加一个speed的字段,以前的启动参数为-netdevvirtio-net,mac=00:22:4a:df:cc:d2,id=veth0,现改为:-netdevvirtio-net,mac=00:22:4a:df:cc:d2,id=veth0,speed=1000,即增加speed=1000,用来制定虚拟机的虚拟网卡的初始传输速率为1000mbps。2.修改qemu,在启动之后,从命令行参数的speed=xxx中解析得到网卡速率,并保存在本地变量中。3.修改虚拟机的virtio_net网卡驱动,在初始化的时候,从虚拟机读区到该网卡的初始传输速率,并保存在一个本地变量中。

步骤302,在所述虚拟机运行时,调用所述外部接口获取目标传输速率;

在具体实现中,本发明实施例的虚拟机配置有用于获取外部网络速率的外部接口,该外部接口可以将获取到的外部网络速率作为目标传输速率配置给虚拟网卡。

例如,修改qemu的monitor实现代码,在虚拟机管理程序hypervisor中增添set_link_speed的api,用于在虚拟机程序运行时,外部控制程序或管理员通过编程接口实时更新虚拟网卡的传输速率。

步骤303,采用目标传输速率配置所述虚拟网卡;

在本发明实施例中,当虚拟机运行时,外部接口在获取到目标传输速率后,虚拟机的虚拟网卡驱动可以获得目标传输速率值,并将目标传输速率的速率值覆盖于初始传输速率的速率值,再将更新后的速率值保存于虚拟网卡中。

例如,当该set_link_speed这个api被调用后,api传入的速率参数将被保存在本地的变量,并且向虚拟机操作系统发出信号,通知网卡的速率有变化。同时,需要修改虚拟机内的网卡驱动,让该驱动监听网卡速率变化的事件。当速率变化事件发生时,网卡驱动将从虚拟机读取获得最新的速率,并保存到本地。虚拟机内的应用读/sys/class/net/ethx/speed,将读到最新的速率。

步骤304,如果检测到所述应用程序经由所述外部接口读取所述虚拟网卡的目标传输速率,则在所述外部接口完成对所述虚拟网卡的配置后,调用所述应用程序经由所述内部接口读取所述目标传输速率。

在本发明实施例中,运行在虚拟机内应用程序可以通过内部接口读取虚拟网卡中的目标传输速率值。

例如,可以通过对虚拟机内的qemu虚拟化软件增加set_link_speed的控制命令,允许qemu虚拟化软件在虚拟机运行过程中,动态修改virtio-net-pci虚拟网卡的speed设置;再修改虚拟机内操作系统的virtio-net网卡驱动,使虚拟网卡能够获得修改speed设置的通知,并能同步修改sysfs的/sys/class/net/ethx/speed字段。修改后,可以用ethtool等工具获得的是修改后的速率。

为使本领域技术人员更好的理解本发明,下面是本发明实施例提供一个具体的参考示例:

s1,修改qemu,允许虚拟网卡的启动参数增加一个speed的字段,以前的启动参数为-netdevvirtio-net,mac=00:22:4a:df:cc:d2,id=veth0,现改为:-netdevvirtio-net,mac=00:22:4a:df:cc:d2,id=veth0,speed=1000,即增加speed=1000,用来制定虚拟机的虚拟网卡的初始传输速率为1000mbps。

s2,修改qemu,在启动之后,从命令行参数的speed=xxx中解析得到网卡速率,并保存在本地变量中。

s3,修改虚拟机的virtio_net网卡驱动,在初始化的时候,从虚拟机读区到该网卡的初始传输速率,并保存在一个本地变量中。

当然,上述示例只作为一个参考示例,本领域技术人员通过其他方式采用虚拟网卡驱动提取目标传输速率,并将其写入外部接口中也是可行的,本发明对此不作限制。

在实际应用中运用本发明实施例,可以在虚拟机启动时,通过内部接口配置虚拟网卡的初始传输速率,在完成初始传输速率的配置后,经由外部接口获取虚拟网卡的目标传输速率,再由虚拟网卡驱动读取目标传输速率的速率值,并将目标传输速率的速率值覆盖于初始传输速率的速率值,如果检测到应用程序经由外部接口读取虚拟网卡的目标传输速率,则在外部接口完成对虚拟网卡的配置后,调用应用程序经由内部接口读取目标传输速率,从而能够动态调整虚拟网卡对应用程序的传输速率,更好地利用好网络带宽资源,达到充分利用网络带宽资源的目的。

实施例四

参照图4,示出了本发明的一种设置虚拟机网卡速率的方法实施例的步骤流程图,本实施例基于物理机侧进行描述,具体可以包括如下步骤:

步骤401,获取当前网络环境的实时速率;

步骤402,采用所述外部接口,将所述实时速率设置为所述虚拟网卡的目标传输速率。

本发明实施例中的虚拟机内操作系统的虚拟网卡驱动可供物理机从物理机系统和虚拟机系统之间的中间软件层hypervisor中获取虚拟网卡速率,以及,可供虚拟机设置虚拟网卡速率的外部接口。

在本发明实施例中,本发明可以实现操作人员通过物理机经由外部接口将所述实时速率传送至虚拟机中。

在实际应用中,可以在虚拟机中sysfs系统文件的/sys/class/net/ethx/speed字段的初始值就是创建虚拟机时候,通过命令行传入speed字段的值,在虚拟机运行中,作为所述虚拟网卡的目标传输速率。

例如,用户在虚拟机运行中,将虚拟机的目标传输速率降低为500mbps,则通过调用虚拟机的set_link_speed命令,将虚拟机的虚拟网卡的speed值改为500,这个改动会触发虚拟机内的虚拟网卡驱动更新vi->speed的值,从虚拟网卡中读到最新的speed值500。当虚拟机内的应用程序读取/sys/class/net/ethx/speed时,就能获得更新后的速率500mbps。

为使本领域技术人员更好地理解本申请,以下通过一个具体操作的示例进一步说明本申请实施例。

s1,修改qemu虚拟化软件,virtio-net虚拟网卡增加speed字段,允许通过命令行传入虚拟网卡的速率。

例如,一个虚拟网卡的命令行配置为:

--netdevvirtio-net,mac=00:22:4a:df:cc:d2,id=veth0,speed=1000

说明给虚拟机配置一个虚拟网卡,型号为virtio-net,mac地址为00:22:4a:df:cc:d2,最大传输速率为1000mbps。这里speed就是用户增加的传入虚拟网卡初始传输速率的命令行字段。这个值在虚拟机启动运行后将被保存在虚拟机的虚拟网卡中。

s2,修改虚拟机内操作系统的virtio-net网卡驱动,允许从qemu虚拟机的获取speed字段的设置,并更新sysfs的/sys/class/net/ethx/speed字段,允许ethtool等工具能获取到该速率。

例如,修改虚拟机内的virtio-net虚拟网卡的驱动,该驱动中需要实现ethtool_ops.get_settings接口,该接口在虚拟机内应用程序读取/sys/class/net/ethx/speed时被调用,实现该接口的具体步骤包括:

调用ethtool_cmd_speed_set方法设置传入的ethtool_cmd结构体的speed字段的值,该值最终由应用程序访问sysfs的/sys/class/net/ethx/speed字段获取。其中,vi->speed就是从虚拟机的虚拟网卡获取的speed值,其中,vi->speed就是从虚拟机的虚拟网卡获取的speed值。

s3,修改qemu虚拟化软件,增加set_link_speed的控制命令,允许在qemu虚拟机运行过程中,动态修改virtio-net-pci虚拟网卡的speed设置,修改虚拟机内操作系统的virtio-net网卡驱动,能够获得修改speed设置的通知,并能同步修改sysfs的/sys/class/net/ethx/speed字段。修改后,ethtool等工具获得的是修改后的速率。

例如,set_link_speed是用户为虚拟机增加的接口,该接口提供给外部系统,用来在虚拟机运行中修改虚拟机的虚拟网卡的speed设置。

当外部系统调用虚拟机的set_link_speed接口时,将会修改虚拟机的虚拟网卡的speed字段的值。修改后,虚拟机将会给虚拟机内的虚拟网卡驱动发送一个配置更改的中断。虚拟机内的虚拟网卡驱动获得中断通知后,将从虚拟网卡的io端口读取到speed的值,并存储在虚拟网卡的vi->speed字段中。之后,当应用程序访问/sys/class/net/ethx/speed时,读取到的就是更新后的vi->speed的值。

为了让virtio-net虚拟网卡驱动在获得配置更改的中断后,能够同步更新vi->speed字段的值,需要修改该驱动的virtnet_config_changed方法,该方法在虚拟网卡获取配置更改的中断后被调用。需要在virtnet_config_changed方法中,增加从virtio-net虚拟网卡的io端口读取虚拟网卡中存储的speed值。

例如,在创建虚拟机时,虚拟网卡的speed传入参数为1000,这样,虚拟开始运行后,虚拟网卡存储的speed值为1000。虚拟机内应用程序从/sys/class/net/ethx/speed读取到的值也为1000。当外部系统调用set_link_speed方法,将虚拟网卡存储的speed值改为500后,虚拟机内虚拟网卡的驱动将会同步更新其维护的vi->speed字段,从虚拟网卡中读取到最新的值并保存。之后,当虚拟机内应用程序再次访问/sys/class/net/ethx/speed时,将读取到更新后的值500。

需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。

实施例五

参照图5,示出了本发明的一种配置虚拟机网卡速率的装置实施例的结构框图,具体可以包括如下模块:

初始传输速率配置模块501,用于在所述虚拟机启动后,通过所述内部接口配置所述虚拟网卡的初始传输速率,并将所述初始传输速率保存在所述虚拟网卡中;

目标传输速率配置模块502,用于在所述虚拟机运行过程中,若需要修改所述虚拟网卡传输速率,则调用所述外部接口获取目标传输速率后,连接所述内部接口重新配置所述虚拟网卡的目标传输速率。

本发明实施例的一个优选实施例中,所述虚拟机可以包括内部接口生成模块,所述内部接口生成模块可以包括如下子模块:

系统文件获取子模块,用于获取所述虚拟网卡的系统文件;

指定字段增添子模块,用于在所述系统文件中增添指定字段;

内部接口确定子模块,用于将所述增添了指定字段后的系统文件作为内部接口。

本发明实施例的一个优选实施例中,所述初始传输速率配置模块501可以包括如下子模块:

初始传输速率读取子模块,用于从所述内部接口的指定字段中读取所述初始传输速率;

初始传输速率保存子模块,用于将所述初始传输速率保存在所述虚拟网卡中。

本发明实施例的一个优选实施例中,所述目标传输速率配置模块502可以包括如下子模块:

速率替换子模块,用于采用所述目标传输速率替换所述内部接口的指定字段中的初始传输速率;

目标传输速率保存子模块,用于将所述目标传输速率保存至所述虚拟网卡。

本发明实施例的一个优选实施例中,还包括:

所述虚拟机基于所述虚拟网卡的目标传输速率进行通信。

本发明实施例的一个优选实施例中,所述目标传输速率包括外部网络的实时速率,或,预设的限速速率。

本发明实施例的一个优选实施例中,所述虚拟机还可以包括如下模块:

应用程序初始传输速率获取模块,用于运行在虚拟机中的应用程序连接所述内部接口获取所述虚拟网卡的初始传输速率;

应用程序目标传输速率获取模块,用于运行在虚拟机中的应用程序连接所述内部接口获取所述虚拟网卡的目标传输速率。

在实际应用中运用本发明实施例,可以在虚拟机启动后,通过内部接口配置虚拟网卡的初始传输速率,在完成初始传输速率的配置后,经由外部接口获取虚拟网卡的目标传输速率,并获取目标传输速率后,连接内部接口重新配置虚拟网卡的目标传输速率,从而能够动态调整虚拟网卡能够使用的带宽,更好地利用好网络带宽资源,达到充分利用网络带宽资源的目的。

对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

实施例六

详细介绍本发明实施例提供的一种计算机设备和一种计算机可读存储介质。

本发明实施例提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现以下步骤:

在所述虚拟机启动后,通过所述内部接口配置所述虚拟网卡的初始传输速率,并将所述初始传输速率保存在所述虚拟网卡中;

在所述虚拟机运行过程中,若需要修改所述虚拟网卡传输速率,则调用所述外部接口获取目标传输速率后,连接所述内部接口重新配置所述虚拟网卡的目标传输速率。

可选地,所述内部接口通过如下方式生成:

获取所述虚拟网卡的系统文件;

在所述系统文件中增添指定字段;

将所述增添了指定字段后的系统文件作为内部接口。

可选地,所述将所述初始传输速率保存在所述虚拟网卡中的步骤包括:

从所述内部接口的指定字段中读取所述初始传输速率;

将所述初始传输速率保存在所述虚拟网卡中。

可选地,所述连接所述内部接口重新配置所述虚拟网卡的目标传输速率的步骤包括:

采用所述目标传输速率替换所述内部接口的指定字段中的初始传输速率;

将所述目标传输速率保存至所述虚拟网卡。

可选地,其特征在于,还包括:

所述虚拟机基于所述虚拟网卡的目标传输速率进行通信。

可选地,所述目标传输速率包括外部网络的实时速率,或,预设的限速速率。

可选地,还包括:

运行在虚拟机中的应用程序连接所述内部接口获取所述虚拟网卡的初始传输速率;

或者,运行在虚拟机中的应用程序连接所述内部接口获取所述虚拟网卡的目标传输速率。

本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现以下步骤:

在所述虚拟机启动后,通过所述内部接口配置所述虚拟网卡的初始传输速率,并将所述初始传输速率保存在所述虚拟网卡中;

在所述虚拟机运行过程中,若需要修改所述虚拟网卡传输速率,则调用所述外部接口获取目标传输速率后,连接所述内部接口重新配置所述虚拟网卡的目标传输速率。

可选地,所述内部接口通过如下方式生成:

获取所述虚拟网卡的系统文件;

在所述系统文件中增添指定字段;

将所述增添了指定字段后的系统文件作为内部接口。

可选地,所述将所述初始传输速率保存在所述虚拟网卡中的步骤包括:

从所述内部接口的指定字段中读取所述初始传输速率;

将所述初始传输速率保存在所述虚拟网卡中。

可选地,所述连接所述内部接口重新配置所述虚拟网卡的目标传输速率的步骤包括:

采用所述目标传输速率替换所述内部接口的指定字段中的初始传输速率;

将所述目标传输速率保存至所述虚拟网卡。

可选地,其特征在于,还包括:

所述虚拟机基于所述虚拟网卡的目标传输速率进行通信。

可选地,所述目标传输速率包括外部网络的实时速率,或,预设的限速速率。

可选地,还包括:

运行在虚拟机中的应用程序连接所述内部接口获取所述虚拟网卡的初始传输速率;

或者,运行在虚拟机中的应用程序连接所述内部接口获取所述虚拟网卡的目标传输速率。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。

以上对本发明所提供的一种配置虚拟机网卡速率的方法、一种获取虚拟机网卡速率的方法、一种确定虚拟机网卡速率的方法,一种设置虚拟机网卡速率的方法和一种配置虚拟机网卡速率的装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1