找回密码
 新注册用户
搜索
查看: 6741|回复: 3

推荐阅读:Boinc-全球计算-简介

[复制链接]
发表于 2005-3-5 23:51:05 | 显示全部楼层 |阅读模式
下载阅读地址:http://fans.equn.com/dingcong/boinc.doc
由于 word 文档格式的原因,以下只能转出纯文字部分,建议下载后阅读。

BOINC
加州大学伯克利分校(UC Berkeley)首先提出了建立BOINC的想法。BOINC的中文全称是伯克利开放式网络计算平台(Berkeley Open Infrastructure for Network Computing),他能够把许多不同的分布式计算项目联系起来统一管理。并对计算机资源进行统一分配(比方您对研究爱滋病药物和探索地外文明同时感兴趣,您就可以同时选择两个运行,并设置优先级)。对统计评分系统进行统一管理(无论你在为哪个项目工作,只要你奉献CPU时间长,就积分高)。有了这样的统一管理,的确给PANDE小组这样的科学研究机构提供了便利!
Boinc来自Berkeley,它产生的原因是针对上述一个这些各自为政的志愿者计算提供一个有效的统一后台.这样,应用的开发者只需要关注自己的算法实现,对于在志愿者计算中相同的一些操作过程,如任务的下载,结果的提交,客户端的显示等,都由Boinc提供的统一的客户端来实现(或由boinc提供的API来实现).
Boinc提供了两方面的API
Ø        The BOINC API
Ø        The BOINC graphics API
下表描述了Boinc服务器和客户端的有些特性
表 2.  BOINC的特性
服务器
Ø        灵活的应用程序框架现存以常用语言(C, C++, Fortran)编制的应用程序经小幅修改或不做修改即可作为BOINC应用运行。一个应用程序可由几个文件组成(例如,多个程序和一个用于协调的脚本)。新版本的应用程序可以在没有参加者介入的情况下部署。Ø        安全性BOINC可以保护应用程序免受几类攻击。例如,它使用基于公钥加密的数字签名来防止病毒的扩散。Ø        多服务器和容错工程可以包含分立的调度和数据服务器,每种类型有多个服务器。客户端自动尝试替换服务器;如果所有服务器都无法正常工作,客户端做指数后延以避免当服务器重新可用后造成服务器过载。Ø        系统监控工具BOINC包含一个基于web的系统,显示随时间变化的测量数据(如:CPU负荷,网络传输,数据表大小)。这简化了诊断性能问题的工作。Ø        开放源码BOINC是开放源码的;它在Mozilla公开许可证1.0版下分发。应用程序不必是公开源码的。BOINC可以用于私人、商业或者公共的分布式计算工程,每个工程必须自行提供和维护其服务器系统;这些系统可以方便地用开放源码的组件(MySQL, PHP, Apache)进行安装设置。Ø        大型数据支持BOINC支持这样的应用程序,它产生或消耗大量数据,或使用大量内存。数据的分发和收集可以散布在多台服务器上,参与者的主机只传输可接受的大型数据。用户可以指定磁盘占用率和网络带宽的界限。工作只会分派给有能力处理它的主机。
客户端
Ø        BOINC为参与者提供以下特性: Ø        多种参与者平台BOINC的核心客户端软件对大多数常见平台(Mac OS X, Winows, Liunx 和其他Unix 系统)都可用。客户端可以使用多个 CPU 。 Ø        基于Web 的参与者界面 BOINC 提供基于 Web 的界面用于创建帐户,编辑参数和显示参与者状态。参与者的喜好设定可以自动传递到他使用的所有主机上,使管理大量主机的工作变得轻松。可配置的主机工作缓存 。核心客户端软件可以下载足够的工作以保持其主机在指定的一段时间内保持忙碌。这可以减少连接的频率或使主机在工程不可用时仍继续工作。

BOINC系统框架
在BOINC中,可以支持多个独立的project同时运行,比如SETI@HOME、FOLDING@HOME等,每一个project有自己的应用程序、数据库和服务器。
Project的框架如下图所示:

(图片请下载 word 文档查看)
图 n  BOINC系统架构图

Project back end提供了应用程序和工作单元(work unit)和处理计算结果。输入和输出文件由data servers来发布和收集。data server是HTTP协议的服务器,它可以比较独立,不一定归project所有,也不一定由project操作。
BOINC server complex管理数据的发布和收集。BOINC server complex包括以下部件:
Ø        一个或多个调度服务器,调度服务器与志愿机进行通信;
Ø        一个关系数据库,保存关于工作、结果和参加的志愿机的信息;
Ø        事务性的程序和库用以保证和project back end进行通信和协商;
Ø        志愿机和开发人员的Web接口
BOINC API
(1)        初始化和结束函数
int boinc_init(bool standalone=false);int boinc_finish(int status);
当参数standalone为true时,应用程序将独立运行,而不依赖于core client,一般用于测试程序。

(2)        名字解析(Resolving file names)
int boinc_resolve_filename(char *logical_name, char *physical_name, int len);int boinc_resolve_filename(char *logical_name, string& physical_name);
把文件的逻辑名转换为物理名,比如:   
string resolved_name;    retval = boinc_resolve_filename("my_file", resolved_name);    f = fopen(resolved_name.c_str(), "r");

(3)        检查点 (Checkpointing)
bool boinc_time_to_checkpoint();void boinc_checkpoint_completed();
当程序运行到一个地方需要checkpoint,调用boinc_time_to_checkpoint(),如果这个函数返回true,程序应该重新写state文件和刷新写入output文件。然后调用boinc_checkpoint_completed()函数结束checkpoint操作。

(4)        Atomic file update
class MFILE {public:    int open(char* path, char* mode);    int _putchar(char);    int puts(char*);    int printf(char* format, ...);    size_t write(const void* buf, size_t size, size_t nitems);    int close();    int flush();};
这个类提供了函数来进行checkpoint的sate文件和output文件操作。

(5)        Communicating with the core client
boinc_fraction_done(double fraction_done);
在GUI上显示应用的工作进度(0-1)
int boinc_get_init_data(APP_INIT_DATA&);    struct APP_INIT_DATA {        char project_preferences[4096];        char user_name[256];        char team_name[256];        double user_total_credit;        double user_expavg_credit;        double team_total_credit;        double team_expavg_credit;    };
从core client获取数据
int boinc_wu_cpu_time(double &cpu_time);
获取应用程序消费的CPU时间。

(6)        Multi-program applications
void boinc_child_start();void boinc_child_done(double total_cpu);
有些boinc的应用需要有多个进程,在主进程fork一个子进程之前,必须调用boinc_child_start()函数;当子进程结束后,主进程必须调用boinc_child_done(double total_cpu)函数,之后才能fork其他的子进程。

The BOINC graphics API
(1)        初始化和结束函数
void boinc_init_graphics();void boinc_finish_graphics();
调用boinc_init_graphics()函数将启动一个线程来进行图形显示,图形显示线程通过共享缓冲区来与主线程通信。

(2)        图形程序必须要提供以下函数以供系统调用:
bool app_graphics_render(int xs, ys, double time_of_day);
这个函数在图形线程中被图形线程周期性的调用,它将产生当前的图形。
void app_graphics_init();
这个函数当图形线程中创建了窗口后被图形线程调用,它将产生初始化窗口中必须的调用。
void app_graphics_resize(int x, int y);
这个函数当窗口改变大小时被图形线程调用。
void app_graphics_reread_prefs();
这个当用户应用的preference改变时被图形线程调用。
回复

使用道具 举报

发表于 2005-3-10 19:02:44 | 显示全部楼层
好像现在boinc的source是按LGPL(Lesser GPL)协议分发了
回复

使用道具 举报

发表于 2005-3-14 20:27:05 | 显示全部楼层
哇,又难倒我了!
回复

使用道具 举报

发表于 2005-3-15 17:57:30 | 显示全部楼层
Youth  在 2005-3-10 19:02 发表:

好像现在boinc的source是按LGPL(Lesser GPL)协议分发了


我也在哪见到了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 新注册用户

本版积分规则

论坛官方淘宝店开业啦~

Archiver|手机版|小黑屋|中国分布式计算总站 ( 沪ICP备05042587号 )

GMT+8, 2024-5-7 21:11

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表