发明名称 一种串行与并行相结合的虚拟机在线迁移方法
摘要 本发明提供一种串行与并行相结合的虚拟机在线迁移方法,能够缩短云环境下连续性服务或灾难恢复时等待大量虚拟机迁移的时间,也为后续依赖此虚拟机混合迁移方法的虚拟机整合奠定基础。其包括如下步骤,步骤1,将迁移前后的虚拟机与其宿主机的映射变化分别抽象为迁移前后矩阵,其中矩阵中的每个元素代表虚拟机与其宿主机的映射关系;步骤2,对迁移前后矩阵逐行比较,找出两宿主机上在迁移前后仅对调位置的虚拟机,将这两个对调迁移过程判定为无用迁移,并将其剔除后剩余有用迁移;步骤3,根据混合迁移算法将有用迁移生成串行与并行迁移队列;步骤4,根据生成的串行与并行迁移队列输出串行与并行迁移批次及最早迁移时间,用于后续虚拟机的整合。
申请公布号 CN105607949B 申请公布日期 2017.04.26
申请号 CN201510973873.5 申请日期 2015.12.22
申请人 西安交通大学 发明人 郑庆华;李睿;钟阿敏;董博;阮建飞;朱旭律
分类号 G06F9/48(2006.01)I;G06F9/50(2006.01)I 主分类号 G06F9/48(2006.01)I
代理机构 西安通大专利代理有限责任公司 61200 代理人 李宏德
主权项 一种串行与并行相结合的虚拟机在线迁移方法,其特征在于,包括如下步骤,步骤1,将迁移前后的虚拟机与其宿主机的映射变化分别抽象为迁移前后矩阵,其中矩阵中的每个元素代表虚拟机与其宿主机的映射关系;步骤2,对迁移前后矩阵逐行比较,找出两宿主机上在迁移前后仅对调位置的虚拟机,将这两个对调迁移过程判定为无用迁移,并将其剔除后剩余有用迁移;步骤3,根据混合迁移算法将有用迁移生成串行与并行迁移队列;步骤4,根据生成的串行与并行迁移队列输出串行与并行迁移批次及最早迁移时间,用于后续虚拟机的整合;步骤1具体的包括如下步骤,1.1构造迁移前后虚拟机相对于其宿主机的映射矩阵;在虚拟机混合迁移的场景中,将迁移前虚拟机与其宿主机映射关系抽象为矩阵P<sub>m,n</sub>,迁移后虚拟机与其宿主机的映射关系抽象为矩阵<img file="FDA0001175324840000011.GIF" wi="115" he="78" />P<sub>m,n</sub>矩阵中每一个元素χ<sub>ij</sub>代表迁移前第i台虚拟机VM<sub>i</sub>是否放置在第j台宿主机HM<sub>j</sub>上,是为1,否为0;<img file="FDA0001175324840000012.GIF" wi="84" he="78" />矩阵中每一个元素χ′<sub>ij</sub>代表迁移后第i台虚拟机VM′<sub>i</sub>是否放置在第j台宿主机HM′<sub>j</sub>上,是为1,否为0;得到的矩阵如下所示,<maths num="0001"><math><![CDATA[<mrow><mtable><mtr><mtd><mrow><msub><mi>P</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub><mo>=</mo><mfenced open = "[" close = "]"><mtable><mtr><mtd><msub><mi>&chi;</mi><mrow><mn>1</mn><mo>,</mo><mn>1</mn></mrow></msub></mtd><mtd><msub><mi>&chi;</mi><mrow><mn>1</mn><mo>,</mo><mn>2</mn></mrow></msub></mtd><mtd><mo>...</mo></mtd><mtd><msub><mi>&chi;</mi><mrow><mn>1</mn><mo>,</mo><mi>n</mi></mrow></msub></mtd></mtr><mtr><mtd><msub><mi>&chi;</mi><mrow><mn>2</mn><mo>,</mo><mn>1</mn></mrow></msub></mtd><mtd><msub><mi>&chi;</mi><mrow><mn>2</mn><mo>,</mo><mn>2</mn></mrow></msub></mtd><mtd><mo>...</mo></mtd><mtd><msub><mi>&chi;</mi><mrow><mn>2</mn><mo>,</mo><mi>n</mi></mrow></msub></mtd></mtr><mtr><mtd><mo>...</mo></mtd><mtd><mo>...</mo></mtd><mtd><msub><mi>&chi;</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub></mtd><mtd><mo>...</mo></mtd></mtr><mtr><mtd><msub><mi>&chi;</mi><mrow><mi>m</mi><mo>,</mo><mn>1</mn></mrow></msub></mtd><mtd><msub><mi>&chi;</mi><mrow><mi>m</mi><mo>,</mo><mn>2</mn></mrow></msub></mtd><mtd><mo>...</mo></mtd><mtd><msub><mi>&chi;</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub></mtd></mtr></mtable></mfenced></mrow></mtd><mtd><mrow><msub><msup><mi>P</mi><mo>*</mo></msup><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow></msub><mo>=</mo><mfenced open = "[" close = "]"><mtable><mtr><mtd><msubsup><mi>&chi;</mi><mrow><mn>1</mn><mo>,</mo><mn>1</mn></mrow><mo>&prime;</mo></msubsup></mtd><mtd><msubsup><mi>&chi;</mi><mrow><mn>1</mn><mo>,</mo><mn>2</mn></mrow><mo>&prime;</mo></msubsup></mtd><mtd><mo>...</mo></mtd><mtd><msubsup><mi>&chi;</mi><mrow><mn>1</mn><mo>,</mo><mi>n</mi></mrow><mo>&prime;</mo></msubsup></mtd></mtr><mtr><mtd><msubsup><mi>&chi;</mi><mrow><mn>2</mn><mo>,</mo><mn>1</mn></mrow><mo>&prime;</mo></msubsup></mtd><mtd><msubsup><mi>&chi;</mi><mrow><mn>2</mn><mo>,</mo><mn>2</mn></mrow><mo>&prime;</mo></msubsup></mtd><mtd><mo>...</mo></mtd><mtd><msubsup><mi>&chi;</mi><mrow><mn>2</mn><mo>,</mo><mi>n</mi></mrow><mo>&prime;</mo></msubsup></mtd></mtr><mtr><mtd><mo>...</mo></mtd><mtd><mo>...</mo></mtd><mtd><msubsup><mi>&chi;</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mo>&prime;</mo></msubsup></mtd><mtd><mo>...</mo></mtd></mtr><mtr><mtd><msubsup><mi>&chi;</mi><mrow><mi>m</mi><mo>,</mo><mn>1</mn></mrow><mo>&prime;</mo></msubsup></mtd><mtd><msubsup><mi>&chi;</mi><mrow><mi>m</mi><mo>,</mo><mn>2</mn></mrow><mo>&prime;</mo></msubsup></mtd><mtd><mo>...</mo></mtd><mtd><msubsup><mi>&chi;</mi><mrow><mi>m</mi><mo>,</mo><mi>n</mi></mrow><mo>&prime;</mo></msubsup></mtd></mtr></mtable></mfenced></mrow></mtd></mtr></mtable><mo>;</mo></mrow>]]></math><img file="FDA0001175324840000013.GIF" wi="1398" he="318" /></maths>1.2生成虚拟机迁移前后源主机和目的主机集合;对迁移前矩阵P<sub>m,n</sub>和迁移后矩阵<img file="FDA0001175324840000014.GIF" wi="90" he="78" />逐行统计每个虚拟机迁移前后的宿主机编号<img file="FDA0001175324840000015.GIF" wi="524" he="71" />生成迁移前后源、目的主机位置集合如下,<maths num="0002"><math><![CDATA[<mrow><mo>{</mo><mo>&lt;</mo><msubsup><mi>HM</mi><mn>1</mn><mrow><mi>s</mi><mi>o</mi><mi>u</mi><mi>r</mi><mi>c</mi><mi>e</mi></mrow></msubsup><mo>,</mo><msubsup><mi>HM</mi><mn>1</mn><mrow><mi>d</mi><mi>e</mi><mi>s</mi><mi>t</mi><mi>i</mi><mi>n</mi><mi>a</mi><mi>t</mi><mi>i</mi><mi>o</mi><mi>n</mi></mrow></msubsup><mo>&gt;</mo><mo>,</mo><mo>&lt;</mo><msubsup><mi>HM</mi><mn>2</mn><mrow><mi>s</mi><mi>o</mi><mi>u</mi><mi>r</mi><mi>c</mi><mi>e</mi></mrow></msubsup><mo>,</mo><msubsup><mi>HM</mi><mn>2</mn><mrow><mi>d</mi><mi>e</mi><mi>s</mi><mi>t</mi><mi>i</mi><mi>n</mi><mi>a</mi><mi>t</mi><mi>i</mi><mi>o</mi><mi>n</mi></mrow></msubsup><mo>&gt;</mo><mo>,</mo><mo>...</mo><mo>,</mo><mo>&lt;</mo><msubsup><mi>HM</mi><mi>m</mi><mrow><mi>s</mi><mi>o</mi><mi>u</mi><mi>r</mi><mi>c</mi><mi>e</mi></mrow></msubsup><mo>,</mo><msubsup><mi>HM</mi><mi>m</mi><mrow><mi>d</mi><mi>e</mi><mi>s</mi><mi>t</mi><mi>i</mi><mi>n</mi><mi>a</mi><mi>t</mi><mi>i</mi><mi>o</mi><mi>n</mi></mrow></msubsup><mo>&gt;</mo><mo>}</mo><mo>;</mo></mrow>]]></math><img file="FDA0001175324840000021.GIF" wi="1637" he="96" /></maths>其中,<img file="FDA0001175324840000022.GIF" wi="173" he="55" />为第k台虚拟机的源主机,<img file="FDA0001175324840000023.GIF" wi="223" he="66" />为第k台虚拟机迁移后的目的主机,k=1,2,...,m,m为矩阵中虚拟机的个数;步骤2具体的包括如下步骤,2.1查找迁移前后仅交换源、目的主机的迁移;查找源主机和目的主机位置集合,找出迁移前后仅交换了源主机与目的主机的两个虚拟机,即两宿主机上在迁移前后仅对调位置的虚拟机;2.2剔除无用迁移,若迁移前后仅对调源、目的主机的两个虚拟机所获得的内存资源相同,则将这两个对调迁移过程判定为无用迁移,将其迁移状态标记为已迁移,不再列入混合迁移算法待安置队列,其余的迁移过程为有用迁移;步骤3具体的包括如下步骤,3.1初始化迁移参数并记录虚拟机分配的内存;3.11将所有有用迁移的虚拟机状态设置为未安排;初始化虚拟机迁移批次序号mb=0,设置迁移安置数组MA<sub>K</sub>,其中MA<sub>i</sub>,i=1,2,...,K为第i台虚拟机VM<sub>i</sub>的迁移批次序号,K为全部有用迁移的虚拟机数,设置参数<img file="FDA0001175324840000024.GIF" wi="126" he="79" />为第i台虚拟机的内存,用来逐一记录每个虚拟机所分配的内存;3.12设置代表宿主机HM,接入层交换机SW<sup>ACC</sup>与汇聚层交换机SW<sup>AGG</sup>两两之间链路状态的四个参数——<img file="FDA0001175324840000025.GIF" wi="956" he="71" /><img file="FDA0001175324840000026.GIF" wi="346" he="71" />并设置四条链路的初始状态为空闲,其中<img file="FDA0001175324840000027.GIF" wi="213" he="71" />为第k台虚拟机的源主机连接源接入层交换机的链路状态,<img file="FDA0001175324840000028.GIF" wi="242" he="71" />为第k台虚拟机的目的主机连接目的接入层交换机的链路状态,<img file="FDA0001175324840000029.GIF" wi="307" he="70" />为源接入层交换机连接汇聚层交换机的链路状态,<img file="FDA00011753248400000210.GIF" wi="302" he="79" />为汇聚层交换机连接目的接入层交换机的链路状态;3.2利用混合迁移算法标记能够并行迁移虚拟机的批次序号;3.21设置k循环,k为全局循环次数且k=1,2,...,K,来进行全局匹配过程;在算法中,对全部的K台虚拟机从1开始到K进行遍历,VM<sub>k</sub>为遍历时的第k台虚拟机;3.22当遍历VM<sub>k</sub>时,若其没有进行迁移安排,则mb自增1,设置VM<sub>k</sub>在迁移安置数组所对应的第k元素值为迁移批次序号mb值即MA<sub>k</sub>=mb,并标记VM<sub>k</sub>为已安排迁移;设置VM<sub>k</sub>迁移时涉及的源主机<img file="FDA0001175324840000031.GIF" wi="171" he="62" />到源主机连接的源接入层交换机<img file="FDA0001175324840000032.GIF" wi="159" he="63" />与目的主机连接的目的接入层交换机<img file="FDA0001175324840000033.GIF" wi="163" he="55" />到目的主机<img file="FDA0001175324840000034.GIF" wi="227" he="69" />的两条链路<img file="FDA0001175324840000035.GIF" wi="531" he="71" />为独占状态;3.23当VM<sub>k</sub>的源主机<img file="FDA0001175324840000036.GIF" wi="176" he="62" />与目的主机<img file="FDA0001175324840000037.GIF" wi="227" he="70" />分别连接不同的接入层交换机,则设置<img file="FDA0001175324840000038.GIF" wi="306" he="70" />与<img file="FDA0001175324840000039.GIF" wi="307" he="70" />为独占状态,即本次迁移需要独占跨汇聚层交换机的链路,即本次迁移只能与无需占用跨汇聚层交换机链路的迁移过程实现并行;3.24在k循环中设置l循环,l为内循环次数且l=k,k+1,...,K,来寻找可与跨汇聚层迁移实现并行的迁移过程;设置l循环从k开始到K进行遍历,VM<sub>l</sub>为遍历时的第l台虚拟机;3.25当遍历VM<sub>l</sub>时,若其没有迁移安排,VM<sub>l</sub>的源主机<img file="FDA00011753248400000310.GIF" wi="174" he="61" />与目的主机<img file="FDA00011753248400000311.GIF" wi="223" he="63" />连接同一接入层交换机,并且VM<sub>l</sub>迁移时涉及的<img file="FDA00011753248400000312.GIF" wi="174" he="55" />到<img file="FDA00011753248400000313.GIF" wi="163" he="55" />与<img file="FDA00011753248400000314.GIF" wi="163" he="63" />到<img file="FDA00011753248400000315.GIF" wi="226" he="71" />两条链路空闲,则设置VM<sub>l</sub>迁移时链路<img file="FDA00011753248400000316.GIF" wi="254" he="71" /><img file="FDA00011753248400000317.GIF" wi="238" he="69" />状态为独占,设置MA<sub>l</sub>=mb,标记VM<sub>l</sub>状态为已安排;该迁移过程能够与VM<sub>k</sub>迁移并行化;3.26当其源主机<img file="FDA00011753248400000318.GIF" wi="171" he="62" />与目的主机<img file="FDA00011753248400000319.GIF" wi="226" he="63" />连接不同接入层交换机,且迁移时涉及的<img file="FDA00011753248400000320.GIF" wi="1307" he="71" />四条链路都空闲,则四个链路状态全部设为独占,设置MA<sub>l</sub>=mb,标记VM<sub>l</sub>为已安排;即该次跨汇聚层迁移可与l循环中其他无需跨汇聚层迁移的过程并行实行;3.27若四条链路均已被独占,则此虚拟机迁移过程需要等待链路空闲,保留VM<sub>l</sub>迁移状态仍旧为没有迁移安排;3.28当遍历至K,结束l子循环返回k循环,继续对未遍历到的其余虚拟机VM进行遍历;3.3利用混合迁移算法标记需要顺序迁移虚拟机的批次序号;3.31在k循环中,当遍历VM<sub>k</sub>时,若其没有迁移安排,则mb自增1,设置MA<sub>k</sub>=mb,并标记VM<sub>k</sub>为已安排迁移;当其源、目的主机<img file="FDA0001175324840000041.GIF" wi="179" he="55" />与<img file="FDA0001175324840000042.GIF" wi="227" he="63" />分别连接不同的接入层交换机,则设置VM<sub>k</sub>迁移时涉及的链路<img file="FDA0001175324840000043.GIF" wi="251" he="63" /><img file="FDA0001175324840000044.GIF" wi="622" he="78" />与<img file="FDA0001175324840000045.GIF" wi="305" he="78" />为独占状态,即本次迁移需要独占链接至汇聚层交换机的链路;3.32在l循环中,紧接k循环,若存在没有迁移安排的VM<sub>l</sub>,其源、目的主机<img file="FDA0001175324840000046.GIF" wi="174" he="55" />与<img file="FDA0001175324840000047.GIF" wi="227" he="62" />连接不同接入层交换机,且<img file="FDA0001175324840000048.GIF" wi="562" he="71" /><img file="FDA0001175324840000049.GIF" wi="694" he="77" />四条链路忙碌;将不为其标记迁移批次序号,VM<sub>l</sub>的迁移状态仍旧为未安排;3.33结束l循环返回k循环后,重新遍历剩余的未安排迁移的虚拟机;寻找其他需要跨汇聚层迁移的虚拟机,逐一标记其迁移批次序号MA<sub>l</sub>=mb,设置其迁移状态为已安排;按照mb从小到大依次排队等待汇聚层链路空闲,组成串行迁移队列;对于串行队列中的每个mb,均存在若干可与之并行进行的迁移过程。
地址 710049 陕西省西安市碑林区咸宁西路28号