Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

20240128 [Special Issue 5] “大中衔接”教学活动之你不知道的幕后灵车 #35

Open
saffahyjp opened this issue Jan 28, 2024 · 0 comments

Comments

@saffahyjp
Copy link
Owner

本文不包含任何可能需要保密的内容,请放心观看。

2024 年清华大学计算机系“大中衔接”研讨与教学活动成功举行,这里就不打官腔了,官方新闻推送请参考:https://mp.weixin.qq.com/s/6yfTsrTrT58mQ3NxXDtqVw
请注意:并不存在什么竞赛、选拔、冬令营之类的活动,这次只有研讨与教学活动,至于教学活动的内容,可以参考以下图片:
4a9c67044dea298d96a530973e51930
4e54cb195ae067443de83a10dc084b4

下面进入正题。
大概上个月,松问我有没有兴趣在某活动中管理鸭房,我欣然接受了。(注:在评测鸭的技术架构中,评测机被称为鸭子,那放了很多鸭子的地方自然就是鸭房。)
后来发现,这次评测的方案非常神奇:东主楼二楼机房的一整个房间的所有机器都要拿来当鸭子。不用云服务器是因为这次的教学用题对评测结果的稳定性有着非常高的要求,而在这种情况下评测鸭就是最好的选择了。而为了支撑几百人的教学活动,避免评测队列出现拥塞,怎么也需要几十台鸭子。在这种前提下,“征用”一间二楼的机房好像也是一个不错的选择了。

我 24 日才实际参与到干活当中,在此之前松已经把大坑差不多都踩完了:摸清楚了机房的配置信息、跑通 PXE 和 JudgeDuck OS 并测试进行评测等。去掉不能上网的和无法启动的之外,机房里面有 53 台可用的机器,其中有 9 台的内存与其他机器不一致:大多数(44 台)机器的内存都是 2 条 8G,但有 8 台是 1 条 8G(性能非常不对),还有 1 台是 2 条 4G(性能有百分之几的偏差,但以评测鸭的测量精准度就是非常显著的差距)。看似同构的机器下面居然有这么多坑,甚至不知道 4G 的内存条是从哪里跑来的……以及有相当一部分的机器在引导了 JudgeDuck OS 以后没有显示输出,但能够正常执行评测任务,不知道是评测鸭之前换成 frame buffer(而不是 VGA buffer)锅了,还是那些机器的 UEFI BIOS 没对 frame buffer 做好正确的初始化。不过这不影响评测,就没有深究了。44 台可用的鸭子中,我们还抽取了 1 台暂时挪到楼上,这样在二楼必须拉闸断电的时候,能保证至少有 1 台鸭子能够正常工作。

除了“鸭子”以外,“鸽子”也是评测鸭架构中重要的设备。鸭子跑的是自制专用系统 JudgeDuck OS,对于 HTTP 等“高级互联网协议”的支持非常有限,更是没法运行 GCC 等编译器,于是需要一个运行 Linux 的“智能”设备来协助、管理一群鸭子,与评测前端进行交互、缓存评测数据、进行程序编译等。一般而言,在评测负载较重时,对鸽子的 CPU 要求大概是每只鸭子对应鸽子的一个线程:鸽子负责用一个核编译程序,然后将程序和数据发送给鸭子,最后忙等鸭子返回的结果(目的是减少评测延迟,并降低失败率)。既然有四十多台可用的机器,从中抽一台(CPU 是 i7-4790,4C8T)当鸽子的话,显然是管不住所有的鸭子的。

松一开始的计划是,每 8 台鸭子配备 1 台鸽子,这样大概能分成 5 组,但后来并没有采用这个计划。从软件上看,目前还暂时没有自动化批量部署多台鸽子的方法,至少需要手动改写一堆配置文件,搞不好还要改代码;从硬件上看,需要给每台鸽子做一个启动硬盘,并且扩展额外的网口(原本的机器只有一个网口,而鸽子至少需要一个上联和一个连鸭子的口),还要额外的交换机。

正好我有一个核数比较多的灵车服务器,暂时没有其他事情占用它,索性就搬来当鸽子了。这台服务器的两路 CPU 共有 72C144T(8360Y,但淘宝买的你懂的,是这个服务器最灵车的点之一),用来当鸽子绰绰有余,而且把原来的鸽子的硬盘插上去就能用。唯一的问题就是,这台服务器的网口只有 2 个,而机房里有 4 个交换机,最好能够分别插 4 个交换机,避免系统整体卡在内网带宽上。作为双路工作站,最不缺的就是 PCIe 接口,于是松先拿了两个四口千兆网卡来,但很尴尬的是它只有短挡板,没有长挡板,拆了挡板装的话又非常松,一脸不稳要出事的样子。找了一圈挡板或者 USB 网卡未果,松终于想办法化缘到了 4 个单口千兆网卡,这样这个问题也解决了。

24 日,我们就攒出了这样一台灵车服务器,松拿着一堆提交记录压力测试了一下,最终大概能每分钟测 1000 发提交,这个速度已经足够了。搞定了这个以后,我们把一台机器搬到了三楼做鸭子,配上一台鸽子,也开启评测。这样,当天的任务就算完成了。

25 日下午 2 点到 5 点是教学活动的熟悉环境环节。松是当天下午 5 点的飞机,所以基本上就是我在鸭房搞技术。其他的还好,当天遇到的新问题就是校园网认证莫名其妙地不好用。在拿到了 IP 地址以后,用准入代认证功能让它上线,即使选择了校外访问后,却只能与校内的机器互通。好在这个盘里面莫名其妙有一个图形界面(打开以后甚至能自动弹出一个松的 Vivado 在找 license 的窗口),于是我就在图形界面里面用浏览器登录了一下校园网,然后就能正常访问外网了。回想了一下前一天松的操作方式是先把 USB 网卡插到自己的电脑上走网页认证,然后把 USB 插到服务器上(这就是要用 USB 网卡的原因,MAC 地址不会变),能够正常使用。猜测或许是校园网的准入代认证与 Linux 系统产生了什么神奇的化学反应吧。不过既然能工作了,这里也没有深究。但是为了防止校园网出问题导致评测无法进行的极端情况,我用松留下的 DA300 扩展坞接了一根线出来,假如校园网真的挂了,那就插上我的手机走以太网络分享,通过手机流量上网。在此不得不夸一下安卓的网络共享功能,甚至能通过以太网分享(虽然我的 Redmi K70 Pro 至今还是 USB 2.0);也要夸一下 wg,我们尝试从校园网切到流量再切回来的过程中,由于评测鸭内部网整体在一个 wg 上,几乎是无感知的。这样,我们就能保证评测鸭几乎在任何情况下都能正常工作了。

26 日一早 8 点就要进行正式的教学活动。我定了 7 点的闹钟,闹钟一响就穿衣服准备出门,大概 7 点半到了机房,有大约半个小时的时间启动所有的机器(虽然稍微延迟一点也问题不大,因为有一台常开的机器顶着,而前几分钟几乎不太会有人提交的)。我按照计划拉闸上电、启动鸽子、启动鸭子、确认网络情况……实际比预想得顺利,没有发生什么意外情况。由于那天没睡好,我从 11 点开始还在机房睡了一会儿,醒来以后发现一切都好,没有任何锅爆炸。在下午考试结束以后,我就把所有的机器关机,然后回去休息了。

在此也特别感谢一下 fiancee,她几乎一直在我身边陪着我干活,也让我有了一个非常好的干活心情。
3 年前的 2021 年 5 月,我也是参与“大中衔接”的技术支持活动,当时也是和松一起,但是搞了个通宵修复某些问题(那是另一个故事了,有机会再讲)。但最令我记忆深刻的就是,那天我大概忙到早上 8 点多,跟早起过来的人员交了个班就回去休息了,睡到下午又去赶飞机回北京。到了北京已经很晚了准备休息的时候,接到家里的电话说我爸爸病情突然加重了。由于当天没有航班了,我订了第二天最早大概 6 点多的飞机回大连。草草睡了没几个小时以后,我就又出发了,然后就是几个月在大连陪爸爸走完最后的生命历程,又料理完后事……
这次的“大中衔接”活动,既然比上次顺利许多,那或许也意味着后续的事情也会顺利许多吧。

最后,放一张服务器的最终状态图。插了 7 根网线,4 个口来源于松化缘来的 pcie 千兆网卡(而且开机时不得插线,否则卡死在检测 PCIe 的开不开),1 个原生口专供 IPMI,还有 1 个原生口接了个扩展坞(准备连手机有线热点),甚至还有一个 USB 网卡当做上联(方便插到其他电脑上认证校园网然后插到服务器上)。
image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant