CRAK——Linux上的checkpoint/restart技术

CRAK是一种在Linux上实现的进程checkpoint/restart技术,通过内核加载模块实现,避免修改内核源码。它支持在分布式负载均衡、rollback和系统恢复等场景下使用。CRAK的工作流程包括停止进程、保存状态到文件、在目标主机上恢复。其设计理念是不重写OS,仅以模块形式工作,支持老版本应用程序,且低开销。然而,由于其年代久远,可能存在一些限制和错误,适用于研究和原型开发。
摘要由CSDN通过智能技术生成

我们都用过虚拟机,它能让保存一个正在运行系统的状态,这里用到的技术就是checkpoint,日后还可以restart,不过这是针对整个系统,有没有可能只checkpoint一个process,这个方向引来了研究热潮,CRAK就是其中做的比较不错的一个。


Checkpoint/restart技术应用场景:

1. 在分布式负载均衡方面,往往需要一个进程从一个host移到另一个host上

2. rollback:出错后可以回滚

3. 在系统关机前checkpoint,当系统重启后可以恢复程序执行


但是遗憾的是现在很多主流的商业和流行的操作系统,Unix,Linux等,都对fault-tolerance或分布式关注不够,并没有checkpoint/restart机制,这也给在其上加入这种机制带来很大的困难。虽然修改内核源码带来极大的困难,但有人想出了一个很聪明的办法:以内核可加载模块的形式引入checkpoint/restart机制。CRAK是这一理念的践行者,并可以作为模块应用在 linux kernel 2.6.25 版本 (但 2.6.24, 2.6.27 和 2.6.32 并不支持 CRAK)。


先来看一下CRAK的设计理念:

1. 不是重写OS,利用通用OS,以模块加载的形式工作在OS上

2. 支持legacy applications

3. 低的overhead,所以不依赖stub process和home node


CRAK的工作流程(讲述 process migration):

1. 加载模块到内核

2. 发出请求:checkpoint一个process

3. kernel收到请求后stop这个process,之后开始checkpoint它

4. kernel将它的state存到一个file中,然后这个process被kill掉了(因为它要开始迁移了)

5. 在要迁移到的host上创建一个新的process,将保存的state给它


CRAK提供的user interface是:

1. checkpoint:用户要做的是指明哪个process被checkpoint,创建的checkpointed imgage被存在哪里(硬盘或网络发送)。我们上面在checkpoint后kill掉了进程,用户还可以选择不kill

2. restart:当要恢复时,用户要使用那个image,让进程重生


这样,我们可以自己创建一个程序来监管你想要checkpoint的程序,定期自动去checkpoint。


Checkpoint:

当用户说要checkpoint某个进程时,都有哪些进程信息要save:

  • address space
  • register set
  • opened files/pipes/sockets
  • System V IPC structures
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Linux下的rar解压缩工具: RAR 5.60 beta 1 Copyright (c) 1993-2018 Alexander Roshal 21 Mar 2018 Trial version Type 'rar -?' for help Usage: rar <command> -<switch 1> -<switch N> <archive> <files...> <@listfiles...> <path_to_extract\> <Commands> a Add files to archive c Add archive comment ch Change archive parameters cw Write archive comment to file d Delete files from archive e Extract files without archived paths f Freshen files in archive i[par]=<str> Find string in archives k Lock archive l[t[a],b] List archive contents [technical[all], bare] m[f] Move to archive [files only] p Print file to stdout r Repair archive rc Reconstruct missing volumes rn Rename archived files rr[N] Add data recovery record rv[N] Create recovery volumes s[name|-] Convert archive to or from SFX t Test archive files u Update files in archive v[t[a],b] Verbosely list archive contents [technical[all],bare] x Extract files with full path <Switches> - Stop switches scanning @[+] Disable [enable] file lists ad Append archive name to destination path ag[format] Generate archive name using the current date ai Ignore file attributes ap<path> Set path inside archive as Synchronize archive contents c- Disable comments show cfg- Disable read configuration cl Convert names to lower case cu Convert names to upper case df Delete files after archiving dh Open shared files ds Disable name sort for solid archive dw Wipe files after archiving e[+]<attr> Set file exclude and include attributes ed Do not add empty directories en Do not put 'end of archive' block ep Exclude paths from names ep1 Exclude base directory from names ep3 Expand paths to full including the drive letter f Freshen files hp[password] Encrypt both file data and headers ht[b|c] Select hash type [BLAKE2,CRC32] for file checksum id[c,d,p,q] Disable messages ierr Send all messages to stderr ilog[name] Log errors to file inul Disable all messages isnd Enable sound iver Display the version number k Lock archive kb Keep broken extracted files log[f][=name] Write names to log file m<0..5> Set compression level (0-store...3-default...5-maximal) ma[4|5] Specify a version of archiving format mc<par> Set advanced compression parameters md<n>[k,m,g] Dictionary size in KB, MB or GB ms[ext;ext] Specify file types to store mt<threads> Set the number of threads n<file> Additionally filter included files n@ Read additional filter masks from stdin n@<list> Read additional filter masks from list file o[+|-] Set the overwrite mode oh Save hard links as the link instead of the file oi[0-4][:min] Save identical files as references ol[a] Process symbolic links as the link [absolute paths] or Rename files automatically ow Save or restore file owner and group p[password] Set password p- Do not query password qo[-|+] Add quick open information [none|force] r Recurse subdirectories r- Disable recursion r0 Recurse subdirectories for wildcard names only rr[N] Add data recovery record rv[N] Create recovery volumes s[<N>,v[-],e] Create solid archive s- Disable solid archiving sc<chr>[obj] Specify the character set sfx[name] Create SFX archive si[name] Read data from standard input (stdin) sl<size> Process files with size less than specified sm<size> Process files with size more than specified t Test files after archiving ta<date> Process files modified after <date> in YYYYMMDDHHMMSS format tb<date> Process files modified before <date> in YYYYMMDDHHMMSS format tk Keep original archive time tl Set archive time to latest file tn<time> Process files newer than <time> to<time> Process files older than <time> ts[m|c|a] Save or restore file time (modification, creation, access) u Update files v<size>[k,b] Create volumes with size=<size>*1000 [*1024, *1] ver[n] File version control vn Use the old style volume naming scheme vp Pause before each volume w<path> Assign work directory x<file> Exclude specified file x@ Read file names to exclude from stdin x@<list> Exclude files listed in specified list file y Assume Yes on all queries z[file] Read archive comment from file
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值