调度虚拟机输入输出资源的方法及装置与流程

文档序号:11829102阅读:237来源:国知局
调度虚拟机输入输出资源的方法及装置与流程

本申请涉及云计算技术领域,特别涉及一种调度虚拟机输入输出IO资源的方法及装置。



背景技术:

在计算机中,虚拟化(Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有物理资源的架设方式、地域或物理组态所限制。虚拟机(Virtual Machine)就是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。而云计算(cloud computing)是基于互联网的相关服务的增加、使用和交付模式,通常涉及通过互联网来提供动态易扩展且经常是虚拟化的资源。

存储性能在云计算与虚拟化中有着至关重要的作用,在KVM(Kernel-based Virtual Machine,基于内核的虚拟机)的存储虚拟化中,可以采用多个虚拟磁盘共享一个IO(输入输出,Input/Output)线程,例如,虚拟机对应的物理机的CPU创建了IO线程1来执行对虚拟磁盘1和2的IO操作,而创建了IO线程2来执行对虚拟磁盘3和4的IO操作,等等。



技术实现要素:

但是发明人在研究过程中发现,现有技术中这种多个虚拟磁盘共享一个IO线程的方式,会导致多个虚拟磁盘也同属于该一个IO线程对应的一个IO队列,因此,当某一个虚拟磁盘需要占用较大的IO资源的时候,与该虚拟磁盘共享同一个IO线程的其他虚拟磁盘的IO资源就会相对较 小,从而使得各个虚拟磁盘之间的IO资源的使用并不均衡。进一步的,当该虚拟磁盘的IO操作是用户发出的交互操作时,更会影响用户的体验。

基于上述原因,本申请实施例所要解决的技术问题是提供一种调度虚拟机IO资源的方法,用以尽量避免现有技术中。

本申请还提供了一种调度虚拟机IO资源的装置,用以保证上述方法在实际中的实现及应用。

为了解决上述问题,本申请公开了一种调度虚拟机IO资源的方法,该方法应用于所述虚拟机所在的物理机上,包括:

响应于当前触发的多个IO请求,确定所述多个IO请求分别指向的、所述虚拟机中的多个目标虚拟磁盘;

将所述多个IO请求分别分配至与所述多个目标虚拟磁盘一一对应的多个IO队列中;

依据预先设置的各个虚拟磁盘对应的IO资源调度参数,对所述多个IO请求所占用的IO资源进行调度,所述IO资源调度参数包括:各个虚拟磁盘的IO资源配比。

本申请公开了一种调度虚拟机IO资源的装置,所述装置集成于所述虚拟机所在的物理机上,包括:

确定模块,用于响应于当前触发的多个IO请求,确定所述多个IO请求分别指向的、所述虚拟机中的多个目标虚拟磁盘;

分配模块,用于将所述多个IO请求分别分配至与所述多个目标虚拟磁盘一一对应的多个IO队列中;

调度模块,用于依据预先设置的各个虚拟磁盘对应的IO资源调度参数,对所述多个IO请求所占用的IO资源进行调度,所述IO资源调度参数包括:各个虚拟磁盘的IO资源配比。

与现有技术相比,本申请包括以下优点:

当虚拟机中有IO请求时,该IO请求最终会通过虚拟机和物理机之间的通道传递给物理机。在本申请实施例中,物理机中存储有为IO请求预先创建的IO队列,该IO队列是与虚拟机中的虚拟磁盘一一对应的,IO请求涉及到对哪个虚拟磁盘的读写,该IO请求就会被分配到该虚拟磁盘 对应的IO队列中,继而再根据各个虚拟磁盘,也即各个IO队列对应的IO资源配比进行IO资源调度,从而可以使得IO资源在各个虚拟磁盘之间起到均衡合理分配的效果,提高虚拟机的服务质量(Qos)。

进一步的,还能为不同的虚拟机磁盘配置不同的IO优先级,从而结合IO优先级和IO资源配比实现对IO资源的调度,从而实现虚拟机内部多个虚拟磁盘互相隔离并进行QOS控制的目的。

当然,实施本申请的任一产品并不一定需要同时达到以上所述的所有优点。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是本申请的调度虚拟机IO资源的方法实施例的流程图;

图2是本申请的方法实施例中创建IO队列的结构示意图;

图3是本申请的调度虚拟机IO资源的装置实施例的结构框图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请可用于众多通用或专用的计算装置环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器装置、包括以上任何装置或设备的分布式计算环境等等。

本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布 式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。

参考图1,示出了本申请一种调度虚拟机IO资源的方法实施例的流程图,该方法应用于所述虚拟机对应的物理机上,本实施例可以包括以下步骤:

步骤101:响应于当前触发的多个IO请求,确定所述多个IO请求分别指向的、所述虚拟机中的多个目标虚拟磁盘。

在本申请实施例中,可以以虚拟机安装Linux系统为例进行说明。在Linux系统中,如果用户触发了相应的操作,例如读取硬盘中的数据,或者提交验证信息请求服务器进行验证,物理机就会响应用户当前触发的IO请求,来触发对该虚拟机的某一个虚拟磁盘的IO操作。因此本步骤中,物理机首先需要确定用户当前触发的多个IO请求,分别指向了虚拟机中的哪些虚拟磁盘。

具体的,在本实施例中,步骤102具体可以包括:

步骤A1:响应于当前触发的多个IO请求,获取各个IO请求预先设置的IO特征,所述IO特征包括虚拟磁盘标识,所述虚拟磁盘的标识用于表示所述IO请求待访问的虚拟磁盘。

在本实施例中,可以预先设置IO特征,IO特征可以包括虚拟磁盘标识,如果设置的IO特征中包括了某个虚拟磁盘标识,则表示用户比较关注对该虚拟磁盘的读写操作。在实际应用中,虚拟机中的虚拟磁盘可能对应了物理机中的一个文件,那么虚拟磁盘标识就是文件描述符;当然,如果采用物理机中的其他形式来对应生成虚拟磁盘,虚拟磁盘标识也可以是其他标志。如果用户预先设置了IO特征,即,虚拟磁盘标识,则表示用户比较关注对该虚拟磁盘的读写操作。

因此,在本步骤中,如果用户预先设置了IO特征,比如虚拟磁盘标识A,则IO请求在下发过程中,根据该IO请求涉及的读写操作是否涉及虚拟磁盘标识A来对其进行标记,那么就可以根据各个IO请求对应的 IO特征来确定各个IO请求需要针对哪一个虚拟磁盘进行读写操作。

步骤A3:将各个虚拟磁盘标识对应的虚拟磁盘确定为各个IO请求待访问的目标虚拟磁盘。

再根据虚拟磁盘标识确定各个IO请求待访问的目标虚拟磁盘是哪个虚拟磁盘。

在不同的实施方式中,除了虚拟磁盘标识,IO特征还可以包括进程标识,该进程标识可以表示某个IO请求的触发源是虚拟机还是物理机,虚拟机的IO请求,才执行本实施例中的方法。那么,在步骤A3之前,还可以包括:

步骤A2:判断所述IO请求的进程标识是否表示所述IO请求的触发源是虚拟机,如果是,则执行步骤A3。

判断IO请求对应的IO特征中的进程标识是否表示某个IO请求是虚拟机触发的,因为虚拟机对应了一个进程标识,如果IO请求是虚拟机触发的,则直接执行步骤A3。如果不是,则不执行A3。

接着进入步骤102:将所述多个IO请求分别分配至与所述多个目标虚拟磁盘一一对应的多个IO队列中。

在本实施例中,为每一个虚拟磁盘都建立一个对应的IO队列,对每一个虚拟磁盘的IO操作都会被分配至与该虚拟磁盘对应的IO队列中等待调度。

那么,本实施例在实际应用中还可以包括:

步骤100:在所述物理机的内核中预先为所述虚拟机的各个虚拟磁盘分别创建唯一对应的IO队列。

以CFQ(Completely Fair Queueing,绝对公平调度器)调度算法为例,对IO请求的调度分为CFQ Group(CFQ组)、service tree(服务树)和CFQ Queue(CFQ队列)三层,其中,CFQ Queue即为每个虚拟磁盘的对应的IO队列。在实际应用中,每个CFQ Group对应的一个IO策略组,物理机系统会为每个IO策略组分配一定的IO资源,而在一个CFQ Group中,又包含多个Service tree。参考图2所示,为本申请实施例中创建IO队列的一个示意图。在图2中,假设虚拟磁盘标识为文件描述符,那么 针对两个文件描述符fd1和fd2分别创建了两个CFQ Queue:CFQ Queue1和CFQ Queue2,CFQ Queue1和CFQ Queue2可以分属于不同的service tree,也可以属于不同的CFQ Group。

则,本步骤具体可以包括:

步骤B1:获取预先创建的IO队列与虚拟磁盘之间的对应关系。

首先,获取到预先创建的IO队列与虚拟磁盘之间的对应关系。例如图2所示的fd1与CFQ Queue1的对应关系,以及fd2与CFQ Queue2的对应关系。

步骤B2:依据所述对应关系和IO特征确定各个IO请求对应的目标IO队列。

参考IO请求对应的IO特征的虚拟磁盘标识,可以确定出IO请求指向的目标虚拟磁盘,进而可以根据虚拟磁盘与IO队列的对应关系,可以确定出IO请求对应的目标IO队列。

步骤B3:将多个IO请求分别分配至对应的目标IO队列中。

再将各个IO请求对应分配至其所属的目标IO队列。

接着返回图1,进入步骤103:依据预先设置的各个虚拟磁盘对应的IO资源调度参数,对所述多个IO请求所占用的IO资源进行调度,所述IO资源调度参数包括:各个虚拟磁盘的IO资源配比。

在本实施例中,用户可以预先设置各个虚拟磁盘对应的IO资源调度参数,例如各个虚拟磁盘的IO资源配比。例如,虚拟磁盘1和虚拟磁盘2共享为其分配的IO资源的配比为1:3。

具体的,本步骤可以包括:

步骤C1:获取预先配置好的各个虚拟磁盘对应的IO资源调度参数,所述IO资源调度参数包括IO资源配比,所述IO资源配比用于表示所述各个虚拟磁盘相对于共享IO资源的百分比。

首先,获取预先配置好的各个虚拟磁盘对应的IO资源调度参数,即,表示各个虚拟磁盘相对于共享IO资源的百分比的IO资源配比。

步骤C4:按照所述IO资源配比表示的百分比,从共享IO资源中为所述多个IP请求分配各自占用的IO资源。

然后按照IO资源配比表示的百分比,从系统分配的共享IO资源中为多个IP请求分配各自占用的IO资源。例如,假设虚拟磁盘1和虚拟磁盘2共享的IO资源为100M的IO带宽,那么以虚拟磁盘1和虚拟磁盘2的IO资源配比为1:3来讲,虚拟磁盘1就分到25M的IO带宽,虚拟磁盘2就分到75M的IO带宽。

在不同的实施例中,IO资源调度参数还可以包括,用户预先设置好的各个虚拟磁盘的优先级,则在对所述多个IO请求所占用的IO资源进行调度的过程中,在步骤C4之前,还可以包括:

步骤C2:针对所述多个目标虚拟磁盘,判断IO资源配比大于预设的资源配比阈值的那些虚拟磁盘当前是否空闲,如果是,则执行步骤C3,如果否,则执行步骤C4。

仍然以前述的虚拟磁盘1和虚拟磁盘2为例,两者的资源配比为1:3,那么虚拟磁盘1的占比为25%,虚拟磁盘2的占比为75%,假设预设的资源配比阈值为50%,那么本步骤就需要判断虚拟磁盘2当前是否空闲。因为如果虚拟磁盘2当前空闲,即,不存在IO操作的情况下,仍然对其分配较多的IO资源是不合适的,因此,需要执行本步骤的判断过程。

步骤C3:更新目标虚拟磁盘的IO资源配比,并按照更新后的IO资源配比表示的百分比,从共享IO资源中为所述多个IO请求分配各自占用的IO资源。

其中,所述更新目标虚拟磁盘的IO资源配比包括:减小空闲的目标虚拟磁盘的IO资源配比,并将减小的IO资源配比分配至非空闲的其他虚拟磁盘。在本步骤中,例如,可以将虚拟磁盘2的资源配比调整为25%,甚至更小,而将虚拟磁盘1的资源配比调整为75%,甚至更大,然后再按照调整后的IO资源配比为虚拟磁盘1和2来分配各自占用的IO资源。

可见,在本申请实施例中,为IO请求预先创建的IO队列是与虚拟机中的虚拟磁盘一一对应的,IO请求涉及到对哪个虚拟磁盘的读写,该IO请求就会被分配到该虚拟磁盘对应的IO队列中,继而再根据各个虚拟磁盘,也即各个IO队列对应的IO资源配比进行IO资源调度,从而可以使得IO资源在各个虚拟磁盘之间起到均衡合理分配的效果,提高虚拟机 的服务质量(Qos)。

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

与上述本申请一种调度虚拟机IO资源的方法实施例所提供的方法相对应,参见图3,本申请还提供了一种调度虚拟机IO资源的装置实施例,该装置可以集成在虚拟机所在的物理机上,在本实施例中,该装置可以包括:

确定模块301,用于响应于当前触发的多个IO请求,确定所述多个IO请求分别指向的、所述虚拟机中的多个目标虚拟磁盘。

其中,确定模块301具体可以包括:

获取特征子模块,用于响应于当前触发的多个IO请求,获取各个IO请求预先设置的IO特征,所述IO特征包括虚拟磁盘标识,所述虚拟磁盘的标识用于表示所述IO请求待访问的虚拟磁盘;和,确定磁盘子模块,用于将各个虚拟磁盘标识对应的虚拟磁盘确定为各个IO请求待访问的目标虚拟磁盘。

在实际应用中,IO特征还可以包括进程标识,该进程标识用于表示所述IO请求的触发源是虚拟机还是物理机;所述确定模块301还可以包括:

第一判断子模块,用于判断所述IO请求的进程标识是否表示所述IO请求的触发源是虚拟机;和,第一触发子模块,用于在所述判断子模块的结果为是的情况下,触发所述确定子模块。

分配模块302,用于将所述多个IO请求分别分配至与所述多个目标虚拟磁盘一一对应的多个IO队列中。

在实际应用中,该装置还可以包括:

创建模块300,用于在所述物理机的内核中预先为所述虚拟机的各个虚拟磁盘分别创建唯一对应的IO队列;

相应的,所述分配模块302具体可以包括:

获取关系子模块,用于获取预先创建的IO队列与虚拟磁盘之间的对应关系;确定队列子模块,用于依据所述对应关系和IO特征确定各个IO请求对应的目标IO队列;和,分配队列子模块,用于将多个IO请求分别分配至对应的目标IO队列中。

调度模块303,用于依据预先设置的各个虚拟磁盘对应的IO资源调度参数,对所述多个IO请求所占用的IO资源进行调度,所述IO资源调度参数包括:各个虚拟磁盘的IO资源配比。

其中,调度模块303具体可以包括:

获取参数子模块,用于获取预先配置好的各个虚拟磁盘对应的IO资源调度参数,所述IO资源调度参数包括IO资源配比,所述IO资源配比用于表示所述各个虚拟磁盘相对于共享IO资源的百分比;和,第一分配资源子模块,用于按照所述IO资源配比表示的百分比,从共享IO资源中为所述多个IP请求分配各自占用的IO资源。

其中,IO资源调度参数还包括各个虚拟磁盘的优先级,所述调度模块303还可以包括:

第二判断子模块,用于针对所述多个目标虚拟磁盘,判断IO资源配比大于预设的资源配比阈值的那些虚拟磁盘当前是否空闲;更新子模块,用于在所述第二判断子模块的结果为是的情况下,更新目标虚拟磁盘的IO资源配比;其中,所述更新目标虚拟磁盘的IO资源配比包括:减小空闲的目标虚拟磁盘的IO资源配比,并将减小的IO资源配比分配至非空闲的其他虚拟磁盘;第二分配资源子模块,用于按照更新后的IO资源配比表示的百分比,从共享IO资源中为所述多个IO请求分配各自占用的IO资源;和,第二触发子模块,用于在所述第二判断子模块的结果为否的情况下,直接触发所述第一分配资源子模块。

在本申请实施例中,为IO请求预先创建的IO队列是与虚拟机中的虚拟磁盘一一对应的,IO请求涉及到对哪个虚拟磁盘的读写,该IO请求 就会被分配到该虚拟磁盘对应的IO队列中,继而再根据各个虚拟磁盘,也即各个IO队列对应的IO资源配比进行IO资源调度,从而可以使得IO资源在各个虚拟磁盘之间起到均衡合理分配的效果,提高虚拟机的服务质量(Qos)。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

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

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

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