hydrojudge
hydrojudge
Tips
您可以通过一键安装脚本快速安装独立评测机,详情请前往 部署Hydro 查看。
准备
在配置评测机之前,请确认您的站点已经可以访问并正常登录/注册。
您应该预先下载您所要支持的语言的编译器,若您在配置完评测机后 升级/重新安装 了编译器,您需要重新启动沙箱。
关于编译器说明,请参照 编译器 章节。
如果不使用自动脚本,您需要按照如下方式手动安装沙箱服务:
前往 criyle/go-judge 下载对应 cpu 架构的 go-judge。 go-judge 需要在后台运行并监听 127.0.0.1:5050
。如果系统使用的 cgroup 版本为 1 或者使用的为非 systemd init 的发行版,请以 root 权限运行。 可使用 pm2 进行管理。
安装
作为附加组件
Tips
由于用附加组件安装的评测机与 Hydro 必须在同一台服务器上,每一个 Hydro 实例最多只能有一台评测机由附加组件安装。
在安装 Hydro 的机器上运行下面的指令安装 @hydrooj/hydrojudge
:
yarn global add @hydrooj/hydrojudge
hydrooj addon add @hydrooj/hydrojudge
重启 Hydro 后 hydrojudge 即可正常运行。
作为独立进程
Tips
该方法可以帮助您在任意服务器上部署评测机。
首先需要创建一个有 PRIV_JUDGE 权限的账户,具体方法参照 此处。(在部署 Hydro 的服务器上运行)
然后在运行评测机的服务器上安装 HydroJudge :
. <(curl https://hydro.ac/setup.sh) --judge
创建目录 ~/.config/hydro
,在该目录下创建文件 judge.yaml
,配置文件格式如下:
hosts:
localhost:
type: hydro # vj4 用户请在此处填写 vj4
server_url: http://localhost/ # Hydro 运行的网址
uname: judge # 评测账号用户名
password: abc123 # 评测账号密码
detail: true # 默认为 true
设置完之后,使用下面的指令即可开始运行(可以使用 pm2 管理):
hydrojudge
更新
HydroJudge 会发布不定期更新。您可以使用 yarn global upgrade-interactive --latest
来检测并进行更新。
关闭
作为附加组件
在 系统设置>hydrojudge 中有一栏 Disable builtin judge,将它勾上,然后重启 Hydro 即可。
作为独立进程
根据开启的方法关闭即可。
卸载
关闭后运行下面指令即可。
yarn global remove @hydrooj/hydrojudge
hydrooj addon remove @hydrooj/hydrojudge
评测设置
作为附加组件
在 系统设置>hydrojudge 修改对应的参数,然后重启 Hydro 和 hydrojudge 即可。
作为独立进程
如果有需要修改单题测试点数量上限等设置,可以在 ~/.config/hydro/judge.yaml
的末尾添加下列内容:
testcases_max: 100 # 单题最多测试点数量
total_time_limit: 120 # 单题最大总测试时长
parallelism: 2 # 单评测机评测进程数量
# 更多可选配置均可添加在此处,格式与前面的三排类似
在 此处 的设置均可添加到此处。
修改编译选项/添加新语言支持
对于已安装内置评测机的用户(无论内置评测机是否启动),在 控制面板>系统设置 中修改 judge.langs 配置项即可;对于没有安装内置评测机的用户,需要在 ~/.config/hydro/langs.yaml
中配置。
文件格式参照 此处 。
如果您添加了新的语言,您还需要前往 控制面板>系统设置 中修改 Language Highlight ID 与 Monaco language modes。
分别表示选择对应的语言后的高亮设置(基于 PrismJS)和 Monaco 编辑器语法规则设置。
修改完后请重启 Hydro 和 hydrojudge 。
测试数据格式
参照 测试数据格式 配置。
调整沙箱空间大小
Warning
如果不调整沙箱的空间大小,当您的评测使用文件 IO 且输入输出文件较大时可能会引发错误。
对于 2022/8/12 前安装的用户:
在服务器上运行下面的代码找到 hydro-sandbox 的运行目录:
pm2 info hydro-sandbox | grep "exec cwd"
将 mount.yaml 下载并放置在 sandbox 的运行目录下。然后修改第 64 行和第 68 行的 size
和 nr_inodes
的大小至您想要的大小,保存后重启 sandbox 即可完成更改。
对于 2022/8/12 后安装的用户:
编辑 /root/.hydro/mount.yaml
,修改 size 即可。
C/C++ 彩色编译错误信息
- 确认您安装了支持彩色输出的编译器;
- 在系统设置中,将 C/C++ 编译命令后加上
-fdiagnostics-color=always
例:
c:
compile: /usr/bin/gcc -O2 -Wall -std=c99 -o ${name} foo.c -lm -fdiagnostics-color=always
开大程序运行栈空间
2022/8/12 后安装的实例默认已开启无限栈空间,无需手动操作
在很多时候系统默认为程序提供的栈空间并不能满足我们的需求,此时我们需要手动为用户程序提供更大的栈空间。
修改 pm2 中 hydro-sandbox 的启动参数为 ulimit -s unlimited && /usr/bin/hydro-sandbox
:
pm2 del hydro-sandbox
pm2 start bash --name hydro-sandbox -- -c "ulimit -s unlimited && hydro-sandbox"
提高测评精度
禁用 CPU 频率缩放与 Intel 睿频加速技术,防止 CPU 频率波动。
禁用内存地址空间随机化,以使得存在内存寻址错误的代码能够得到更多可重复的结果,可以通过在 /etc/sysctl.conf
中添加下面这行并运行 sudo sysctl -p
应用:
kernel.randomize_va_space = 0
内存计量不准确
在控制面板上出现内容为 You are using cgroup v2 without kernel 5.19+. This could result in inaccurate memory usage measurements.
警告时,意味着当前系统的内存消耗计量存在误差。
部分 Linux 设备默认使用 cgroup2,而在 5.19 版本前的内核的 cgroup2 中移除了精确计量内存消耗的接口。 若要获得更精确的内存计量,推荐启用 cgroup v1 (您可以通过检查 /sys/fs/cgroup/memory/memory.memsw.usage_in_bytes
是否存在来验证是否当前系统是否启用了 cgroup v1 ):
以 Ubuntu 的默认引导器 GRUB 2 为例,编辑 /etc/default/grub
: 在其中
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
后,加入 `cgroup_enable=memory swapaccount=1 systemd.unified_cgroup_hierarchy=0,变为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash cgroup_enable=memory swapaccount=1 systemd.unified_cgroup_hierarchy=0"
运行以下命令更新 GRUB 2 的配置,然后重新启动。
update-grub && reboot