基于Linux操作系统进程迁移系统设计
2014-04-29王科怀
王科怀
摘 要:对已有的经典算法进行分类对比,选择了具有较高迁移速度和对源节点没有残余依赖性的Total-copy算法,基于选择的算法,把迁移系统分为Manager模块、MigrateOut模块和MigrateIn模块等三个模块,并给出了主要模块的实现流程图、设计原理和实现过程。
关键词:进程迁移;迁移算法;Linux内核;集群系统
中图分类号:TP316 文献标识码:A 文章编号:2095-2163(2014)02-
System Design of Process Migration based on Linux Operating System
WANG Kehuai
(PLA Academy of National Defense Information, Wuhan Hubei 430010 ,China)
Abstract: This paper classifies and contrasts the existing classical algorithm, and chose Total-copy algorithm with higher migration rate and no residual dependence on the source node .According to Total-copy algorithm, the migration system is divided into Manager module, MigrateOut module and MigrateIn module. Based on the divided modules,the paper also gives the flow chart of the main modules, design principles and implementation process.
Keywords: Process Migration; Migration Algorithm; Linux Kernel;Distributed Systems
0 引 言
随着计算机部件性能的日渐提高和价格的不断下降,集群系统在高性能计算方面的重要作用正愈益突显,在集群系统的应用中会遇到负载平衡、通信性能和可用性等问题,而进程迁移技术则能够很好解决这类问题,只是向原有已形成工业标准的系统增加透明的进程迁移,却非常困难,而直接从头设计具有迁移能力的新系统并不现实,另一方面,Linux系统作为世界上最为著名的自由软件,得到了业界的广泛认可和普遍关注[1]。然而,需要指出的是,截止到Linux2.6版本,还未提供对进程迁移的支持技术。基于此,本文开展利用Linux源代码的开放性来进行集群系统中的进程迁移的研究,也是具有一定现实意义和重大应用价值的。
1 进程迁移算法分析
进程迁移是指将一个正在运行的进程从一个节点迁移到另外一个节点上运行的过程,该迁移过程可以发生在进程运行的任何时刻。同时,在此过程中需要迁移的进程信息有:进程控制和运行信息、属于该进程地址空间、进程缓存的消息和关于通信连接的控制信息、进程的文件描述符和缓存的文件块等[2,3]。进程迁移算法即是基于上述内容来实现进程迁移的,目前流行的迁移算法有Total-copy、Lazy-copy、Pre-copy、Flushing[4]。
本文要实现的进程迁移需要具有一定容错性。在集群系统中,源节点是有可能出现错误的,在进程迁移后源节点也有可能被隔离,因此,设计算法时需要优先考虑对源节点的残余依赖性,即要求目的节点对源节点没有残余依赖性。而Lazy-copy在残余依赖性方面却有着不容忽视的明显缺陷,所以Lazy-copy算法并不适合本文中的进程迁移[4]。另外,当产生的“脏页”较多,也就是当需要二次传送的页面较多时,Pre-copy算法的进程迁移后的完成时间与不进行进程迁移的完成时间相比,也不占任何优势[5]。显然,Pre-copy也不适合本文。
再者,如前文所述的Total-copy算法对于源节点没有残余依赖,而且,本文所要实现的进程迁移基本上多为基本计算以及只使用字符,文件等简单结构的进程,对一些较为复杂的图形进程,并不在本研究考虑的范围内,因此其迁移时延也不是很大。经过对现有算法的综合评定可得,本文将选用Total-copy算法实现进程迁移。
2系统的设计与实现
2.1 系统整体架构
2.1.1整体系统框图
本文的进程迁移系统可分为三个模块,也就是:MigrateOut、MigrateIn、Manager。各部分间的关系如图1所示。
图1 迁移系统结构框图
Fig.1 Migration system architecture
2.1.2系统运作流程
进程迁移中,各部分运行的基本流程可描述为:
(1)用户User通知Manager要进行进程迁移,同时将迁移进程的进程号和目的主机的信息传递给Manager;
(2)Manger检查待迁移进程source是否合法,以及目的主机DestinationHost是否可达等,而后通知MigrateOut将source进程迁移到Destination Host主机;
(3)源主机Source Host将source进程挂起后,MigrateOut即开始向目标主机的MigrateIn发送source进程的全部信息,其后杀死source进程;
(4)目标主机Destination Host的MigrateIn可根据发来的信息,在目的主机上重建此进程,并使其在目的主机上继续执行。
2.1.3进程迁移协议
各个节点之间采用高速的以太网互联,因此,从迁移协议的角度来看,源主机MigrateOut模块中的协议部分,类似于一个Client,而目标主机MigrateIn模块中的协议部分,就类似于一个Server。
Client将获取到的进程迁移信息通过Linux网络功能发送,Server端通过网络功能接受传来的信息,并提取其中的数据交给MigrateIn模块处理。
在因特网协议族中,TCP协议具有如下特点:
(1) 面向连接的传输;
(2) 端到端的通信;
(3) 高可靠性,确保传输数据的正确性,不出现丢失或乱序;
(4) 全双工方式传输;
(5) 采用字节流方式,即以字节为单位传输字节序列;
(6) 紧急数据传送功能。
TCP的这些特点使其可以解决一些通信的错误,随之工作量也有所降低,为此,本文选择TCP作为基本的网络传输协议。
2.2 模块的设计
2.2.1 Manager模块的设计
Manager模块的设计较为简单,在Manager模块接收到从用户发送的迁移进程号和目的主机后,即开始进行信息校验和迁移准备工作:
(1)首先是校验待迁移进程的进程号,进程号如果为0或者current,则本次迁移失败,并通知用户不能进行迁移。这里并不是除了以上两个进程外即都能迁移,在本系统中符合如下状况的进程是无法进行迁移的[6,7]。相应状况分别为:
① 进程映射了一些设备内存;
② 进程为内核守护进程;
③ 进程的部分内存由mlock系统调用并锁住;
④ 进程以共享内存的方式使用文件或者使用了SysV IPC的共享内存等。
(2)接着对目的主机进行通信测试,以确定目的主机是否可达,若不可达,则本次迁移失败,同时通知用户。
(3)若目的主机可达,则在两者间建立相应的socket通信。
2.2.2 MigrateOut模块的设计
作为迁移进程系统中的传输模块,MigrateOut模块负责获取待迁移进程的全部信息(主要包括进程控制和运行信息、内核栈、地址空间等),同时将获取信息通过高速互联网络发送到目的节点上。在全部信息传送完成后,会中止源进程,并收回其相应资源。MigrateOut模块的流程图如图2所示。
图2 MigrateOut模块流程图
Fig.2 MigrateOut module flowchart
2.2.3 MigrateIn模块的设计
作为迁移进程系统中的接受模块,MigrateIn模块负责接受源主机上发送的数据,并根据提取出来的信息,重建源进程的task_struct结构和内核空间栈,再建立得到用户空间的页面及页表项,在完成以上工作后开始执行新进程,断开socket链接。MigrateIn模块的流程则如图3所示。
图3 MigrateIn模块流程图
Fig.3 MigrateIn module flowchart
3 结束语
本文对已有的经典迁移算法从理论上进行了比较,主要基于“决定进程迁移”到“在目标节点上恢复执行”之间的时延、进程迁移的总时延、残余依赖性等三个方面,即根据对其各自优缺点的分析,选择了Total-copy算法。算法选定后,将迁移系统分为Manager模块、MigrateOut模块和MigrateIn模块等三个部分,并给出了主要模块的实现流程图、设计原理和实现过程。在对迁移算法的设计中,主要对Linux内核的相关机制进行了分析和改造,而且对于进程迁移中的建立动作,进行了解析和改造。
参考文献
[1] FREEMAN D. Experience building a process migration subsystem for UNIX[C]//Proceedings of the USENIX Winter Conference,1991:349-355.
[2] MILOJICIC D S, DOUGLAS F, PAINDAVEIN Y. Process Migration[R]. ACM Computing Surveys,2000,32(3):241-299.
[3] SMITH J M. A survey of process migration mechanisms[R]. ACM SIGOPS Operating Systems Review,1998,22(3):28-40.
[4] 邱毓兰,刘曾满,王卓立. Linux操作系统环境中的进程迁移算法研究[J].武汉大学学报(自然科学版),1999,45(3):276- 278.
[5] 陆桑璐,谢立.进程的动态迁移技术[J].计算机研究与发展.1997.34(9):64-65.
[6] Robert Love. Linux内核设计与实现[M].陈莉君,译,北京:机械工业出版社,2006.
[7] Mel Gorman. 深入理解Linux虚拟内存管理[M].白洛,译.北京:北京航空航天大学出版社,2006.