上电那天,机房里的气氛紧张得像手术室。
陈工站在中央存储柜前面,手里拿着本子,上面密密麻麻写着上电步骤和检查项。
诸葛彪蹲在配电柜旁,手搭在总控开关上。
钱兰站在管理员桌前,盯着监控终端的屏幕。
“第一步,检查所有机器电源开关,确认处于‘关’的位置。”陈工念道。
诸葛彪挨个检查了一遍,16台KJ-0A的电源开关都拨到了“关”的位置。“确认。”
“第二步,检查中央存储柜电源开关,确认处于‘关’的位置。”
“确认。”
“第三步,合总控配电箱开关。”
诸葛彪把总控开关推上去。
机房里传来一声低沉的“嗡”,那是稳压电源的变压器开始工作的声音。
配电柜上的电压表指针跳了一下,稳稳停在二百二十伏。
电流表纹丝不动。
“第四步,合中央存储柜电源。”
诸葛彪走到柜子后面,推上开关。
柜子正面的绿色指示灯亮了起来,散热风扇开始转动。
陈工盯着指示灯,等了几秒:“第五步,合一号机电源。”
一号机的指示灯一排一排亮起来,绿色的电源灯、黄色的待机灯,红色的故障灯没亮。
散热风扇的声音比中央柜稍大,但还算安静。
监控终端上,一号机的状态从“离线”变成了“待机”。
然后是二号、三号……一直到最后16号。
每一台机器上电的时候,所有人都屏住呼吸盯着指示灯。
绿灯亮,黄灯亮,红灯不亮。
16台全部上电之后,机房里充斥着风扇的嗡嗡声,像一群蜜蜂在飞舞。
但声音并不刺耳,反而有一种秩序感,像某种低沉的、持续的背景音,听久了反而会觉得安静。
陈工在本子上写了几笔,抬起头:“静态上电完成。所有机器待机正常,没有短路、没有过流、没有故障指示。”
吕辰点点头,走到管理员桌前。
监控屏幕上,16个绿色的方块整整齐齐排列着,每一个方块代表一台KJ-0A,显示着编号和状态。
全部是绿色:待机状态。
“开始装系统。”
“系统”不是后来那种有图形界面的操作系统,而是一套固化在只读存储器里的微程序和引导程序。
每一台KJ-0A都要先加载引导程序,初始化寄存器,自检外设,然后才能加载真正的控制程序。
二维卡插进读卡机,按下加载按钮,读卡机“咔嗒”一声把卡片吞进去。
显示器上绿色字符一行一行跳动:
LOADING BOOTLOADER......
MICROCODE LOADING......
INITIALIZIERS......
SELF TEST......
MEMORY TEST......OK
CPU TEST......OK
I/O TEST......OK
ALL TESTS PASSED
16台机器的自检结果全部是“ALL TESTS PASSED”。
陈工靠在管理员桌旁,点了一根烟,吸了一口慢慢吐出来。
烟雾在空调送风下迅速散开,被回风口吸走,消失在格栅后面。
“吕工,硬件装完了,系统装完了。联调方案你定,我们执行。”
吕辰从兜里掏出一个小本子,翻开一页,上面密密麻麻写着字。
“联调方案分五个阶段。”他把本子摊在桌上,陈工、诸葛彪、钱兰都凑过来看。
……
联调方案被分解为五个阶段,层层递进。
第一阶段:单机自检加环回测试。
每台机器独立运行,环网接口板设为环回模式,自己发自己收,不经过环网。
运行固定测试向量(斐波那契数列、矩阵乘法),验证CPU和内存;读写本地暂存存储器,验证存储板。
自检结果写入本机特定内存地址,在显示器上输出“节点X自检通过”或“失败”。
16台机器同时上电。
机房里16台显示器的屏幕上,绿色的字符同时跳动,像16面旗子在风中飘扬。
NODE 0 SELF TEST......PASS
NODE 1 SELF TEST......PASS
...
NODE 15 SELF TEST......PASS
陈工在本子上记了一笔:“单机自检,16台全部通过。”
第二阶段:星型网单点读写测试。
连接所有星型网线缆,环网断开。
每台机器独立执行:生成一个唯一的测试数据块,通过星型网写入中央存储柜的指定区域,等待一段随机时间(用本机时钟计数器的低几位做延时,避免同时写冲突),然后从存储柜同一地址读回数据,比较读写是否一致。
结果写入存储柜的状态表区域,在显示器上打印“成功”或“失败”。
监控终端上,16个绿色方块的状态从“待机”变成“运行”。
中央存储柜的指示灯开始闪烁,多端口存储控制器在忙碌地处理着来自16个节点的并发请求。
仲裁、排队、响应。
不到十分钟,所有节点的显示器上全部出现了“PASS”。
陈工又记一笔:“星型网单点读写,16台全部通过。”
第三阶段:环状网令牌传递测试。
断开星型网,仅连接环网同轴电缆。
所有节点初始化为监听模式。
吕辰走到一号机前,在操作台上敲了几个键,指定ID=0的节点生成测试令牌。
诸葛彪按下“运行”按钮。
显示器上字符开始跳动:
TOKEN GEED
TOKEO NODE 1
机房里16台显示器的字符开始依次跳动。
令牌从一号机传到二号、三号……每一台机器收到令牌时,都会在显示器上打印一行:“TOKEN RECEIVED FROM NODE X, FORWARD TO NODE Y”。
令牌像一列看不见的火车,在环网上飞驰。
大约一秒钟后,令牌回到一号机。
最后一行字符出现:
TOKEURO NODE 0
ACCUMULATED SUM: 120
RIIVITY TEST: PASS
接力传信通过,接下来是令牌环基础测试。
令牌里带着目的地址和源地址,在环网上广播。
每一台收到令牌的节点把自己的ID添加到数据中,然后转发给右邻。
又是一秒钟,令牌回到一号机:
TOKEN RI: ALL NODES PRESENT (16/16)
RING PROTOCOL TEST: PASS
陈工笑了:“环状网令牌传递,16台全部通过。”
第四阶段:混合拓扑全连通测试。
星型网和环网同时连接。
16台机器运行“全对全向量求和”算法,每台机器通过星型网向存储柜写入自己的初始值,再读取所有其他节点的值累加;同时通过环网与左右邻居交换数据计算边界差。
所有节点最终都计算出全局和120,边界差验证正确。
监控终端上16个方块全部显示“运行”,中央存储柜指示灯闪烁得比昨天更快。
大约五分钟后,所有节点的显示器上同时出现:
LOCAL SUM S=120, VERIFICATION PASS
BOUNDARY DIFF VERIFICATION PASS
HYBRID TOPOLOGY TEST: PASS
陈工写道:“混合拓扑全连通测试通过。”
第五阶段:容错与压力测试。
这是最漫长的阶段,也是最暴露问题的阶段。
先做节点离线测试。
孙班长走到七号机后面,拔掉电源插头。
七号机的显示器瞬间熄灭,风扇停止转动。
监控终端上七号机的绿色方块变成红色,旁边出现一行字:“NODE 7 OFFLIED”。
不到一秒钟,其他十五台机器的显示器上都打印出了“NODE 7 OFFLINE”的警告。
吕辰看了一眼时间:“响应速度合格。”
孙班长把电源插回去,机器重新启动,自检通过,自动加入环网。
监控终端上的方块从红色变回绿色。
然后是存储柜端口故障测试。
孙班长走到中央存储柜后面,拔掉五号机的星型网线。
五号机的显示器上正在运行的程序突然报错:“STAR WORK READ ERROR”。
监控终端上五号机的方块从绿色变成黄色,旁边出现“NODE 5 STE ACCESS FAILED”。
吕辰在本子上记:“故障检测正常。”
接下来是环网断线测试,这是整个联调中唯一出现逻辑不直观的地方。
孙班长走到八号机和九号机之间,拔掉了那段同轴电缆。
这一次,故障不是立即全面显现的。
环网上的令牌还在跑,但跑到八号机的时候,发不出去了。
八号机的显示器上出现一行字:“TOKEN TIMEOUT, NO RESPONSE FROM NODE 9”。
与此同时,九号机也检测不到左邻的信号,同样显示超时。
而十号机、十一号机等下游节点,则在各自等待了一段时间后陆续报出超时,因为令牌永远到不了它们那里。
监控终端上,从八号机到十五号机的方块全部变成了黄色,分别写着“TIMEOUT”或“NO TOKEN”。
只有零号到七号机还保持绿色,它们虽然收不到返回的令牌,但尚未判定自己失联。
陈工盯着屏幕看了一会儿,用手指点了点八号和九号之间的位置:“断点在这里。八号发不出,九号收不到,下游全部超时。”
孙班长把电缆接回去。
大约两秒钟后,令牌重新开始在环网上流动,所有节点的状态陆续恢复绿色。
吕辰在本子上写:“环网断线测试,故障定位准确,恢复自动完成。”
然后是最关键的并发压力测试。
所有节点同步开始,同时向存储柜写入数据。
每个节点连续写100次,每次写一个带节点ID和序号的数据块。
写完之后,再读取所有写入的数据,检查有没有缺失或错乱。
第一次压力测试运行了大约十分钟。
节点零汇总结果时,显示器上出现了一行字:
DATA IY CHECK: 1 ERROR DETECTED
吕辰皱了一下眉头。
他走到节点零的显示器前仔细看错误信息:“NODE 12, WRITE 47, READBACK MISMATCH”
钱兰走到十二号机前检查机器状态,没有发现异常。
诸葛彪走到中央存储柜后面检查十二号机的星型网线缆,插头插得很紧,没有松动。
陈工拿着万用表量了一下线缆两端之间的电阻,又量了对地绝缘,都在正常范围内。
“可能是电磁干扰。”吕辰说,“电源线和信号线虽然分开走了,但交叉的地方屏蔽可能不够。把十二号机的这根线换成双层屏蔽的试试。”
孙班长换了一根线。第二次压力测试开始。
这一次,所有节点都通过了。
节点零的显示器上出现了“DATA IY CHECK: 0 ERROR”。
吕辰在本子上写:“并发压力测试通过。发现星型网线缆屏蔽不足,已更换双层屏蔽线。建议所有节点的星型网线全部换成双层屏蔽。”
接下来是持续的稳定性测试。
系统连续运行,白天跑测试程序,晚上跑空载待机。
每一台机器的状态都被监控终端记录下来,每小时的温度、电压、电流、风扇转速、芯片温度,全部记在本子上。
这一个月里也出过一些小问题。
有一次,某台机器在环网测试中始终收不到令牌。
换了环网接口板、换了芯片、换了T型接头,问题依旧。
陈工最后发现是同轴电缆的终端匹配电阻偏大,导致信号反射,令牌包在传输过程中被干扰了。
换了一个匹配电阻,问题解决。
还有一次,某台机器的星型网读写偶尔出错,频率不高,一天也就一两次。
诸葛彪带着人查了两天,发现是电源线的接地没做好,地电位波动影响了信号质量。
重新做了接地,问题消失。
第31天,钱兰把所有的测试记录汇总在一起,厚厚一沓,放在吕辰面前。
“容错与压力测试完成。所有故障场景都验证了,系统检测正常。压力测试连续运行三十天,没有发现数据丢失或错乱。星型网、环网、混合拓扑,全部稳定。”
吕辰翻开记录本,一页一页地看。
“所有节点自检通过,硬件基本正常。”
“星型网读写一致,存储柜、I/O板、线缆良好。”
“令牌绕环一周累加和等于120,环网物理连通且顺序正确。”
“全连通求和一致,混合拓扑协同正常。”
“压力测试无丢数,存储控制器仲裁可靠。”
他合上本子,看着机房那16台墨绿色的机柜。
“联调通过了。”
陈工站在他旁边,也看着那些机柜。
日光灯的光照在他的眼镜片上,反射出一片白茫茫的光。
他伸出手,轻轻拍了拍最近一台机柜的铁皮外壳,像拍一个老朋友的肩膀。
“吕工,”他说,“这个系统,可以投入使用了。”
吕辰转身走到管理员桌前,拿起那部黑色电话机,拨了一个号码。
电话那头响了两声,被接起来。
“刘教授,机房联调通过了。16台KJ-0A,三个中央存储柜,星型-环状混合拓扑,全部稳定运行了一个月。”
电话那头沉默了几秒钟。
然后刘星海的声音传过来:“好。分布式辅助电路设计系统,可以启动了。”
吕辰挂了电话,站在窗前。
窗外的天边泛起了鱼肚白。
远处,红星轧钢厂的烟囱已经开始冒烟,新的一天又开始了。
机房里,16台KJ-0A的显示器上,那行“ALL TESTS PASSED”的绿色字符还在安静地亮着,一明一暗,像是在呼吸。