-
Notifications
You must be signed in to change notification settings - Fork 1
Daemon
Yuhui Huang edited this page May 8, 2019
·
1 revision
一台机器运行一个 daemon
,每个 daemon
可以有一些 runner
,runner
有不同的种类:
-
compile-runner
:专门负责执行编译,编译完成后的文件允许各个test-runner
读取,也就是说编译生成的文件所在目录是组内只读的 -
test-runner
:专门负责测试。支持如下的测试类型:- 标准测试:有设计好的输入输出,由 special judge/diff 来对程序输出进行比较。
- 随机测试:出题人提供输入数据的随机生成程序,在每次评测时调用该程序生成输入和输出,再进行标准测试。由于每次进行随机测试都要先调用出题人的数据生成器和标准程序,因此执行速度也比较慢。
- 静态测试:静态测试选手程序是否存在问题,如存在漏洞。
- 内存测试:内存测试选手程序是否有内存泄漏情况,通常速度比较慢。
- 单元测试:出题人提供单元测试对选手程序进行判分。
由于考试题目的类型有别,我们区分情况进行讨论:
广义上的 OI 赛制题目是:有部分分。也就是说一道题的所有测试点都必须进行评测,这种情况下如果评测系统的负载比较小,一个人的评测速度也可能因为打暴力而导致评测速度较慢。因此我们采取不同测试点不同核心运行的策略:一道题,10 个测试点,由不同的 test-runner
负责进行评测。这样的好处就是评测系统负载低时一个人的测试速度可以很快。
优化:对于标准测试,题目的比较器 special_judge 需要在评测前完成编译,由于编译速度比较慢,会拖慢标准测试时间,因此我们要做一个缓存来存储 special_judge 的可执行文件。文件系统将允许手动添加缓存文件,并管理依赖,special_judge 的可执行文件生成后添加进本地缓存系统。此外,随机生成的数据也必须添加进本地缓存系统。所有的 runner
共享一个缓存系统。