Intro
目标:更灵活的方式分配虚拟机资源,来实现最大的物理资源利用率。
开源平台:
- Eucalyptus : Greedy(first fit) and Round robin alg ,随机方法,不考虑物理资源的最大利用率
- Open Nebula: queuing system, advanced reservation and preemption scheduling
- Nimbus : PBS and SGE (tools)
传统方法:GA调度算法(Grid环境)
关键词:resource scheduling, genetic algorithm,计算资源调度
相关的调度系统:Yarn, K8s(design patterns for container-based distributed systems)
dynamically scalable and virtualized resources as a service
请求式的任务,需要即时的自动分配调度策略;使资源利用率尽可能高。
Grid Computing中使用的是Genetic Algorithm
Cloud computing的环境和Grid有所不同,本文提出的是Improved GA, 使用一个superscheduler(FCFS),调度分为三步:
- 空闲资源列表;资源请求列表;初始化,并时刻监视新的资源请求情况,资源释放情况以及物理资源的变动。
- 为了得出最优分配策略,使用GA算法:we use the shortest genes to improve the evolution speed and introduce a variable Dividend Policy in Economics as the fitness function(看不懂,需要了解下GA)
- 调度器启动特定的VM后,更新请求列表和空闲列表。
调度策略
资源:CPU速度, 内存容量,硬盘容量
Greedy
查询所有的可用节点来找到一个符合request的资源。每当新的请求出现时就要重复一次该流程,对多个请求要逐一执行。
Round robin
记录上一次调度器访问的位置,下一次接着来;资源看作一个循环链表。
Haizea
All these policies pay more attention to "when" but neglect "how", the utilization of resources.
调度算法
三步骤
- 每次分配或收回资源的时候,空闲资源列表要更新;每次新的请求发生时,资源请求列表要更新;
- 由IGA找到一个合适且经济的分配方案;
- 启动对应的资源机器。
染色体表示方法
IR: instance request
- 初始值:N IRs, M 计算节点, 染色体上有N个基因来表示在当前调度序列中哪些IR会被选中。
- M个节点的资源表示:【0:2 cores, 2000M, 40G; 1:1 cores, 1000M, 20G, etc】
- IR列表的表示:【1 cores, 512M, 10G; 2 cores, 1000M, 20G, etc】
- 生成一个N维染色体,各个index上取值为[0, M-1];
- 设置合适的人口数量和最大进化次数;
操作
变异,交叉,复制。变异率和交叉率符合标准设定。
约束和要求
每个计算节点同时只能运行一个IR;每个IR只会被分配调度一次;但是同一台物理机器可以运行多台虚拟机(也就是相当于多个计算节点);理论上,只要有空闲的足够被分配的资源,就可以把这些资源放入调度队列。
这个算法要求我大概知道每个任务所需要的资源是多少。
适应度函数
参考经济学中的股利政策(Dividend Policy)得出。DP中包括两部分,资本收益(captial gains)和股息率(dividend yield)。
本文的改进方法中,引入值Max_Fitness,并提出一个扣减方法(deduction method),得到的fitness value总是非负数。
- F = Max_Fitness - K
- K = f(C) + D
- C = ...
- D = ...
1中,F是fitness value,K是由当前染色体的基因计算出的衡量染色体所浪费的资源的指标。
2中,C是和资本收益有关的表达式,D是和股息率有关的表达式;
3中,Cij是一个依赖于比值 IRij /Node IR* 的值。一个情况填充IRs越多,被扣减的就越少。 IR依赖于计算机的三项资源指标(CPU,内存,硬盘)(刚好表格上有这三项的利用率和每台机器的这三个资源的情况); Node IR*(实际上它还有i,j两个参数,但是不太好写)表示某个计算节点实际的空闲资源容量;这二者比值越接近1,说明是一个越合适的节点。
4中,D受到实际资源情况的约束。同一个计算节点不能同时处理多个任务,所以在同一个染色体中不能出现相同的基因值。当出现这种情况时,要计算出有多少个IR不应该在当前被处理。例如,一个染色体的基因为1 3 3 7,这意味着【1号】和【2号】IR同时选择了【计算节点3】,这是不被允许的,所以赋值dups=1,意味着有一个重复;
模拟实验
使用Java JGAP包
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。