发明名称 一种面向风光多能源数据中心的实时任务绿色调度方法
摘要 本发明公开了一种面向风光多能源数据中心的实时任务绿色调度方法,属于计算机领域。目的是解决数据中心系统对风能、太阳能等绿色能源利用率不够,以化石能源为主的电能消耗比较巨大,以及电价运行成本较高的问题。技术方案是根据绿色能源优先利用方法选择实时任务执行小时段和服务器,确定任务开始和结束时间;在找不到合适时间和服务器时,根据电价成本选取方法选择小时段和服务器,确定任务开始和结束时间;最后将实时任务调度至所选的服务器上,根据所确定的开始和结束时间执行任务。通过对实时任务的有效调度,达到提高可再生能源利用率、减少对传统化石能源的依赖,降低数据中心系统碳排放量,降低系统运行成本的效果。
申请公布号 CN104536826B 申请公布日期 2015.10.21
申请号 CN201510038355.4 申请日期 2015.01.26
申请人 中国人民解放军国防科学技术大学 发明人 雷洪涛;张涛;刘亚杰;查亚兵;王锐
分类号 G06F9/48(2006.01)I 主分类号 G06F9/48(2006.01)I
代理机构 国防科技大学专利服务中心 43202 代理人 郭敏
主权项 一种面向风光多能源数据中心的实时任务绿色调度方法,其特征在于所述方法包括以下步骤:步骤1:实时任务到达数据中心后,根据绿色能源优先利用方法选择实时任务i的执行小时段k*和服务器n*,确定实时任务i的执行开始时间t<sub>i</sub><sup>s</sup>和结束时间t<sub>i</sub><sup>e</sup>;步骤1.1:计算实时任务i的各小时段k的绿色能源优先利用选取度量函数值f(k,i)<sub>1</sub>,k=1,...,12;若<img file="FDA0000755313240000011.GIF" wi="279" he="107" />则转至步骤2,<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><mi>f</mi><msub><mrow><mo>(</mo><mi>k</mi><mo>,</mo><mi>i</mi><mo>)</mo></mrow><mn>1</mn></msub><mo>=</mo><mi>&alpha;</mi><mo>&CenterDot;</mo><mfrac><mrow><mover><msub><mi>t</mi><mi>i</mi></msub><mo>&OverBar;</mo></mover><mo>-</mo><msubsup><mi>t</mi><mn>0</mn><mi>k</mi></msubsup></mrow><mrow><mover><msub><mi>t</mi><mi>i</mi></msub><mo>&OverBar;</mo></mover><mo>-</mo><munder><mrow><mi>m</mi><mi>i</mi><mi>n</mi></mrow><mrow><msubsup><mi>t</mi><mn>0</mn><mi>k</mi></msubsup><mo>&lt;</mo><mover><msub><mi>t</mi><mi>i</mi></msub><mo>&OverBar;</mo></mover><mo>,</mo><mi>k</mi><mo>&Element;</mo><mi>T</mi></mrow></munder><mo>{</mo><msubsup><mi>t</mi><mn>0</mn><mi>k</mi></msubsup><mo>}</mo></mrow></mfrac><mo>+</mo><mi>&beta;</mi><mo>&CenterDot;</mo><mfrac><msubsup><mi>v</mi><mi>i</mi><mi>k</mi></msubsup><mrow><munder><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow><mrow><mi>k</mi><mo>&Element;</mo><mi>T</mi></mrow></munder><mo>{</mo><msubsup><mi>v</mi><mi>i</mi><mi>k</mi></msubsup><mo>}</mo></mrow></mfrac></mrow>]]></math><img file="FDA0000755313240000012.GIF" wi="853" he="185" /></maths>α+β=1,α&lt;β<maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><msubsup><mi>v</mi><mi>i</mi><mi>k</mi></msubsup><mo>=</mo><msup><mover><mi>v</mi><mo>&OverBar;</mo></mover><mi>k</mi></msup><mo>-</mo><msubsup><mi>e</mi><mrow><mo>-</mo><mi>i</mi></mrow><mi>k</mi></msubsup></mrow>]]></math><img file="FDA0000755313240000013.GIF" wi="247" he="82" /></maths><img file="FDA0000755313240000014.GIF" wi="57" he="81" />为实时任务i到达时第k小时段内的风能和太阳能发电预测输出值的剩余量,所述小时段是指从实时任务到达时刻向下取整的整点时刻起算的每个小时为1小时段;<img file="FDA0000755313240000015.GIF" wi="63" he="67" />为实时任务i到达时第k小时段内太阳能与风能发电量预测输出值;<img file="FDA0000755313240000016.GIF" wi="71" he="83" />为实时任务i之前各实时任务经调度后在k小时段内消耗的风能和太阳能发电总能量;<img file="FDA0000755313240000017.GIF" wi="45" he="84" />为实时任务i的完成时限,<img file="FDA0000755313240000018.GIF" wi="55" he="79" />为第k个小时段的起始时间;T为风能和太阳能预测时间区间,T={1,...,12}即12个小时段;α、β为小于1的权重因子,其取值由决策者设定,α值表示决策者关注实时任务完成时限的程度,β值的大小表示决策者关注可再生能源利用或低电价成本的程度,α&lt;β表示更关注可再生能源利用或低电价成本;步骤1.2:将计算后的f(k,i)<sub>1</sub>值进行降序排列为{f<sup>1</sup>(k,i)<sub>1</sub>,...,f<sup>γ</sup>(k,i)<sub>1</sub>,...,f<sup>12</sup>(k,i)<sub>1</sub>},1≤γ≤12;步骤1.3:令变量γ=1;步骤1.4:选择实时任务i执行的小时段k*:<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><mi>k</mi><mo>*</mo><mo>=</mo><munder><mi>arg</mi><mi>k</mi></munder><msup><mi>f</mi><mi>&gamma;</mi></msup><msub><mrow><mo>(</mo><mi>k</mi><mo>,</mo><mi>i</mi><mo>)</mo></mrow><mn>1</mn></msub></mrow>]]></math><img file="FDA0000755313240000021.GIF" wi="341" he="108" /></maths>其中<img file="FDA0000755313240000022.GIF" wi="253" he="100" />为取得第γ个f(k,i)<sub>1</sub>值的小时段顺序标识;步骤1.5:若<img file="FDA00007553132400000212.GIF" wi="163" he="67" />则转至步骤2;若<img file="FDA0000755313240000023.GIF" wi="172" he="90" />令γ=γ+1,转至步骤1.4;<img file="FDA0000755313240000024.GIF" wi="79" he="83" />为实时任务i到达时第k*小时段内的风能和太阳能发电预测输出值的剩余量;<img file="FDA0000755313240000025.GIF" wi="64" he="79" />为小时段k*的起始时间;步骤1.6:选择运行实时任务i的服务器n*:<maths num="0004" id="cmaths0004"><math><![CDATA[<mrow><mi>n</mi><mo>*</mo><mo>=</mo><munder><mi>arg</mi><mi>n</mi></munder><munder><mi>min</mi><mrow><mi>n</mi><mo>&Element;</mo><mi>M</mi></mrow></munder><mo>{</mo><mfrac><msubsup><mi>l</mi><mi>n</mi><mrow><mi>k</mi><mo>*</mo></mrow></msubsup><msubsup><mi>a</mi><mi>n</mi><mrow><mi>k</mi><mo>*</mo></mrow></msubsup></mfrac><mo>}</mo></mrow>]]></math><img file="FDA0000755313240000026.GIF" wi="406" he="165" /></maths>若存在多个服务器取得<maths num="0005" id="cmaths0005"><math><![CDATA[<mrow><munder><mi>min</mi><mrow><mi>n</mi><mo>&Element;</mo><mi>M</mi></mrow></munder><mo>{</mo><mfrac><msubsup><mi>l</mi><mi>n</mi><mrow><mi>k</mi><mo>*</mo></mrow></msubsup><msubsup><mi>a</mi><mi>n</mi><mrow><mi>k</mi><mo>*</mo></mrow></msubsup></mfrac><mo>}</mo></mrow>]]></math><img file="FDA0000755313240000027.GIF" wi="223" he="167" /></maths>值,则<maths num="0006" id="cmaths0006"><math><![CDATA[<mrow><mi>n</mi><mo>*</mo><mo>=</mo><mi>min</mi><mrow><mo>{</mo><mrow><munder><mi>arg</mi><mi>n</mi></munder><munder><mi>min</mi><mrow><mi>n</mi><mo>&Element;</mo><mi>M</mi></mrow></munder><mo>{</mo><mfrac><msubsup><mi>l</mi><mi>n</mi><mrow><mi>k</mi><mo>*</mo></mrow></msubsup><msubsup><mi>a</mi><mi>n</mi><mrow><mi>k</mi><mo>*</mo></mrow></msubsup></mfrac><mo>}</mo></mrow><mo>}</mo></mrow><mo>,</mo></mrow>]]></math><img file="FDA0000755313240000028.GIF" wi="495" he="172" /></maths>即n*为取得<img file="FDA0000755313240000029.GIF" wi="215" he="162" />值中最小顺序标识的服务器;<img file="FDA00007553132400000210.GIF" wi="67" he="77" />为小时段k*内服务器n队列中已安排任务的总长,单位为千位kb,1b=1byte;<img file="FDA00007553132400000211.GIF" wi="76" he="80" />为小时段k*内服务器n的运行速度,单位为千位每秒kbps,M为数据中心执行实时任务的服务器集合{M<sub>1</sub>,M<sub>2</sub>,…,M<sub>n</sub>,…,M<sub>N</sub>},M<sub>n</sub>为数据中心系统的第n台服务器,n为数据中心系统中服务器的顺序标识号,1≤n≤N;步骤1.7:将实时任务i插入服务器n*任务队列最后,计算实时任务i实际执行开始时间<img file="FDA0000755313240000031.GIF" wi="47" he="69" />及实际执行结束时间<img file="FDA0000755313240000032.GIF" wi="81" he="76" /><maths num="0007" id="cmaths0007"><math><![CDATA[<mrow><msubsup><mi>t</mi><mi>i</mi><mi>s</mi></msubsup><mo>=</mo><mi>m</mi><mi>a</mi><mi>x</mi><mo>{</mo><msubsup><mi>t</mi><mrow><mi>i</mi><mo>-</mo><mn>1</mn><mo>,</mo><mi>k</mi><mo>*</mo></mrow><mrow><mi>e</mi><mo>,</mo><mi>n</mi><mo>*</mo></mrow></msubsup><mo>,</mo><msubsup><mi>t</mi><mi>i</mi><mrow><mi>n</mi><mo>*</mo></mrow></msubsup><mo>}</mo></mrow>]]></math><img file="FDA0000755313240000033.GIF" wi="427" he="85" /></maths><maths num="0008" id="cmaths0008"><math><![CDATA[<mrow><msubsup><mi>t</mi><mi>i</mi><mi>e</mi></msubsup><mo>=</mo><msubsup><mi>t</mi><mi>i</mi><mi>s</mi></msubsup><mo>+</mo><mfrac><msub><mi>l</mi><mi>i</mi></msub><msubsup><mi>a</mi><mrow><mi>n</mi><mo>*</mo></mrow><mrow><mi>k</mi><mo>*</mo></mrow></msubsup></mfrac></mrow>]]></math><img file="FDA0000755313240000034.GIF" wi="258" he="141" /></maths>其中,<img file="FDA0000755313240000035.GIF" wi="66" he="78" />为实时任务i到达服务器n*任务队列时间,近似为实时任务i到达数据中心系统时间t<sub>i</sub>;<img file="FDA0000755313240000036.GIF" wi="128" he="84" />为小时段k*内服务器n*任务队列中排在实时任务i前面一个任务的执行结束时间,若小时段k*内服务器n*无实时任务执行,则<img file="FDA0000755313240000037.GIF" wi="252" he="81" />l<sub>i</sub>为实时任务i长度,单位为千位kb,1b=1byte;步骤1.8:检测任务执行结束时间是否满足任务执行时限——比较任务完成时间<img file="FDA0000755313240000038.GIF" wi="49" he="69" />与实时任务i完成的时间限制<img file="FDA0000755313240000039.GIF" wi="68" he="84" />当<img file="FDA00007553132400000310.GIF" wi="154" he="84" />则输出n*,<img file="FDA00007553132400000311.GIF" wi="55" he="72" />和<img file="FDA00007553132400000312.GIF" wi="83" he="76" />转步骤3;当<img file="FDA00007553132400000313.GIF" wi="160" he="88" />令γ=γ+1,若γ≤12,转至步骤1.4,若γ&gt;12,则转至步骤2;步骤2:根据电价成本选取方法选择实时任务i的执行小时段k*和服务器n*,确定实时任务i的执行开始时间<img file="FDA00007553132400000314.GIF" wi="49" he="71" />和结束时间<img file="FDA00007553132400000315.GIF" wi="81" he="71" />步骤2.1:计算实时任务i的各小时段k的电价成本选取度量函数值f(k,i)<sub>2</sub>,k=1,...,12:<maths num="0009" id="cmaths0009"><math><![CDATA[<mrow><mi>f</mi><msub><mrow><mo>(</mo><mi>k</mi><mo>,</mo><mi>i</mi><mo>)</mo></mrow><mn>2</mn></msub><mo>=</mo><mi>&alpha;</mi><mo>&CenterDot;</mo><mfrac><mrow><mover><msub><mi>t</mi><mi>i</mi></msub><mo>&OverBar;</mo></mover><mo>-</mo><msubsup><mi>t</mi><mn>0</mn><mi>k</mi></msubsup></mrow><mrow><mover><msub><mi>t</mi><mi>i</mi></msub><mo>&OverBar;</mo></mover><mo>-</mo><munder><mi>min</mi><mrow><msubsup><mi>t</mi><mn>0</mn><mi>k</mi></msubsup><mo>&lt;</mo><mover><msub><mi>t</mi><mi>i</mi></msub><mo>&OverBar;</mo></mover><mo>,</mo><mi>k</mi><mo>&Element;</mo><mi>T</mi></mrow></munder><mo>{</mo><msubsup><mi>t</mi><mn>0</mn><mi>k</mi></msubsup><mo>}</mo></mrow></mfrac><mo>+</mo><mi>&beta;</mi><mo>&CenterDot;</mo><mfrac><mrow><munder><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow><mrow><mi>k</mi><mo>&Element;</mo><mi>T</mi></mrow></munder><mo>{</mo><msup><mi>p</mi><mi>k</mi></msup><mo>}</mo></mrow><msup><mi>p</mi><mi>k</mi></msup></mfrac></mrow>]]></math><img file="FDA0000755313240000041.GIF" wi="867" he="202" /></maths>α+β=1,α&lt;βp<sup>k</sup>为小时段k内的电价,其取值为实时任务i的12个小时段内的市场电价值,其它符号的含义与步骤2相同;步骤2.2:将计算后的f(k,i)<sub>2</sub>值进行降序排列为{f<sup>1</sup>(k,i)<sub>2</sub>,...,f<sup>γ</sup>(k,i)<sub>2</sub>,...,f<sup>12</sup>(k,i)<sub>2</sub>},1≤γ≤12;步骤2.3:令变量γ=1;步骤2.4:选择实时任务i执行的小时段k*:<maths num="0010" id="cmaths0010"><math><![CDATA[<mrow><mi>k</mi><mo>*</mo><mo>=</mo><munder><mi>arg</mi><mi>k</mi></munder><msup><mi>f</mi><mi>&gamma;</mi></msup><msub><mrow><mo>(</mo><mi>k</mi><mo>,</mo><mi>i</mi><mo>)</mo></mrow><mn>2</mn></msub></mrow>]]></math><img file="FDA0000755313240000042.GIF" wi="347" he="102" /></maths>其中<img file="FDA0000755313240000043.GIF" wi="258" he="99" />为取得第γ个f(k,i)<sub>2</sub>值的小时段顺序标识;步骤2.5:若<img file="FDA0000755313240000044.GIF" wi="165" he="98" />则γ=γ+1,转至步骤2.4;步骤2.6:选择运行实时任务i的服务器n*:<maths num="0011" id="cmaths0011"><math><![CDATA[<mrow><mi>n</mi><mo>*</mo><mo>=</mo><munder><mi>arg</mi><mi>n</mi></munder><munder><mi>min</mi><mrow><mi>n</mi><mo>&Element;</mo><mi>M</mi></mrow></munder><mo>{</mo><mfrac><msubsup><mi>l</mi><mi>n</mi><mrow><mi>k</mi><mo>*</mo></mrow></msubsup><msubsup><mi>a</mi><mi>n</mi><mrow><mi>k</mi><mo>*</mo></mrow></msubsup></mfrac><mo>}</mo></mrow>]]></math><img file="FDA0000755313240000045.GIF" wi="405" he="162" /></maths>若存在多个服务器取得<maths num="0012" id="cmaths0012"><math><![CDATA[<mrow><munder><mi>min</mi><mrow><mi>n</mi><mo>&Element;</mo><mi>M</mi></mrow></munder><mo>{</mo><mfrac><msubsup><mi>l</mi><mi>n</mi><mrow><mi>k</mi><mo>*</mo></mrow></msubsup><msubsup><mi>a</mi><mi>n</mi><mrow><mi>k</mi><mo>*</mo></mrow></msubsup></mfrac><mo>}</mo></mrow>]]></math><img file="FDA0000755313240000046.GIF" wi="215" he="161" /></maths>值,则<maths num="0013" id="cmaths0013"><math><![CDATA[<mrow><mi>n</mi><mo>*</mo><mo>=</mo><mi>m</mi><mi>i</mi><mi>n</mi><mrow><mo>{</mo><mrow><munder><mi>arg</mi><mi>n</mi></munder><munder><mi>min</mi><mrow><mi>n</mi><mo>&Element;</mo><mi>M</mi></mrow></munder><mo>{</mo><mfrac><msubsup><mi>l</mi><mi>n</mi><mrow><mi>k</mi><mo>*</mo></mrow></msubsup><msubsup><mi>a</mi><mi>n</mi><mrow><mi>k</mi><mo>*</mo></mrow></msubsup></mfrac><mo>}</mo></mrow><mo>}</mo></mrow><mo>,</mo></mrow>]]></math><img file="FDA0000755313240000047.GIF" wi="553" he="174" /></maths>即n*为取得<img file="FDA0000755313240000048.GIF" wi="218" he="166" />值中最小顺序标识的服务器;步骤2.7:将实时任务i插入服务器n*任务队列最后,计算实时任务i实际执行开始时间<img file="FDA0000755313240000049.GIF" wi="44" he="69" />及实际执行结束时间<img file="FDA00007553132400000410.GIF" wi="73" he="69" /><maths num="0014" id="cmaths0014"><math><![CDATA[<mrow><msubsup><mi>t</mi><mi>i</mi><mi>e</mi></msubsup><mo>=</mo><msubsup><mi>t</mi><mi>i</mi><mi>s</mi></msubsup><mo>+</mo><mfrac><msub><mi>l</mi><mi>i</mi></msub><msubsup><mi>a</mi><mrow><mi>n</mi><mo>*</mo></mrow><mrow><mi>k</mi><mo>*</mo></mrow></msubsup></mfrac></mrow>]]></math><img file="FDA00007553132400000411.GIF" wi="257" he="138" /></maths><maths num="0015" id="cmaths0015"><math><![CDATA[<mrow><msubsup><mi>t</mi><mi>i</mi><mi>s</mi></msubsup><mo>=</mo><mi>m</mi><mi>a</mi><mi>x</mi><mo>{</mo><msubsup><mi>t</mi><mrow><mi>i</mi><mo>-</mo><mn>1</mn><mo>,</mo><mi>k</mi><mo>*</mo></mrow><mrow><mi>e</mi><mo>,</mo><mi>n</mi><mo>*</mo></mrow></msubsup><mo>,</mo><msubsup><mi>t</mi><mi>i</mi><mrow><mi>n</mi><mo>*</mo></mrow></msubsup><mo>}</mo></mrow>]]></math><img file="FDA00007553132400000412.GIF" wi="429" he="80" /></maths>步骤2.8:检测任务执行结束时间是否满足任务执行时限——比较<img file="FDA0000755313240000051.GIF" wi="51" he="72" />与实时任务i完成的时间限制<img file="FDA0000755313240000052.GIF" wi="66" he="82" />当<img file="FDA0000755313240000053.GIF" wi="156" he="90" />则输出n*,<img file="FDA0000755313240000054.GIF" wi="56" he="72" />和<img file="FDA0000755313240000055.GIF" wi="84" he="72" />转步骤3;当<img file="FDA0000755313240000056.GIF" wi="156" he="84" />令γ=γ+1,若γ≤12,转至步骤2.4,若γ&gt;12,则按照γ=1时,选取小时段<img file="FDA0000755313240000057.GIF" wi="359" he="107" />确定服务器<img file="FDA0000755313240000058.GIF" wi="402" he="159" />以及计算开始时间<img file="FDA0000755313240000059.GIF" wi="420" he="82" />和结束时间<img file="FDA00007553132400000510.GIF" wi="283" he="148" />输出n*,<img file="FDA00007553132400000511.GIF" wi="51" he="73" />和<img file="FDA00007553132400000512.GIF" wi="87" he="71" />步骤3:将实时任务i调度至数据中心服务器n*上,在时间<img file="FDA00007553132400000513.GIF" wi="54" he="71" />开始执行,在时间<img file="FDA00007553132400000514.GIF" wi="54" he="71" />结束任务执行。
地址 410073 湖南省长沙市开福区德雅路109号