第36卷第4期计算机科学V01.36No.41QQ2生!旦£查巴巳坚!曼!§£i曼望竺曼△巳!:;QQ!基于Linux内核的进程检查点系统设计与实现门朝光焦亮李香徐振朋(哈尔滨工程大学计算机学院高可信计算技术研究中心哈尔滨150001)摘要作为一种流行的软件客错机制,检查点与恢复技术的实现模式有两种:用户级和系统级。首先阐述了两者的区别,然后根据Linux可加栽内核模块机制提出了一种基于Linux内核的进程检查点与恢复实现方法。利用Linux内核线程实现了检查点与恢复内核模块,并基于此内核模块在用户层构造了一检查点函数库,为用户提供了相应接口。用户通过组合使用这些接口可以高效地实现具体检查点与恢复算法。关键词检查点与恢复,用户级,系统级,内核模块,内核线程中图法分类号TP302.8文献标识码ADesignandImplementationofProcessCheckpointingSystemBasedMENChao-guangJIAOLiangLIonLinuxKernelXiangXUZherr-peng(RS‘.DCenterofHighdependabilityComputingTechnology,HarbinEngineeringUniversity,Harbin150001,China)AbstracttwoAsapopularsoftwarefault-tolerammechanism,checkpointandrecoverytechniquecanbeimplementedbytore-modes:user-levelandsystem-level.First,thedifferencesbetweenthetwomodeswerediscussed.ThenaccordingtOtheLinuxLKM(LoadableKernelModule)meehanism,amethodwasproposedcoverydesignaprocesscheckpointandsystembasedonontheLinuxkernelCheck.pointandrecoverykernelmodulewasimplementedusingtheLinuxker-tOnelthread.Basedthiskernelmodule,acheckpointlibrarywasconstructedintheuser-levelprovidecorrespondingCallinterfacesforusers.Byusingsomeselectedinterfaces,theparticularcheckpointandrecoveryalgorithmbeimple-mentedeffectively.KeywordsCheckpointandrecovery,Userlevel,Systemlevel,Kemelmodule,Kernelthread为了保证大型计算程序高可靠地运行,提高计算机资源的利用率,容错技术应运而生。检查点机制是一种典型的软件容错技术,一方面它具有备份进程状态、生成检查点文件的功能;另一方面当操作系统出现故障或因外部差错而导致某些进程终止时,通过加载检查点文件,可以将进程卷回到最近的检查点处以实现进程状态的恢复[1。5]。所以,一个基本的检查点系统应该包括进程状态保存和进程状态恢复功能。检查点系统有两种设计模式:用户级和系统级[6’7]。基于用户级模式实现的系统通常具有较好的可移植性,但是缺乏透明性、通用性,用户需要根据不同的平台有针对性地修改应用程序源代码,然后重新编译。如果检查点函数以库函数的形式提供,还需要重新链接。修改源代码容易出错而且很多商业代码只拥有二进制可执行文件,对它们重新修改、编译是不可能的。此外,根据Unix/Linux进程概念可知,用户进程只能通过系统调用的方式来间接访问操作系统内核维护的数据.但是无法访问某些与进程状态有关的内核数据结构。因此用户级的检查点不可能完全地记录和恢复一个进程的状态,这样当系统出现故障或进程出错需要卷回恢复时就可能会导致进程无法恢复。具有代表性的用户级检查点系统有ConderE81和Libekpt[引。基于系统级模式实现的检查点系统具有全透明性,检查点机制独立于应用程序[10’11]。用户不必修改程序源代码,应用程序不必和检查点函数库一起编译,这就减少了程序出错的概率。此外,在操作系统内核空间中,与进程状态相关的任何数据结构都是可访问的。这些数据结构包括寄存器、内存区、文件描述符、信号状态等等。因此可以实现对用户进程状态的完全保存。具有代表性的系统级检查点系统有BLCR[12]和CRAK[1引。在分析参考了以上几种系统的实现后,本文根据Linux可加载内核模块(LKM)机制提出了一种基于Linux内核的进程检查点技术实现方法。在内核层利用Linux线程实现一个可动态加载的检查点与恢复模块,此模块作为内核线程来运行,实现基本的检查点与恢复功能。在用户层基于该内核模块构造了一个检查点函数库,提供给用户直观便利和丰富的检查点接口,便于用户通过组合使用这些接口来实现具体的检查点与恢复算法。到稿日期:2008—11—20本文受国家自然科学基金(60873138)资助。门朝光(1963一),男,博士,教授,博士生导师,CCF高级会员。主要研究方向为分布式系统与并行系统、可信性计算、移动计算技术,E-mail:men—chaoguang@hrbeu.edtLcn;焦亮(1982--),男・硕士研究生・研究方向为并行系统容错技术;李番(1975一).女。博士,主要研究方向为可信计算l徐振朋(1983--),男,博士研究生。研究方向为可信计算。万方数据 ・192・1系统设计1.1基本设计思路此系统的核心部分是位于Linux内核层的可动态加载和移除的内核模块。利用此模块,我们不必对Linux内核源代码进行修改,克服了修改内核源代码所带来的调试、编译以及维护困难。此模块加载到内核以后,便与内核一起以相同的优先级运行,并与内核协作完成进程检查点设置和卷回恢复功能。此内核模块可设置的检查点包括进程基本状态信息检查点、内存检查点和文件检查点。上述的Linux内核模块实现了系统的基本功能部分,仅仅利用此模块就可以对用户进程进行检查点设置和恢复操作。为了使系统具有灵活性和良好的可扩充性,我们在用户层构造检查点函数库。此函数库是基于内核模块实现的,即通过对内核模块的函数调用来构造库函数,目的是丰富和扩充内核模块功能,给用户提供直观便利和丰富的检查点接口,使用户能够通过组合使用这些接口来实现具体的检查点与恢复算法,进行算法性能评估,从而选择合适的策略来降低检查点开销、优化检查点功能。如果现有的接口不能满足用户需求,我们还可以及时对库函数进行扩充来满足用户的需要。通过Linux内核中的proc文件系统、内核模块与用户进程进行信息交互。proc文件系统具有灵活、方便的访问接口:以普通的文件读写方式即可访问到任何一个权限许可范围内的进程上下文信息。在proc文件系统中,每个进程都拥有一个目录,该目录以进程标识符PID命名,目录下有操作系统内核为本进程维护的许多状态信息,如进程内存使用状态、内存内容、虚存的逻辑段信息、打开的文件、命令行参数、进程环境信息等。proc文件系统中不同的文件包含有不同的内核信息,比较重要的有:记录cpu信息的cpuinfo文件;记录内核锁信息的locks文件;记录内存信息的meminfo文件;全面统计状态信息的stat文件;记录系统识别的分区表信息的patti—tions文件,等等。内核模块通过对proc文件系统中与用户进程相关的文件进行操作可以记录用户进程的状态信息。1.2系统原型图及系统工作原理根据以上的设计思路,我们构造出了基于Linux内核级的进程检查点系统结构原型,如图1所示。图1检查点系统结构图对一个局部节点上的用户进程设置检查点时,进程标识符PID和进程所在节点的处理器ID通过proe文件系统接口传递给内核模块。内核线程对用户进程采取检查点时,它根据PD找到相应的进程,重构进程上下文:进程打开了什么文件,进程占有或释放了多少内存区域等等。由于内核线程最初就对进程相关的地址空间段写保护,因此当应用程序试图向这些页面读写数据时,这些操作就被检测到并被记录下来作为检查点文件内容的一部分。通过proc文件系统,此模万 方数据块还提供一个简单的接口供用户使用,用户可动态地对进程设置检查点或者重启进程。根据图1所示,经过步骤②③,可以实现基本的检查点功能。用户程序运行时,产生一个进程标识符PID,相应地在proc文件系统中产生一个以该进程号命名的文件目录,该目录下包含进程的各种信息,如进程的当前工作目录、进程定义的环境变量、进程打开的文件描述符、进程的地址空间映射文件等,检查点与恢复内核模块可以通过读取、汇总这些信息来保存进程状态,生成检查点文件。经过步骤①②③,可实现在用户具体策略支持下的程序检查点与恢复功能。这里所说的策略通常指用户新提出的检查点与恢复算法,或是对现有算法的改进,应用此检查点系统平台来实现并测试算法性能。用户可以组合使用检查点库中的函数来实现算法,执行的时候将用户程序加载进来与算法结合在一起运行,然后与步骤②③一样,内核模块对用户进程设置检查点。无论是经过步骤②③还是经过步骤①②③来对用户进程设置检查点,对于用户来说,这些操作都是透明的,既不需要修改用户程序,也不需要对用户程序和检查点库一起进行编译链接。2系统工作流程2.1检查点设置过程内核线程进行如下操作来对一个用户进程采取检查点:(1)阻塞用户进程运行;(2)跳转到用户进程地址空间;(3)保存用户进程映像:保存数据段,包括3个区域:初始化数据区、未初始化数据区、堆;保存相关内存段。(4)保存进程用户栈:保存栈指针;保存栈空间。(5)保存与进程上下文切换有关的项(包括程序计数器PC、处理机状态字寄存器PSW等);(6)保存用户进程打开的文件描述符;(7)保存信号状态(包括即将被用户进程接收的信号)和由用户进程定义的信号处理函数;(8)启动用户进程运行。在用户进程映像的保存中。进程正文段(即代码段)通常不需要保存,程序启动时装入程序会对它进行恢复。正文大小一般是不变的,通常在地址空间的低端。创建静态链接的Linux进程时,操作系统将整个正文段装入虚地址空间。通常是从地址0开始的,Linux要求正文段必须以“只读”方式装入,因此在运行过程中,正文段不会做任何修改。此外,如果用户进程运行结束或者通过proc文件系统接收到适当的命令。内核线程停止监控用户进程。2.2恢复、重启用户进程内核线程进行以下操作来对用户进程进行后向卷回恢复:(1)阻塞用户进程运行;(2)恢复进程数据段(进程正文段随着程序的装入自动恢复);(3)恢复非栈的一般的段;(4)恢复进程用户栈段;(5)恢复与进程上下文切换有关的项;・193・(6)根据信号信息表恢复与信号有关的信息;(7)恢复与进程相关的文件信息;(8)重新启动进程运行。恢复过程需要根据保存的检查点文件来进行。这个文件可能包含根据检查点算法得到的许多段,每一部分包含着与进程状态相关的信息。例如在增量检查点中,第一段是进程的初始化状态,它是一个全检查点,接下来的段包含从前一个检查点处开始的增量变化。如果只恢复第一段则相当于从头开始启动进程。3主要函数设计3.1内核模块主要函数设计(1)进程控制函数stop_process(pid_tpid):参数pid为内核线程通过系统调用getpid()函数得到的当前用户进程标识号,此函数功能是阻塞当前用户进程的运行。unstop_process(pid—tpid):参数pid同上面的pid值,此函数功能是当进程检查点设置完成或进程卷回恢复完成后,重新启动进程。(2)进程状态信息保存函数intckpt—store(constchar。力Z跏彻肾,pid—t户磁,intflags):参数∥如加撇代表保存检查点映像文件名,pid代表用户进程标识号,flags的值由两个可选项组成:ckpt—code一丘如和娩∥一share—library。若选择前一项则存储进程二进制文件中的代码段部分,否则不存储,在一般情况下不选择此项;若选择后一项则存储共享库,否则不存储。(3)进程状态恢复函数introllback—restore(constchar。filename,pid_tpid):参数^lename代表检查点映像文件名,pid代表卷回恢复的用户进程标识号。(4)进程消息记录函数immessage_store(intmsg—from一夕谢,intmsg—to—pid,charbuf[SIZE]):参数msg—from—pid代表发送消息的进程,msg_topid代表接收消息的进程,字符数组埘是存储消息内容的内存缓冲区。(5)进程消息恢复函数immessage—restore(structMessage‘message,户掰一tpid):参数message是一个指向消息结构体的指针变量,pid是要恢复进程标识符,程序执行时根据pid从消息结构体数组中找到进程相关的消息进行恢复。3.2检查点库主要函数设计检查点库将检查点与恢复内核模块所提供的系统服务结合起来,并在此基础上进行丰富、扩充而形成用户能够直接使用的丰富的检查点接口,包括不同层次上对用户进程资源的状态检查和状态恢复API、性能优化和策略支持API以及一些辅助性的API。下面介绍几个主要的API函数:(1)用户进程状态信息保存接口函数intprocess—ckpt(pid—tpid,ehar。,m榭,structOption。option):参数pid是用户进程标识号,11a舰e是保存检查点文件的文件名。参数option是结构体指针变量,通过设置它的成员变量值,可以根据不同的算法进行不同的检查点操作。(2)用户进程状态恢复接口函数・194・万 方数据intproce豁一restart(char。name,pid—tpid):根据触7凇所指定的检查点文件模拟一个进程,并恢复其运行。(3)增量检查点函数intset_ckpt_incrommtal(pid_tpid):利用页面保护技术来识别哪些页面应该包括在增量检查点文件中,在设置一个检查点之后.触发mprotect()系统调用。将全部页面的数据空间设置为只读,当对一个保护页面进行写操作时,系统就会捕捉到一个SEGV信号。这时将此页面的读写保护设置为读一写,并且此页面被标记为dirty,当设置下一个检查点时,只包含“dirty”页面。(4)检查点压缩函数intckpt—compress(pid—tpid):采用标准的压缩算法实现此函数,但是只有在压缩速率大于磁盘写数据速率,并且检查点被明显压缩时才能有效降低系统开销。此函数通常只在并行计算中用到。(5)进程内存空间相关操作函数intmemory_include__bytes(caddrtozldr,l嬲i删"natlen):在检查点中包含起始地址为add?",长度为len的内存段。immemory_excludebytes(caddrt口蒯r,unsignedint/en):在检查点中排除起始地址为(比/dr,长度为/en的内存段。4系统性能评价试验环境为:AMDAthlon(tm)DualCoreCPU4400+,2.31GHz,1G内存,120G硬盘。应用程序采用矩阵幂运算,以在终端输入命令行的形式设置检查点及卷回恢复。首先我们不使用任何策略,仅使用内核模块提供的功能对应用进程采取检查点及卷回恢复,试验数据如表l所列。荤~基黧翌黧由表1中的数据可以看到系统可以完整的保存、恢复用户进程状态,并且操作是全透明的。然后我们融入策略支持来对应用进程采取检查点及卷回恢复,采用增量检查点策略,对应用进程进行两次检查点操作(CKl和CK2),两次操作之间的间隔设为3500ms。试验数据如表2所列。慕竺心:容淼检篙小端表2增量检查点策略支持下的数据高嚣巡∑耗愁间但嵩1絮m1627撇∞∞∞毫|7l{叠识Ⅲ瓴2喜!曲奢|∞略¨"蛎2由表2中的数据可知,对进程第二次采取检查点(CK2)所耗费的时间以及生成的检查点文件的大小与第一次(CKl)相比明显下降,这也正符合增量检查点的算法特点。由于系统设计遵循机制与策略分离的思想,在内核层实(下转第214页)[33*簟馘重譬鬻RidvanS。KemalT,Novruz八Anewapproachonsearchforsimilardocumentswithmultiplecategoriesusingfuzzycluste-ring.Expert[43[s3andSystemswithApplications.2008(34):2545—2554ManberU,Sip.itM,GopalRWebGlimpse:combiningbrowsingsearching//ProceedingsoftheUSENIX1997.1997。ISunA。LiraEP.Performancerchicaltextmeas嘲唧tframeworkforhiera-classification.JournaloftheAmericanSocietyfor图3可信排名效果InformationScienceandTechnology。2003,54(11):1014-1028[63[73YolandaG,Donovan八Towards00ntenttrustofwebres4)ur—结束语本文通过Web挖掘的数据域的可信评测,给出了一个Web挖掘可信域评测系统原型。利用web域专业分类,评测域的专业度,并利用Web内容可信判定现有的结果和用户的主观评测反馈结果评测域的内容可信度,从而达到评测一个域挖掘的结果的可信度,从而获得web挖掘的可信数据源,影响最终结果,以求在显示中将可信结果排列在前。在实现方法上,设计了信任域预处理,使之与挖掘引擎紧密结合,共同完成web上的数据挖掘。本文下一步工作将进一步研究现有的信任评测和实现结果排序,以求更换推断的可信结果。[83ce&Journalofwebsemantics,2007(11):337—358Website:AninsidelookatKristinREBehindthetionoftheproduc-Web-basedtextualgovernmentinformatio儿GovernmentInformationQuarterly,2004(21):337—358LaenderAbyH,BarthierRN,Ahigran&DEBy-E-dateextractionexample.Data&KnowledgeEngineering,2002,40(2):121—154[9]“nSH,HoJ ̄LDiscoveringinformativecontentblocksfromWebdocuments//ProceedingsoftheEighthACMInternationalCon/erenceonKnowledgeDiscoveryandDataMining.ACMPress,2002:588-593[10]AlbertoD,AntonioG,PabloG.User—centredversussystem-参考文献1-13ZhouX,LiY,etaLUsingInformationFilteringincentredevaluationofWebDataapersonalizationsystem.InformationPro-eessingandManagement,2008(44):1293—1307[113http://lucene.apache.org/nutch/index.html[123高克宁,王波,等.www网站分类体系包装器wCSWEJ].东北MiningProcess//2007IEEE/WIC/ACMInternationalCorrk—renceonWebIntelligence_2007:163—169C,HsinchunC.Amachinelearningapproachusingcontentto[2]Michaelpageweb大学学报:自然科学版,2007,21(1):44—48filteringandstructureanalysi.DecisionSu-[13]王伟,张东启.基于Bayes网络的内容信任ER].上海:同济大学嵌入式系统与服务计算教育部重点实验室,2008pportSystems,2008(44):482—494(上接第194页)现基本功能的基础之上,在用户层实现策略支持。这样就使系统具有良好的可扩充性、通用性、灵活性以及可维护性。此外,通过proc文件系统,本检查点系统提供了一个简单的接口供用户以命令行的形式对进程进行动态操作,方便灵活。采取检查点时使用命令行:flag==checkpoint,需要恢复、重启进程时,使用命令行:flag==recovery,程序将加载检查点文件,回滚到最近的检查点状态重新执行。结束语本文简要介绍了用户级进程检查点系统与系统级进程检查点系统各自的优缺点。并在此基础上利用Linux内核模块设计实现了基于Linux内核的进程检查点系统。介绍了此系统的设计思路、工作原理以及工作流程,并且给出了几个主要函数的原型及各自的功能实现,最后对系统的性能进行整体评价,此检查点与恢复系统结构设计具有灵活性、通用性、良好的可扩充性以及可维护性优点。[831998・21(4):367—375[5]SanchoJC,PetriniF,JohnsonG,etaLOntheFeasibilityofIn—cr锄eataloftheCheckpointingforScientificComputing//ProceedingsInternational18thParallel&DistributedProcessingSymposium,2004.IPDPS’04.April2005:58[6]LuisMs,JoaoGS.System—levelversusUser—DefinedCheck—pointing//ProceedingsbleSeventeenthIEEESymposiumonRelia-DistributedSystems。1998.1SRDS’98.October1998:68andKernelLevelF7]MeyerN.UsertheSun2003:15Cheekpointing//ProceedingsofMeeting,2003.AprilMierosystemsHPCConsortiumTannenbaumT。Litzkow舰TheCondordistributedprocessingsystem.Dr.Dobb’sJoumal,1995,25(2):40-48[9]PlankJS,MicahB。GerryK,eta1.Libckpt:Transparentcheck—pointingunderunix//UsenixWinterTechnicalConference.Ne-wOrlean¥,Louisiana,USA。1995[10]SdnksranS,JeffreyMS,BarrettB。etaLTheLAM/MPICheck—参考文献[13Josetionpoint/RestartFramework:System-lnitiatedCheckpointing//ProceedingsoftheLACslber2003:479CS,PetriniForwardinF,DavisK,etaLCurrentPracticeandaDirec—Symposium,2005.LACSI’05.Octo—aLCheckpoint/RestartImplementationforFaultTolerance//Proceedingsofthe19thIEEEInternationalParalleland[11]GioiosaR,JoseCheckpointingforParallelCS,SongJiang,etTransparent,Incrementalofthe2005Ka^|IEEEDistributedProcessingSymposium,2005.IPDPS’05.AprilM。AlvisiL,WangY ̄LASurveyofRollhack-Reco-inatKemelLevel:aFoundationforFaultTolerance2005:19Computers//Proceedings[23ElnozahyverySCl05Conference,2005.SC’05.2005:9ProtocolsMessage-PassingSystems.ACMComputing[12]PaulHH,JasonCD.Berkeleylabcheckpoint/restart(BLCR)clusters.JoumalofPhysics,2006,46(3):494—499Surveys,2002,34(3):375—408[3]汪东升,沈美明,郑纬民。等.一种基于检查点的卷回恢复与进程迁移系统IJ].软件学报。1999,10(1):68—73[4]魏晓辉,鞠九滨.分布式系统中的检查点算法l-J].计算机学报,forLinux[133ZhongHua。NiehJ.a5己AK:LinuxCheckpoint/RestartasaKemelModule.TechnicalReportCR3CS-014-01.D和巾fIHltofComputerSdence,ColumbiaUniversity,NewYork。November2001万方数据 ・214・基于Linux内核的进程检查点系统设计与实现
作者:作者单位:刊名:英文刊名:年,卷(期):被引用次数:
门朝光, 焦亮, 李香, 徐振朋, MEN Chao-guang, JIAO Liang, LI Xiang, XUZhen-peng
哈尔滨工程大学计算机学院高可信计算技术研究中心,哈尔滨,150001计算机科学
COMPUTER SCIENCE2009,36(4)1次
参考文献(13条)
1.Plank J S;Micah B;Gerry K Libckpt:Transparent checkpointing under unix 19952.Tannenbaum T;Litzkow M The Condor distributed processing system 1995(02)3.Meyer N User and Kernel Level Checkpointing 2003
4.Luis M S;Joao G S System-level versus User-Defined Checkpointing 1998
5.Sancho J C;Petrini F;Johnson G On the Feasibility of Incremental Checkpointing for ScientificComputing 2005
6.魏晓辉;鞠九滨 分布式系统中的检查点算法[期刊论文]-计算机学报 1998(04)
7.Zhong Hua;Nieh J CRAK:Linux Checkpoint/Restart as a Kemel Module[Technical Report CUCS-014-01]2001
8.Paul H H;Jason C D Berkeley lab checkpoint/restart(BLCR)for Linux clusters 2006(03)
9.Gioiosa R;Jose C S;Song Jiang Transparent,Incremental Checkpointing at Kemel Level:a Foundationfor Fault Tolerance for Parallel Computers 2005
10.Sankaran S;Jeffrey M S;Barrett B The LAM/MPI Checkpoint/Restart Framework:System-lnitiatedCheckpointing 2003
11.汪东升;沈美明;郑纬民 一种基于检查点的卷回恢复与进程迁移系统[期刊论文]-软件学报 1999(01)
12.Elnozahy M;Alvisi L;Wang Y M A Survey of Rollback-Recovery Protocols in Message-Passing Systems[外文期刊] 2002(03)
13.Jose C S;Petrini F;Davis K Current Practice and a Direction Forward in Checkpoint/RestartImplementation for Fault Tolerance 2005
引证文献(1条)
1.张光辉.王丽娟.陈姗 采用增量检查点技术改进Condor检查点机制的研究[期刊论文]-河南农业大学学报 2010(6)
本文链接:http://d.g.wanfangdata.com.cn/Periodical_jsjkx200904050.aspx