![]() |
BOINC 开发文档冗余和错误 |
计算结果是对计算实例的抽象,可能还没有被完成。一般来说,BOINC 服务器会发送“计算结果”到客户端,客户端会完成计算然后向服务器回复。但计算结果仍有很多可能性:
客户端正确完成并且返回了计算结果。
客户端虽然没有正确完成但仍返回了计算结果。
客户端在下载或上传文件的时候出错。
计算程序在客户端崩溃。
客户端永远不会返回任何结果因为它已经破坏或停止运行了 BOINC。
调度服务无法发送计算结果因为客户端达不到任务包的资源需求。
BOINC 提供了一种冗余计算的形式,每次计算都在多个客户端上被执行,计算结果将进行比较,只有“一致”的计算结果才会被接受。有时候必须创建并发送新的计算结果。
BOINC 管理了大多数底层的细节;然而仍有两处必须由计算程序开发人员来决定:
Validation(验证):此过程包含两个功能。首先,但足够数量(冗余度)的成功计算结果返回,它会比较这些结果,看它们是否“一致”。比较计算结果的方法(可能需要考虑不同平台在浮点算术上的差异)和决定结果是否一致的策略(比如三个里面挑两个)都是由计算程序提供的。如果结果一致,一个特定的计算结果会被指定为“规范的”计算结果。其次,如果一个计算结果在一致达成之后被返回,新的计算结果将与规范的计算结果进行比较;这用来决定该用户是否可以得到积分。
Assimilation(回收):此机制用来将一个任务包已经完成的消息通知给项目。每个任务包仅执行一次。如果任务包成功完成(也就是说有一个规范的计算结果)项目提供的函数将读取输出文件并处理相关信息,比如将它记录在数据库。如果任务包无法完成,此函数可能会在日志文件中写一个条目,或者发送一封电子邮件等等。
在随后的例子中,项目创建了一个任务包,其相关属性分别是:
min_quorum = 2
target_nresults = 3
max_delay = 10
BOINC 会自动创建三个计算结果,分别在不同的时间被发送。在时间为 8 时,两个成功的计算结果已经返回,验证器被调用。它确认了结果的一致,因此任务包将被回收。在时间为 10 时,第三个计算结果返回;再次执行验证过程,这次是检查第三个计算结果是否可以得到积分。
time 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
created validate; assimilate
WU x x x
created sent success
result 1 x x---------------x
created sent success
result 2 x x-------------------x
created sent success
result 3 x x-----------------------x
在下一个例子中,第二个计算结果丢失了(也就是 BOINC 调度服务没有收到回复)。当第三个计算结果到达,一致性被确认,任务包被回收。在时间为 13 时,调度服务“放弃”了第二个计算结果(然后规范计算结果的输出文件就可以删除了,这本来是用来验证晚到达的计算结果的)。
time 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
created validate; assimilate
WU x x x
created sent success
result 1 x x---------------x
created sent lost giveup
result 2 x x-------- x
created sent success
result 3 x x-----------------------x
在下一个例子中,第二个计算结果在时间为5的时候返回了一个错误。这样仍未完成的计算结果数目就是两个了;因为 target_nresults 是 3,BOINC 将创建另一个计算结果(第四个计算结果)。在时间为9的时候一致性被确认,这时第四个计算结果还没有返回。
time 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
created validate; assimilate
WU x x x
created sent success
result 1 x x---------------x
created sent error
result 2 x x-------x
created sent success
result 3 x x-------------------x
created sent success
result 4 x x----------------------x
本页内容由中国分布式计算总站组织翻译,原文出自 BOINC 官方开发文档。参与本页制作的人员有:Youth(翻译)、碧城仙(编辑)。本站所有内容版权为中国分布式计算总站所有。本站欢迎非赢利性网站在遵守中华人民共和国版权法的前提下摘录或引用本站内容,但是请注明原作者和原出处。