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),调度分为三步:

  1. 空闲资源列表;资源请求列表;初始化,并时刻监视新的资源请求情况,资源释放情况以及物理资源的变动。
  2. 为了得出最优分配策略,使用GA算法:we use the shortest genes to improve the evolution speed and introduce a variable Dividend Policy in Economics as the fitness function(看不懂,需要了解下GA)
  3. 调度器启动特定的VM后,更新请求列表和空闲列表。

调度策略

资源:CPU速度, 内存容量,硬盘容量

Greedy

查询所有的可用节点来找到一个符合request的资源。每当新的请求出现时就要重复一次该流程,对多个请求要逐一执行。

Round robin

记录上一次调度器访问的位置,下一次接着来;资源看作一个循环链表。

Haizea

All these policies pay more attention to "when" but neglect "how", the utilization of resources.

调度算法

三步骤

  1. 每次分配或收回资源的时候,空闲资源列表要更新;每次新的请求发生时,资源请求列表要更新;
  2. 由IGA找到一个合适且经济的分配方案;
  3. 启动对应的资源机器。

染色体表示方法

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总是非负数。

  1. F = Max_Fitness - K
  2. K = f(C) + D
  3. C = ...
  4. 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包


萧杨
1 声望0 粉丝

Hello world~


引用和评论

0 条评论