转岗日:自行车后座的铺盖卷
1998年11月16日,周一,深圳气温骤降到了15度。
林辰站在宿舍楼下,看着自行车后座上用麻绳捆得结结实实的铺盖卷——军绿色被子,白床单,还有个荞麦皮枕头。这架势不像去上班,倒像大学新生报到。
“辰哥,真不用我们送你?”王哲推着自己的二八大杠,后座绑着个工具箱。
“不用,就隔了两栋楼。”林辰检查了下绳结,“倒是你,今天要去东莞测试基站原型?路上小心。”
“放心吧,赵工派了辆皮卡。”王哲看了眼林辰的铺盖卷,“你这……真要睡办公室?”
“听说无线业务部就这规矩,”林辰蹬上车,“项目紧的时候,加班到凌晨是常事。李一男带的团队,人均每月加班150小时以上。”
150小时,平均每天5小时。这数字在1998年,够吓人的。
王哲咂舌:“难怪叫‘床垫文化’。那你这轮岗三个月……”
“就当住校了。”林辰笑笑,脚下一蹬,自行车吱呀呀驶向园区西北角。
华为无线业务部不在主楼,而在园区最里头的一栋独立三层厂房里。这楼有些年头了,外墙爬满了爬山虎,秋天一来,叶子红黄相间,倒有几分清华老楼的味道。
但一进门,味道就完全不同了。
厂房挑高足有七八米,里头没做吊顶,粗壮的钢梁裸露着。一楼是生产线,流水线上正在组装基站设备,工人们穿着深蓝色工装,流水线般传递着电路板。空气里是松香、焊锡和机油的混合气味,噪音大得说话得靠喊。
二楼用铁皮隔成了办公区。林辰扛着铺盖卷爬上铁楼梯时,差点撞上一个端着饭盒往下冲的工程师。
“让让让让!测试机要断电了!”那哥们头发油腻,眼镜歪斜,白衬衫领口黑了一圈。
林辰侧身让过,继续往上走。二楼景象更震撼——长条桌一张挨一张,桌上堆满了示波器、信号发生器、电路板,还有吃了一半的盒饭。十几个工程师或趴或坐,有人在焊电路,有人在写代码,有人对着电话吼:“喂?郑州那边基站又宕了?!”
角落里有几张折叠床,有的摊开着,被褥凌乱。墙上贴着标语:“胜则举杯相庆,败则拼死相救”、“板凳要坐十年冷”。字是毛笔写的,墨迹淋漓。
这就是1998年的华为无线业务部。粗粝,热血,像一块还没打磨的糙铁。
“新来的?”一个四十多岁、穿着褪色中山装的中年人走过来,手里拿着个搪瓷缸子,“我是周振华,无线一部项目经理。你是林辰?”
“周工好,我是林辰。”林辰放下铺盖卷。
周振华上下打量他,目光在他那捆铺盖卷上停了停:“带了铺盖?有觉悟。工位在那边——”他指了指靠窗的一个位置,“放下东西,五分钟后来小会议室,开晨会。”
林辰走到工位前。桌子是老式办公桌,漆面斑驳,抽屉拉起来嘎吱响。桌上已经摆好了设备:一台14寸球面显示器,Ibm的;一个机械键盘,按键上的字母都快磨没了;还有一部红色电话机,转盘拨号的那种。
他把铺盖卷塞到桌下,刚坐下,电话就响了。
“喂?”
“林辰是吧?”电话那头是个年轻的女声,语速飞快,“我是行政小刘,你的入职资料缺一张照片,今天下班前交到行政部。还有,饭票去食堂窗口领,一个月三十张,加班超过晚上十点可以领夜宵券。”
“好的,谢谢。”
“另外,”小刘压低声音,“提醒你一下,无线部的规矩:新人有三个月的保护期,但李总不喜欢这规矩。他看人不分新旧,只看能力。你好自为之。”
电话挂了。林辰握着听筒,还没回过神来,肩膀被人拍了拍。
“走了,开会。”周振华站在旁边,搪瓷缸子里泡着浓茶,茶叶占了半杯。
小会议室其实就是在厂房角落里用三合板隔出来的一个格子间,十平米不到,挤了十五六个人。没椅子,全都站着。
周振华站在一块白板前,白板上密密麻麻写满了字:“上周通报:郑州移动的GSm扩容项目,验收测试三次失败,客户下了最后通牒,这周五再不过,项目款扣30%。”
会议室气氛凝重。一个戴着眼镜的年轻工程师举手:“周工,问题定位了吗?”
“定位了,”周振华用粉笔在白板上画了个基站架构简图,“信令信道拥塞。用户数一上去,呼叫建立成功率就暴跌。郑州那边现在有八个基站,负载到70%就出问题。”
“硬件问题还是软件问题?”
“软件。但代码是两年前写的,当时的设计容量最多支持50%负载。现在用户增长太快,架构撑不住了。”
“重写?”
“时间不够。”周振华看了眼墙上的日历,“今天周一,周五验收。满打满算四天。”
会议室陷入沉默。四天重写一个基站的呼叫控制软件,还要测试、联调、部署——这几乎是不可能完成的任务。
林辰站在人群后排,快速在笔记本上记录着。GSm、信令信道、呼叫建立成功率……这些术语他熟悉又陌生。熟悉是因为前世做过移动互联网,陌生是因为1998年的GSm网络,和后来的4G、5G完全是两个世界。
“我有个问题。”林辰举起手。
所有人的目光齐刷刷转过来。新面孔,还是个看起来像学生的年轻人。
“你说。”周振华点头。
“信令拥塞的具体表现是什么?是呼叫建立时延超标,还是直接失败?”
“都有,”一个头发花白的老工程师回答,“时延从标准的3秒飙升到10秒以上,失败率从1%升到15%。”
“拥塞集中在哪个时段?”
“早晚高峰,上午8-10点,下午6-8点。”
林辰快速心算:“也就是说,拥塞有规律性,不是随机发生。那有没有可能……不是重写软件,而是优化调度算法?”
“调度算法我们调过,”老工程师摇头,“参数优化了三次,效果不明显。”
“不是调参数,”林辰走到白板前,拿起粉笔,“是改算法逻辑。传统的GSm信令调度是静态分配,每个用户固定的信道资源。但实际流量是动态的——高峰时段密集,闲时稀疏。”
他在白板上画了个坐标图:“如果我们把静态分配改成动态调度,根据实时负载动态调整信道资源分配比例呢?高峰时把更多资源倾斜给信令信道,闲时再还回去。”
“动态调度……”周振华若有所思,“技术上可行吗?”
“理论上可行,”林辰说,“我在学校做过类似研究——用排队论和马尔可夫链建模,设计了一个自适应的资源调度算法。论文还在我笔记本里。”
他从帆布包里掏出一个硬皮笔记本——那是他在清华时用的,里面记满了各种算法推导和仿真结果。
周振华接过笔记本,快速翻看。越看眼睛越亮:“这模型……你做过仿真?”
“做过,仿真结果比静态调度提升30%以上的资源利用率。”林辰说,“如果应用到基站上,保守估计能提升20%的容量。”
会议室骚动起来。20%的容量提升,意味着郑州那个项目不用重写软件,只需要升级调度模块!
“但只有四天时间,”周振华合上笔记本,“要写代码、测试、还要现场部署。来得及吗?”
“算法是现成的,”林辰说,“我可以用c语言实现核心模块。测试的话……咱们有实验室环境吧?模拟一下郑州的网络配置,跑压力测试。”
“实验室有!”那个年轻工程师举手,“我去准备!”
周振华看着林辰,眼神复杂:“你是新来的,一来就接这种火线任务,压力很大。而且万一失败了……”
“失败了责任我担。”林辰说得干脆。
会议室安静了几秒。周振华一咬牙:“行!林辰,这个任务交给你。小张、老李,你们俩配合他。需要什么资源直接找我。”
“谢谢周工。”林辰点头。
晨会散了,人群往外走时,林辰听到有人在低声议论:
“新来的这么猛?上来就接烫手山芋。” “听说原来是清华的,搞互联网的。” “互联网懂什么通信……” “看他那算法笔记,不像外行。”
林辰没理会,回到工位打开电脑。开机要两分钟,他趁着这时间拿出纸笔,开始细化算法实现方案。
“林工,”那个叫小张的年轻工程师凑过来,“我是张伟,负责基站软件测试。需要我做什么?”
“张工好,”林辰在纸上画了个流程图,“第一步,帮我拿到郑州基站的配置参数:用户数、信道配置、话务模型。第二步,在实验室搭建模拟环境。第三步,我写代码,你做测试。”
“没问题!”张伟干劲十足,“参数我去找项目组要,模拟环境下午就能搭好。”
老李——就是那位头发花白的老工程师——也走过来,递给林辰一沓资料:“这是基站软件的设计文档和源码。重点看call_control.c这个文件,信令调度在里面。”
“谢谢李工。”林辰接过资料,厚厚一沓,油墨味很重。
老李看着他:“小伙子,你那个动态调度思路不错,但GSm协议是国际标准,改动要很谨慎。别光追求性能,忘了兼容性。”
“我明白,”林辰认真点头,“改动会控制在协议允许的范围内,保证和现有设备的互联互通。”
老李满意地点点头,背着手走了。
林辰翻开设计文档,开始研读。1998年的通信软件,代码风格还很原始,注释也不多。他一行行往下看,时不时在纸上记下关键点。
窗外的厂房里,机器轰鸣声不绝于耳。但林辰很快进入了状态——就像在清华实验室通宵调代码时一样,外界的一切都模糊了,只剩下屏幕上的字符和脑海里的逻辑。
中午十二点,食堂开饭的广播响了。但办公室里没人动。
林辰看了眼表,才意识到该吃饭了。他保存好文档,起身时发现周围十几个工程师,只有三四个站了起来。
“他们不吃午饭?”他问旁边的张伟。
张伟正在泡方便面——康师傅红烧牛肉面,1998年的奢侈品:“赶进度的时候,吃饭都是轮着去。今天郑州项目紧,估计很多人不去了。”
他撕开调料包,香气飘出来:“林工,你要不去食堂?我这儿还有一包面。”
“我跟你一起泡面吧,”林辰从抽屉里拿出自己的饭盒,“正好边吃边讨论测试方案。”
“行!”
两碗泡面在办公桌上冒着热气。林辰和张伟对着基站架构图,边吃边聊。
“动态调度最大的风险是切换时的信令风暴,”张伟用叉子指着图纸,“如果大量用户同时切换信道,可能引发新的拥塞。”
“所以要加个平滑过渡机制,”林辰在纸上写了个公式,“用指数加权移动平均预测负载,提前调整资源分配,避免突变。”
“这个好!”张伟眼睛亮了,“预测算法复杂吗?”
“不复杂,几行代码的事。”林辰喝了口面汤,“下午我先写核心调度模块,你帮我准备测试用例。”
“没问题!”
吃完饭,林辰继续干活。下午两点,他写完了动态调度算法的第一版代码。三点,张伟搭好了模拟测试环境。四点,第一次集成测试开始。
结果不理想——容量提升了,但时延波动很大。
“负载预测不够准,”林辰盯着屏幕上的曲线,“指数加权对突发流量的响应太慢。”
“那怎么办?”张伟问。
林辰思考片刻:“加个突发检测机制。用滑动窗口统计流量方差,检测到突发就临时切换成更激进的调度策略。”
“来得及改吗?”
“来得及。”林辰活动了下手指,重新开始敲代码。
晚上六点,食堂晚饭时间。办公室依然只有一半人去吃饭。
林辰让张伟先去,自己留下来继续调试。七点多,张伟端着两个饭盒回来:“林工,给你带了饭。红烧肉,今天食堂的招牌。”
“谢谢。”林辰接过饭盒,塑料的,还烫手。
他一边吃饭一边看测试日志,突然发现一个问题:“张伟,你来看这个错误——内存访问越界。”
张伟凑过来:“不应该啊,这个数组我检查过边界……”
两人对着代码排查了半小时,终于找到bug:一个循环的终止条件写错了,多跑了一次。
“低级错误,”张伟挠头,“怪我。”
“正常,赶进度都这样。”林辰修正代码,重新编译。
晚上九点,第二版测试结果出来:容量提升25%,时延稳定在标准范围内。
“成了!”张伟兴奋地拍桌子。
但林辰皱起眉头:“还没完。这只是实验室环境,真实网络干扰更多。得做抗干扰测试。”
“现在?”
“现在。”
两人继续。晚上十一点,办公楼里安静下来,只剩下他们这排还亮着灯。周振华走过来,手里拿着两个面包:“吃点东西,食堂关门了,只有小卖部还有这个。”
“谢谢周工。”林辰接过面包,是那种最普通的豆沙包。
“进度怎么样?”
“基本功能通过了,在做压力测试。”林辰调出测试报告。
周振华看着屏幕上密密麻麻的数据,沉默了一会儿:“你这一天的工作量,顶别人三天。以前在哪儿干过?”
“在学校创业,做互联网软件。”林辰实话实说。
“互联网……”周振华咀嚼着这个词,“思维模式确实不一样。我们搞通信的,习惯了按标准来,按流程走。你这种问题驱动、快速迭代的方式,很新鲜。”
“有用就好。”
“有用。”周振华拍拍他肩膀,“继续干吧,注意身体。对了,你带铺盖了是吧?困了就在那边折叠床上睡会儿。”
他指了指墙角,那儿并排摆着三张军绿色折叠床。
林辰这才意识到,自己可能要迎来在华为的第一个通宵。