Condor运行有多种模式,不同的模式有各自不同的功能。
在standard模式下,Condor提供检查点和远程系统调用。这些特性使得任务的运行更加可靠并且允许任务从机群中的任何地点以相同方式访问资源。要把一个程序配置成标准模式任务,就必须使用condor_compile进行重连接。大多数程序都能配置成标准模式任务。
一个检查点映像本质上就是任务当前运行状态的一幅快照。如果某件任务必须从一台机器迁移到另一台上面,Condor就会创建一个检查点映像,然后把这个映像拷贝到新机器上,随后从刚才中断的位置重新启动这个任务。如果一台机器在它正在运行某项任务的时候出现崩溃或故障,Condor能够采用最近期的一份检查点映像在某台新机器上重新启动这项任务。这样一来,任务就可以经年累月的运行而不用担心突发性的计算机故障。
要想获得检查点功能,必须用condor_compile把源程序与condor库进行链接。
设立检查点有2种方式:
1,在程序运行期间发送信号,使condor做检查点,需要人为控制。若希望进程进行一次检查点操作后中止运行,用户键入CTRL+Z;若希望进程进行一次检查点操作后进程继续运行,键入CTRL+C。
2,在源程序中调用condor检查点函数库,程序自动做检查点。
利用检查点文件恢复被中断的进程,键入命令:
<程序名> -_condor_restart <检查点文件名>
Condor检查点库:
① void init_image_with_file_name(char *ckpt_file_name) 设置检查点映像文件名。
② void init_image_with_file_descriptor(int fd) 设置文件描述符名。
③ void ckpt() 进行一次检查点操作并存入检查点文件,之后程序继续运行
④ ckpt_and_exit() 进行一次检查点并存入硬盘,之后中止程序运行
⑤ void restart() 读取检查点映像文件,恢复到最近检查点时刻的状态开始运行。
⑥ _condor_ckpt_disable() 使检查点功能临时失效
⑦ void _condor_ckpt_enable() 必须在_condor_ckpt_disable调用之后调用,用于恢复检查点操作
⑧ int condor_warning_config(const char *kind,const char *mode) 配置由condor提供的警告提示中哪些是可见的。
⑨ extern int condor_copress_ckpt 检查点映像记录是否压缩的标志,0为不可压缩,1为记录压缩保存。
下面以第2种设立检查点的方法为例:
test_1.c
#include <stdio.h>
#include <unistd.h>
extern void ckpt_and_exit();
extern init_image_with_file_name(char *);
extern void ckpt();
extern void ckpt_and_exit();
int main()
{ init_image_with_file_name("test_1.ckpt");
int a=1;
int i=0;
while(a==1)
{
printf("test%d!\n",i++);
sleep(1);
if((i%10)==0) ckpt_and_exit();
}
return 1;
}
每输出10个test后做1次checkpoint,然后程序退出。
1)
[root@node1 program]# condor_compile gcc -O -o test test.c [root@node1 program]# setarch i386 -R -L ./test //产生test_1.ckpt文件[root@node1 program]# setarch i386 -R -L ./test -_condor_restart test_1.ckpt