在 OPPO 做技术也要有用户驱动设计理念

近几年 OPPO ColorOS 系统体验突飞猛进,用户口碑也是一路飙升,ColorOS 在每次更新都能在带来全新功能的同时,性能与流畅度也有不同程度的提升,目前已经逐渐成为人们口中的第一档手机操作系统。我们都知道 Android 系统是基于 Linux 内核打造的,这就让我们对 ColorOS 背后的技术产生了浓厚的兴趣,为了进一步了解 ColorOS 成功背后在内核工作上的探索。近日,CSDN 采访了 OPPO ColorOS 三位 Linux 内核技术专家,听听他们在 ColorOS 工作的背后故事。

CSDN:非常高兴能够邀请到三位来做一个专访,首先请三位老师简单介绍一下自己的职业背景以及最近正在做的事情?

崔晓刚:我叫崔晓刚,本硕就读于东南大学微电子系,2012 年硕士毕业后加入高通公司。在高通先后负责文件系统、Debug 功能的开发以及 CPU 调度调频等工作。2017 年,我加入了 OPPO 公司,先后参与 OPPO 性能功耗的引擎开发,早期产品 CPU 的评估与选型、CPU 调度器及调频器以及 CPU Cache、软硬件垂直整合等工作,目前主要负责 OPPO CPU 调度技术团队。

李培锋:我叫李培锋,之前也是在芯片原厂做软件开发。主要包括稳定性、内核休眠唤醒等相关工作。来到 OPPO 以后主要投入在性能相关的开发工作,目前负责内存相关的开发工作。

郭维超:加入 OPPO 之前我先后接触过分布式存储、文件系统、云存储相关的工作。目前在 OPPO 主要做软硬件垂直整合,同时尝试做终端存储的扩展,比如设备与设备之间,以及端云之间的存储融合。

CSDN:相比普通开发,Linux 内核是更具挑战性的工作,吸引三位老师从事 Linux 内核开发相关工作的原因是什么?普通开发者如何能够成为 Linux 内核开发者,其关键的因素有哪些?

崔晓刚:我从事 Linux 内核相关开发的原因主要是机遇和兴趣。学生时代正是安卓系统比较火热的阶段,在这样的环境下,我接触了 Linux、Android、嵌入式,从芯片上的 Linux 驱动开发开始自此就一直在做 Linux 内核相关的开发工作。

我认为 Linux 内核开发者和普通的应用开发者相比还是有很大的区别,相对于上层的应用开发还是有非常多不一样的地方。从操作系统软硬件结合的角度上看 Linux 内核开发者考虑问题需要更全面,而且对编程效率的要求也会比较高。

李培锋:我选择内核这条路主要也是好奇心和兴趣使然,在大学学习Linux 驱动的过程中,我对某些内核接口的实现方式非常感兴趣,为了研究这些接口的实现方式就慢慢走上了内核开发这条路,然后毕业后从芯片原厂到 OPPO 一直坚持至今,坦率的讲,做内核开发对我来说是一件很有成就感的事情。

我觉得普通开发者要成为 Linux 内核开发者,需要不断的阅读代码。但是很多 Linux 代码比较枯燥,因此需要开发者可以耐得住寂寞沉下心。同时做内核开发并不像功能开发,坚持十天半个月就可以看到功能和初步成果,很多时候开发很久、阅读很多枯燥的代码后仍然没有任何结果,在这样的环境下能够坚持下去,也是非常考验开发者心态的。

郭维超:我最早接触 Linux 内核是在研究生阶段,当时正在做现在我们手机厂商都已经有的内存扩展特性。慢慢然后开始接触内核,去看相关的代码,发现这个内核还是挺厉害的。开始工作之后,就具体到文件系统模块的实实在在开发工作,因为你的一个改动可能会影响很多其他部分的功能,慢慢地也养成了全局性的思维,这时已经觉得这个工作是挺有成就感的。

而且在拥有 Linux 内核开发经验之后,你会发现,很多企业即便是大公司,它业务系统的代码也是很粗糙的,远没有内核那么优雅,Linux 内核的代码是经过很多人讨论、打磨、不断优化的产物。因此,我也认为在 Linux 内核领域及 OPPO 这样一个大的平台从事开发工作是非常具有吸引力的。

总之,内核开发者吸引我的原因主要有以下几点。首先,像 OPPO 这样的大平台;其次必须是有挑战性的工作,可以解决各种难题得到想要的结果,并最终获得很深远的影响。

CSDN:在 OPPO ColorOS 做内核开发的体验是什么样的?最大的收获是什么?

崔晓刚:相比我在高通的工作,在 OPPO 做开发更贴近用户,一方面编写的代码可以运行在百万级起的手机上,成就感非常大;另一方面 OPPO 本身对产品的质量要求非常严格,尤其是我们做 Linux 内核开发,每一行代码的影响都非常大,不像简单的应用开发,修改的代码仅局限于某个应用的某个功能,因此代码审核上必须非常严格。

此外,我在 OPPO 这里的另一收获就是认识到操作系统不是万能的,在这样的基础上作为手机厂商的 Linux 开发者,我们会去对 Linux Kernel 进行定制化优化,在 CPU 调度、内存管理、系统管理做很多的优化工作提供给用户。

李培锋:我在 OPPO 的收获主要有两点,第一,OPPO 引导我们的是,技术要基于用户体验去做,使用新技术要在确保能为用户带来良好的体验下进行。第二,就是将内核审核的工作做到极致,如晓刚所说,内核每一行代码的修改都可能影响到整个操作系统的正常运作,因此,无论是开发还是测试,审核与管控一定是最严格的。

郭维超:我最大的收获就是如刚才两位所说,做内核开发的同时,能够考虑到更大的用户面,能够做更充分的系统设计。此外,OPPO 近几年在开源上的投入也是逐渐变多,也鼓励内部开发者参与开源与社区互动,目前我们现在已经有很多模块贡献给社区。做开源的正确态度心态上首先是要开放的,我觉得 OPPO 在开源上的状态也是很好的。

CSDN:在 OPPO 多年项目开发的过程中,有没有哪些里程碑的事件可以分享?

郭维超:最近几年,我们也做了很多技术课题,陆陆续续在发布会上有所提及。我个人觉得比较有成就感的就是内存扩展技术,第一版我负责开发的。其实我在研究生时期就有过类似的想法,但是当时受制于闪存寿命、功耗等问题一直难以落地。

随着近几年硬件能力的提升以及技术上的改进,一方面闪存性能及寿命都有明显的提升,不会因为过多过大的使用而快速损坏。不过这也不意味着可以无限制进行使用,软件上还是需要设计一些解决方案,来确保对闪存寿命的消耗是可控的。

总的来说,这一技术终于成功在手机上落地,目前也成为了各家智能手机系统的标配,是我认为可以称为里程碑的事情。

崔晓刚:我的里程碑事件那还要追溯到刚进入 OPPO 的时候,届时产品使用的芯片比较低端,安卓系统远不如现在完善,Linux 操作系统也存在一些缺陷。许多用户都会抱怨应用启动慢、交互动画卡顿。因此,我与同事一起设计并开发了 OPPO 第一版性能功耗的一个引擎,基于用户交互的感知场景进行控制,包括任务的调度调频等都可以实现。这一功能使得系统等整体性能有了很大的提升,直观感受就是交互动画不再卡顿,同时功耗也得到了很好的控制,不消耗更多资源的同时,极大提升用户交互及体验,这是我认为比较有成就感的事情。

李培锋:我觉得做 Linux 开发工作从解决项目的问题,到社区提交代码都是比较容易获得一些成就感的,如果说在 OPPO 的里程碑,我认为还是我深耕多年的内存领域。之前我们团队发现内存问题可能会先开一个课题或者做一个解决方案,去年我们转换了思路,从用户角度出发,研究更快速地将相关度更高的线程分配给用户,做到零卡顿。即从点对点的问题改为从目的出发、从用户出发,提供更完善的方案将所有的问题点都覆盖到。

CSDN:除了攻克技术难关,向社区推广需要更多的沟通与布道,OPPO 现在也在积极回馈社区,那么在深入社区与贴近业务方面,三位老师有哪些经验可以分享?

李培锋:首先我日常坚持的一件事就是经常逛社区,关注社区的伙伴在做什么,关注所处领域的新颖技术等,一方面避免重复造轮子,另一方面也希望可以学习更多前辈的技术理念进而用在我们的产品之上。第二,我喜欢去查看一些好项目代码历史 Commit 提交的信息,虽然一开始可能遇到看不懂的情况,但慢慢地从完整了解一个从诞生到成功的项目 Commit 记录之后,就能充分意识到这个项目经过了怎样的变化,进而发现其中的设计细节,理解优秀设计的精髓。

崔晓刚:首先,我们希望在跟社区的沟通过程中将 OPPO 对于手机操作系统定制优化的思路与社区进行交流。如刚才培锋所言,社区有很多代码,你可能是看不懂的,每一笔代码提交的背后都有复杂的逻辑和模型。因此我们希望可以在与社区沟通的过程中,一方面输入我们对操作系统及产品的思考,另一方面得到社区对我们产品的反馈。同时,与不同厂商的内核开发者进行广泛的交流。

另外,过去几年,OPPO 一直在深耕技术,没有在社区进行过多的推广,后续我们希望可以通过深入社区,基于我们对产品对技术的里脊,开发出更多优质的模块回馈社区,为开源做贡献。

郭维超:我同意两位的看法,我希望可以从基础的事情起步,关注社区的开发动态,提供一些优化和改进的方案。然后在深入交流之后,我认为开发者应该做好社区与业务之间的沟通桥梁,跳出厂商的角度,以社区的思维方式考虑问题,比如考虑“如何更好地实现内核的某个特性”类似问题,同时,针对厂商的业务痛点问题及新特性、新场景做更紧密的贴合。

CSDN:把一个领域做好做精,需要投入大量的时间和精力,三位作为资深的专家,对于想要从事 Liunx 内核开发的年轻程序员,都有哪些建议?

崔晓刚:保持兴趣和好奇心是最重要的。其实很多接触 Linux 开发的工程师基本上都是从一些简单的驱动开始上手,相比整个 Linux 的驱动模型这只是很小的一个部分。而足够的好奇心,可以驱使开发者在这个探索的过程中不断摄入新的知识,从简单驱动开始,到内存管理、内存分配不断抽丝剥茧不断学习一步一步去窥探整个 Linux 的全貌。

郭维超:我非常同意晓刚的说法,保持好奇心很重要。另外我觉得也很重要的一点就是敢于交流。比如说看代码的过程中,发现一些很小很细节的不合理改动,又或者是拼写错误之类的情况,都可以发邮件提补丁,开源社区拥有非常热心的技术大佬,他们很乐意提供帮助。因此我们的开发者需要从这些小的细节开始,不断锻炼自己的交流能力,而且现在很多开源社区也面临新老交替的问题,急需新生力量的加入。所以我认为开发者需要敢于提问、交流、保持好奇心。

李培锋:我非常认同两位的看法,最后补充几点,第一就是要能够耐得住寂寞,第二要学会阅读源码,最后就是涉足更多的领域,不要把自己局限到某一个单一的领域,即便你希望深耕某一个基础领域比如内存,但你也不能停止对 CPU ,存储等软件领域的了解。就是要站在更高更宏观的位置看待问题。

CSDN:最后一个问题,未来 1-3 年,三位老师在个人成长或者公司项目的规划是什么样的?

崔晓刚:做技术的几年经历确实让我的想法发生了一些改变,尤其是在 OPPO 这样的公司,各个技术领域的专家非常多,如何将他们的能力全部发挥出来就需要设计完整的架构设计与技术规划。因此,回到我个人,一方面我希望自己可以更多地进行向上思考,虽然我的工作是 Linux 内核开发,但是未来也希望可以更多了解上层领域并向其进行拓展。熟悉业务领域的想法及技术方案,熟悉他们希望如何与底层操作系统进行配合一起使用的逻辑。只有这样,才能让底层的机制更完美发挥其应用的能力。

另一方面,就是在硬件层更进一步。我发现 Linux 兼容性很强,在兼容性很强带来更多好处的同时,也忽略了硬件本身的一些特性。因此我也希望能够自己能够在往上发展之外,更深入了解 CPU 硬件执行的原理。

李培锋:我未来主要也会集中两个方向。第一,可以更精准的发现问题,提升用户体验。如刚才所说,针对“在系统分配内存时如何得到更快的响应让用户感觉不到卡顿”等相关问题进行深入研究,提供更好的用户体验。其次,我希望自己可以更深入了解硬件底层各个模块、各个领域的知识,从底层做好技术支撑,进而为用户提供更好的体验。

郭维超:我接下来的规划是希望自己可以做好一个传承者或者叫转换者的角色。立足 Linux 内核这样的技术领域,做好 OPPO 与开源社区及高校之间的联系。OPPO 目前与很多高校进行深度合作,将他们创新的想法,通过我们的技术落地到我们的产品中,同时,我认为在这个过程中,也会产生很多优质的内容可以被开源到社区,进而最终实现三赢的结果。此外我也希望自己能够从技术出发,作为企业员工能够更多地关注产品、关注用户需求。

最后也希望能够在技术之外,进一步提升自己。

采访嘉宾:

崔晓刚 OPPO ColorOS CPU 调度团队负责人

李培锋 OPPO ColorOS 内存高级工程师

郭维超 OPPO ColorOS 存储专家

Logo

20年前,《新程序员》创刊时,我们的心愿是全面关注程序员成长,中国将拥有新一代世界级的程序员。20年后的今天,我们有了新的使命:助力中国IT技术人成长,成就一亿技术人!

更多推荐