嵌入式os稳定性工作总结

嵌入式os稳定性工作总结

前言

最近对稳定性工作慢慢积累经验丰富了,想对这个嵌入式行业我的os稳定性工作做个梳理总结。

还是那句话,我喜欢把握整体业务和架构特点,从这方面入手比较好。

os稳定性工作价值体现

1 单元测试阶段体现不了,集成测试阶段才会有

因为产品的集成测试阶段,不再是各个子模块的单元测试了,这个时候关注的是整个os的系统稳定性。

单元测试阶段,其实有bug,各个子模块工程师很容易找出原因,不需要借助什么os稳定性分析工具。

但是集成测试阶段,各个子模块如果出问题,因为被厚厚的os层包裹着,并且各个模块耦合交织在一起,所以这个时候就需要体现os稳定性工程师的价值了。

举个例子:

比如手机平板之类的嵌入式公司,里面分成触控显示,多媒体组,usb/网口外设组等多个项目组。

如果是各个模块的单元测试阶段,每个项目组各自测试各自的模块,如果有bug,就在自己模块里面,很容易看出来的。

这个时候不需要什么os稳定性分析工具,比如linux下面的分析内核崩溃的kdump+crash工具,还有ftrace,bcc等高级稳定性分析工具也不需要太多。

当然了,稳定性工程师也可以做些效率提升工作,告诉各个项目组,多用些linux下面一些稳定性分析工具,有助于提升bug解决效率。

但是至少这个阶段,不会体现os稳定性工程师的痛点价值需求。

2 demo阶段也体现不了太多价值,作成产品量产交付阶段和售后服务阶段才会体现价值

嵌入式行业,很多特别是小公司,没有好的产品销售思路和渠道,没有优质客户,所以很多时候是在搞demo或者只能小批量的出货,也就是所谓的demo厂。

这个时候也体现不了太多稳定性工作价值。

因为搞demo或者产品出货量小时,也不会有太多或者复杂难解os稳定性问题存在。这些公司很多时候是在搞产品的功能集成和驱动自身稳定性。

只有量产阶段(大批量出货),集成化测试才能体现意义,然后稳定性工作就来了。

举个例子:

手机快量产阶段,小米有mtbf压力测试,有成熟的自动化测试脚本,每天几百台手机在压测,还有独立的测试组,雇佣大量人员给研发提稳定性bug。

而且手机软件开发版和稳定版是分开的,开发版多是小米内测手机用户会用,一些比较前沿或者激进点的手机功能开发,会先进开发版,这个时候还会再发现一些稳定性bug。

所以大厂对产品稳定性质量把关测试,还是有很多值得学习的。

还有售后服务阶段,像小米手机出货量大时,一年几亿部,手机售后软件故障处理是很忙的。

为了保住用户群体那边的口碑,大厂在这方面做了用户手机稳定性问题方面的大数据跟踪,

这样可以提前收集一些特定用户机型方面的稳定性问题特征,在用户反馈问题或者稳定性问题大规模爆发之前,就可以提前解决该问题。

3 总结:

os稳定性工作是和系统的整体表现相关的,产品的集成化测试阶段,大批量的生产交付和售后故障处理阶段,os稳定性工作才能显示出痛点价值。

所以还要去大厂,才能真正学到os稳定性工作价值。

os稳定性工作总结

小米和后来我呆的这家芯片公司,我做的稳定性工作价值还是需要梳理总结下。

1 效率提升

目标是提升问题分析解决效率。

linux下面有很多丰富的稳定性问题分析工具,比如ftrace, kprobe, bcc,perf等。这些工具充分利用起来后,

其实是可以不需要在内核里面加任何printk类似打印调试语句的,这样加打印语句,重编内核再调试也麻烦耗时。

而且动态修改内核时,也可以借助上面提的工具。

总之,稳定性工程师可以利用这些工具,在公司内部推广,提升驱动工程师解决问题效率。

我之前推广后,驱动工程师工作效率比以前至少提升了一倍多。

2 降低研发成本

芯片公司需要用到trace32调试工具,不过trace32的独特价值是体现在它解决芯片总线hung死或者cpu彻底死掉等难解硬件问题上。

很多os软件问题不需要用到trace32。

我所在的芯片公司,很多内核或者驱动问题的定位,还需要借助trace32,这样公司的trace32数量就不够用了。

我开发了arm64上self-hosted调试工具: kdb/kgdb,可以一定程序上代替trace32来做稳定性问题定位。

3 稳定性工作具体内容

1)死机崩溃问题解决

需要对os异常这块有所熟悉,对arm64体系架构异常这部分有所熟悉,知道来个异常,怎么区分是cpu取指错误(通常是非法指令或者未定义指令,可能是ddr错误),

还是mmu错误(这个通常是软件错误,和前面取指错误一样都是同步精确异常),还是外部硬件错误(这个通常是外部事件产生的异步异常,就是非精确异常了)。

如果是mmu类型的异常错误,还得有栈回溯推导这一基本技能,会从崩溃task栈上提取有用信息。

2)内存和存储之类问题。

内存方面通常是内存泄漏,内存踩踏。存储方面通常是文件丢失,文件损坏,文件系统挂载出问题等。

相关推荐
PwnGuo44 分钟前
Android逆向:在 Unidbg 中解决 native 函数内调用 Java 方法的报错
android·java·python
物理与数学1 小时前
Linux 内核 TLB 优化
linux·linux内核
物理与数学1 小时前
linux 交换分区(Swap)
linux·linux内核
Kratzdisteln1 小时前
【1902】优化后的三路径学习系统
android·学习
Digitally2 小时前
如何将文件从 iPhone 传输到 Android
android·ios·iphone
a3158238062 小时前
Android修改调试屏幕的选择方向
android·adb·屏幕旋转
超级数据查看器2 小时前
超级数据查看器 更新日志(包含的功能)
android·java·数据库·sqlite·安卓
AiFlutter2 小时前
Flutter-Android不能通过apply script方法应用Gradle插件
android·flutter
物理与数学2 小时前
Linux内核 mm_struct
linux·linux内核
2501_915106322 小时前
iOS 抓包工具实战实践指南,围绕代理抓包、数据流抓包和拦截器等常见工具
android·ios·小程序·https·uni-app·iphone·webview