华为扩大内存代码

您所在的位置:网站首页 ewp故障分析 华为扩大内存代码

华为扩大内存代码

2023-07-30 06:59| 来源: 网络整理| 查看: 265

我在华为13年时间里,基本上就做了2.5个重要的事,一个是手机可靠性技术领域建设,另外一个就是方舟编译器项目,额外0.5个事情就是目前HarmonyOS的设计。这篇我重点回忆一下自己从事可靠性领域的发生的故事和遇到的人。没有做过可靠性领域的工程师,可能看到“5个9”有所陌生,其实“5个9”在可靠性领域基本是家喻户晓。所谓“5个9”就是平均每台设备每年业务不可用时间不超过5.25分钟。可靠性是一个系统工程,是与故障做斗争的学问。我曾经在另外一篇文章中,写过一个可靠性回忆录,那个是站在可靠性整体讲的,本文从个人角度对经历的人和事进行回顾,不谈具体技术,不评论华为是非。

1 与可靠性结缘(2008-2010/10)

08年入职华为,当时公司正在做功能机。我被分配到了UI技术组,当时啥也不懂,跟着我师傅开始学习。华为有半年多的实习期,实习期主要改一些简单问题单,并跟着师傅和几个一起入职的新员工作simulator,由于我大学学习过VC,因此上手比较快,得到了团队的认可。当时功能机用的软件平台是基于高通BREW的HwFrame平台,我改的第一个问题就是导致手机重启的一个字符串越界少个0问题。由于手机用的是高通开发的基于Task的无进程隔离实地址REX OS,任何一个地址使用错误就会导致重启。调试死机问题,基本依赖硬件trace调试器。当时困难在于高通并没有提供内核源码,只能依赖他们提供一些文档去看内存分配器的算法猜测发生问题的可能位置。入职半年后废弃了华为自己搞得HwFrame框架,改用高通新的UIone系统,UIOne系统是基于一个XML作为UI编程语言,使用trigerplayer解释器的一个框架,本身性能不高,当时高通内核已经改为基于L4微内核的OS,不过也并不提供进程隔离机制,一个task死掉手机就会重启。在UIONE系统上,我主要开始接手输入法系统和Widget UI,输入法最早是国内和印度人设计和开发的,这是第一次接触到一个复杂子系统,大概5万行代码,跟着两位老员工去学习(翟峰,康凯),当时输入法有很多定制需求开发了大约一万行代码,大约持续了一年半时间。后来输入法模块很稳定了,当时英伟姐成立一个死机攻关组,我开始解决一些产品的疑难死机问题,学习看内存结构,学习trace,了解系统知识。当时解决的最后一个低概率死机问题,断断续续花费了一年时间,在真机上发生概率非常低,很难复现,当时自己也水平有限没有想到一些方法。后来此问题被一个同事(张树峰)在模拟器上复现了,我觉得这是好机会,我们俩一边复现一边定位,最终发现是高通闭源代码triggerplayer中存在问题,那个时候Android系统已经开始了,高通就把这个解释器代码发给我们了,看了看代码它采用引用计数管理内存,发现计数没配对,导致内存提前释放。这三年半基本是新员工学习期,很多东西都不懂,幸运的是遇到了我师傅耿志鹏,张建春总(目前在小米),英伟姐,何良,郑建斌等牛人,有什么问题不会就会找他们问。这段时间我对可靠性还没有什么理论认识,也没有系统化思考,只是单点问题的解决,翻看工作记录,当时解决了不少的死机问题。现在很多在华为朋友都是那个时候结交的,有个兄弟每次吃饭都说拿我当时做输入法的时候在公交车上做测试的场景笑话我,那个时候为了做好输入法,拿着手机在路上不断按,大家以为我魔怔了。

2 5个9到来准备期(2010/8-2012)

2010年8月,北京研究所将最后一批做功能机的工程师转到Android平台,对我来说这是一个很重要的一个机会。功能机时代代码闭源,很多东西资料也很少,切换到开源平台后,想看什么想学什么都是没有任何限制的。由于自己在Linux的一些底子,学习Android平台非常快,并且当时接了一个比较复杂的一个运营商需求,涉及应用,Native,内核及其modem,核间通信,合作方提供了部分参考代码,并且整体代码架构实现比较清晰,一边看他们提供代码,一边饿补Android相关知识,那段时间感觉自己进步很快。这个需求持续了一年多时间,基本让我对Android系统有了整体认识。接下来基本就是全面开始负责北京地域产品Android Framework层的死机重启问题的问题,在11-12年定位了大量的手机死机重启问题,我积累了大量的实战经验。同时软件平台部门开始筹划可靠性工程最基础的系统APR系统,APR系统的构建是可靠性系统领域第一步,也是最关键的一步。我当时主要作为产品代表参与了一些方案的讨论,主要设计人是老张(张建春)和杨建平带的人(都早已离开华为),他们构建了第一个版本的可靠性APR度量系统。APR度量系统构建标志着手机可靠性进入了一个新时代,手机可靠性可以被度量了。第一版只用了beta系统。随着终端公司的业务的壮大,公司可靠性部也开始有专家进入构建一些可靠性基础能力,例如祁德春的srecord技术等

3)5个9全面发展期(2013-2016)

随着2013年初组织结构调整,我从产品团队到了终端手机系统与架构设计部。在胡老大信任下,开始负责拉通四个地域的可靠性技术。在可靠性实验室老鲁的大力帮助下,终端开始了全面的可靠性系统领域的建设。可靠性是一个系统工程,主要有四个部分构成:度量体系建设,流程和测试体系建设,技术体系建设,外部合作建设。

针对度量体系,我们重构了APR日志系统4.0,以实现商用要求,主要开发团队赵章全,李想。可靠性度量系统是软件可靠性的根基,没有这个系统我们无法知道在用户手里手机发生过多少次重启,应用闪退,冻屏等问题,并且在此基础上制订了《手机整体稳定性标准》,从1.0刷新到4.0,不断细化故障种类,细化可靠性测试场景和要求。

针对流程体系建设,主要依赖测试团队(老席,晓红等)将稳定性标准依赖度量平台构建在整个交付流程中,每个TR点必须严格遵守标准。另外在可靠性故障注入团队(吴天益,余亮等)帮助下构建了长时间可靠性验证框架及其故障注入平台,把可靠性测试系统提到了一个新的台阶。测试团队通过在跟美国运营商做产品的时候不断进步,引入了ATT,MTBF等先进的自动化测试系统(包括机械手,一拖十机柜)上百台机器同时可以进行自动化测试,甚为壮观。

针对技术体系建设,这块也是我个人投入最大的领域。当时带头梳理软件可靠性技术架构,以故障快速诊断,故障预防检测,分级恢复,故障注入”关键技术纬度,针对产品老大难问题(内存,资源泄露,冻屏,不开机)进行全面的能力建设。为了攻克内存问题,联合中软团队全面梳理内存故障(内存改写和内存泄露),包括asan,mudflap,slub-debug,page_debug,page_owner等,后来联合中软编译器和内核团队,海思搞定kasan等工具移植,构建自动化天网平台,从被动发现问题到主动探测问题,彻底解决产品内存痛点问题。为了解决系统资源泄露和过载问题,启动资源亚健康项目,对Android的资源进行全面检测和控制,及其进行故障恢复,后来成为华为天生快一生快的基础。冻屏问题是一个老大难问题,我全面梳理了导致冻屏的案例,在王雅坤努力下,我们改进了Android系统的ANR机制,新增hungtask联动机制。当时不开机问题是EWP故障机痛点,分析了很多故障机发现很多都与文件损坏有关系,针对不开机让老吴余亮设计故障注入工具,德春设计故障恢复Erecovey,把不开机故障降低了不少。在这个过程中,我们制订了《可靠性设计和编程规范》,从设计源头去杜绝问题的发生。

针对外部合作体系建设,雅坤梳理了国内外做可靠性的高校,包括北航,重庆大学,厦门大学,国外意大利等大学进行合作项目,在存储老化和软件老化领域进行研究。

在这段时间,可靠性领域应该是最百花齐放的时候,我记得2015年在胡老大主导下,在深圳举办了“5个9”研讨会,去的团队很多,包括CBG,中软,中硬,可靠性实验室,HISI等核心团队,是这个阶段的顶峰。在会上卡顿方向搞了一个众星捧月架构(一生快的前身),其核心思想是前台任务优先处理,资源100%保障,后台关键业务优先处理,资源优先保障,后台非关键低优先级处理,限制资源消耗,初步确定在虚拟机(GC,编译优化)发力,这个也为做方舟埋下了种子。在会上还开创性提出了双系统,半夜鸡叫,资源管控等架构。

作为这个阶段技术领域负责人,我的技术有了很大的进步,学会了如何去系统化构建一个技术体系。

4)我的可靠性尾声(2016末-2017/5)

16年底由于新的组织架构的调整,可靠性整体领域不断成熟,5个9的目标已经实现,冲击四个永不目标并没有获取领导支持,“永不异常”,“永不死机”,“永不冻屏”,"永不变砖"。自己在这个领域发展的空间越来越小并且因为自己逐步失去激情,萌生了退出,主要工作移交给了亮哥(张亮)。最后多半年,做完了自己最后的一件事,就是带着北京几个兄弟(王再尚,张宪峰,翟峰)把可靠性天网进行了交付,通过工程化手段将asan,kasan,ubsan等工具部署到自动化平台,为可靠性构建动态检测质量护城河;并联合软件分析实验室王千祥老师,中软编译器团队(张超)构建软件BUG分析工具(空指针,资源泄露)。做代码检测工具也为自己去做方舟埋下了伏笔。

总结

这篇文章主要是讲了我在可靠性领域的历程,其中掺杂了自己一些其他的工作经历。在可靠性领域这几年结识了很多志同道合的朋友,包括可靠性实验室,中软,海思,中硬,其中很多人都离开了原来的岗位。虽然我已经离开了这个领域多年,但是大家碰到还会回忆当时一起奋斗的日子,结下了深厚的友谊。我可以说没有这几波人的不懈努力,也看不到华为手机现在这么稳定可靠,感谢你们在这段时间对我的信任和支持。

这段技术经历,培养了我个人在不同团队沟通合作的能力,也初步奠定了我的团队合作原则就是百花齐放,充分信任,利益分享,只有这样才能团结一切可能的力量。

备注:这个可靠性过程中涉及的兄弟太多了不能一一列举。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3