智视4月25日报道,两周前,华为年度第一款旗舰机P30宣布将操作系统升级为EMUI9.1。发布会上,华为推出了两大创新亮点:方舟编译器和超级文件系统EROFS。由于发布会时间限制,华为仅用两页PPT简单介绍了这两项技术的功能。据华为介绍,自发布会以来,华为软件OpenLab团队的电话几乎被炸了,很多开发者都想进一步了解方舟编译器。
▲华为CBG软件部总裁王成录
今天,智视等多家媒体参加了华为EMUI软件交流会。会上,华为CBG软件部总裁王成录详细介绍了方舟编译器和超级文件系统EROFS这两项技术的原理,以及研发背后的细节,以及未来的发展方向EMUI的主要攻击。方向。
一、什么是方舟编译器?
分享会一开始,王成录博士首先介绍了EMUI的演进历程,以及华为近年来针对用户痛点在系统软件上进行的针对性优化。比如EMUI5.0主要解决Android系统卡顿问题,EMUI8.2推出GPU Turbo专注于有限的游戏性能,EMUI9.0推出Link Turbo专注于网络不均覆盖问题,EMUI9.1针对Android流畅度不足的问题推出了方舟编译器和超级文件系统EROFS。
目前Android平台上绝大多数应用程序都是用Java编写的,但在底层,真正能让计算机“理解”和执行的其实是机器语言,也就是由0和1组成的二进制代码。因此,中间必须有一个从高级语言到机器语言的转换。
一般来说,有两种方式:
(1)引入了一个中间层,它的工作方式是理解一个Java语句并翻译成机器码,然后让硬件执行,称为解释执行。这样,代码没有被过滤并执行。非常低效。
(2)将高级语言直接翻译成机器语言。有两种方式:一种是在程序运行前将高级语言编译成机器语言,称为AOT(Ahead of time)编译; , 程序运行后,将高级语言实时编译成机器语言并执行,称为JIT(Just in time)编译。
在Android5.0之前,Android采用解释执行+JIT方式执行高级语言代码,属于解释执行模式,但是效率很低。随后,Android版本不断迭代,在Android6.0阶段推出了虚拟机ART。
目前Android采用的是解释执行+JIT+AOT的综合模式。
那么什么是编译器?编译器是将计算机高级编程语言转换为机器可执行机器语言,即直接转换为二进制代码的工具。可以说是一步到位的编译。
方舟编译器制作的APK下载到手机时直接是机器语言,即二进制代码。本机可以直接运行,无需编译。这是方舟编译器最本质的技术突破。
开发编译器难吗?编译器的开发需要长期大量的研究和开发。王成禄博士也坦言,“坐板凳冷了要十年”。同时,开发编译器需要研发人员不仅要精通高级语言,非常熟悉各种框架,还要熟悉机器语言,这对研究人员的要求非常高。谷歌生态系统建立了这么久,规模非常大。上面有很多框架和应用。如果要重新构建一个适应谷歌生态的编译器,可以想象工作量是非常巨大的。
华为是如何制作方舟编译器的?据王博士介绍,华为在编译器研发方面的积累可以追溯到2009年,华为海思研发开始时,就吸引了第一批国内外研究人员加入,组建了编译团队。2013年,华为自主研发并推出了基站HCC编译器,这也是华为编译器框架概念的官方提议,也是方舟编译器的前身。
2014年,Fred Chow(周志德)加入华为,担任华为编译器技术首席科学家,建立了方舟编译器的主要架构。2015年,华为推出了自主研发的编程语言CM。2016年,成立编译器和编程语言实验室。2019年,华为正式推出方舟编译器。前后一共十年,经过数百名研究人员的努力,投入的资金也是数亿美元。
王成录博士表示,方舟编译器优化的安卓系统在DNA上与苹果的iOS系统很接近。华为下一步要推动生态系统的建立,不断优化系统,让用户使用更纯正的安卓软件。
方舟编译器四大技术亮点:
1、 是一个多语言协同优化编译器,消除了跨语言调用的开销
据王成录博士介绍,目前95%以上的顶级应用都采用混合语言模型,涉及多种开发语言。具体来说,程序的逻辑部分是用Java语言编写的,但为了增强安全性、可靠性、兼容性等能力,应用开发者可以用C语言编写库供Java调用。Java和C语言之间的调用必须通过接口来使用,这样会带来额外的性能开销,而且相比于不需要调用的情况开销很大。
方舟编译器允许不同语言的代码在程序开发环境中编译成一套统一的可执行文件,并在硬件运行环境中高效执行。也就是说,方舟编译器吸收了当前Android生态系统中的各种主流框架和库易语言v5.6静态编译器,针对不同语言做了统一的程序优化,直接编译成机器指令。
2、程序运行时无需依赖虚拟机,减少资源占用,建立高效的内存回收机制
Java语言有很多优点,包括跨平台、分布式和高安全性。在Java语言设计之初,有一个Java语言开发包,里面有一个很重要的东西,就是虚拟机。虚拟机的作用就是不管用什么样的硬件,都可以抽象成Java运行环境,所以可以实现跨平台,不管是X86、ARM架构还是CPU机器。虚拟机的出现带来了一个问题。只要打包了Java语言开发包,虚拟机就会被合理分配,占用额外的系统资源。
那么ART虚拟机的作用是什么?就是在运行前准备好编译,属于静态编译的一种。部分效率问题可以通过引入JIT编译和AOT编译来解决,但是仍然不能直接编译Java的动态特性部分,还需要解释执行。Java的动态特性是降低开发难度。它不需要开发人员编写所有程序,只要它们可以在运行时调用即可。通常这部分只能在运行时处理。
方舟编译器最大的突破就在这里,将所有的动态部分都变成了静态编译,其核心是对Java语言的动态特性有深刻的理解。“就像一个优秀的翻译必须对中国语言文学有很好的理解,然后对英语有很好的理解。” Java非常庞大,它需要了解现有的Android应用程序,可能使用哪些库,以及这些库。如何使用它们之间的理解需要对运行状态进行大量分析,以便提前编译好这些动态特性。同时,由于方舟编译器将程序统一编译成机器语言,所以也是跨硬件平台的。
早期的C/C++要求开发者通过自己的程序来管理系统内存的使用和释放,影响了开发效率。Java的虚拟机模式提供了内存GC(垃圾回收)机制。当内存被全局回收时,所有部分都必须停下来等待回收完成,这是随机冻结的一个重要原因。
方舟编译器在编译时为程序配备了及时回收内存的处理机制。在程序运行的过程中,进行处理,这是方舟编译器的又一个非常重要的技术突破。
3、可以针对不同应用灵活编译优化,翻译成性能更好的机器指令
一个翻译器做得好不好,是衡量它能否给程序带来性能提升的重要标准。“编译器和翻译人类语言一样,翻译不是太难,但要翻译得又快又好就太难了。”
所以方舟编译器的整套逻辑通过后,还需要做很多优化和调整。一方面,对Java语言的理解需要进一步深入细致再重构;另一方面,对机器指令的顺序结构的理解需要更加清晰的理解。这两种匹配方法越准确,编译器的效率就会越高。王成录博士说,“有了好的编译器,开发者不需要修改一行代码,性能可以提升10%到20%。”
在现有的Android编译中,大部分代码运行在虚拟机环境中,其创建遵循同一套“模板”,难以进行深度优化。
方舟编译器可以针对不同的应用灵活编译优化。每个应用程序的编译优化方案由开发者确定,针对不同的应用程序分别形成优化的机器码。
王成录博士表示,方舟编译器从项目一开始的理想目标是开发者不需要更改业务代码,大家只需要通过华为方舟编译器重新编译即可。开发者现在可能还需要做一些对接,但是很快随着一些应用的进入,这个目标很快就会实现。
4、开发者学习使用成本低,打包即编译
方舟编译器的另一个亮点是它在应用开发和构建阶段为开发者提供了一个快速的集成编译环境。当前的Android系统是用户下载应用程序后在终端上编译的。
据王成录博士介绍,在相同的硬件平台上,方舟编译器将系统运行流畅度提升24%,系统响应速度提升44%,第三方应用运行流畅度提升60%。方舟编译器在内存回收机制上已经超越了苹果的iOS系统。
方舟编译器于今年4月随华为P30系列发布并开源,华为已经制定了方舟编译器的上市计划。今年8月,在华为终端开发者大会上,华为将方舟编译器框架代码开源,供开发者学习参考。在 11 月的绿盟科技开发者大会上,华为将开源完整的方舟编译器代码,以便开发者进行编译。采用。
二、什么是 EROFS?
随着存储介质的进步,文件系统也被推动发展。文件系统对磁盘读写效率有重要影响。此前华为推出了F2FS,2016年在华为P9上应用,这是针对用户分区的。今天要说的超级文件系统EROFS是针对系统分区的。
Android系统采用EXT4模式。文件块以固定长度输入,以可变长度输出。这样一来,同一个文件块的内容可能会出现在不同的磁盘块中,造成读取时的浪费。
超级文件系统EROFS的特点是:1、随机读写性能提升20%;2、采用先进的压缩算法,减少2GB;3、采用只读模式,让系统更安全。目前EROFS文件系统已经开源并集成到Linux内核的主线中,将在4.19版本发布。
据王成录博士介绍,这套系统是华为研发人员一行行编写的,100%原创。其中,王成录博士特别提到了压缩算法易语言v5.6静态编译器,这也是华为申请专利的技术。
EROFS文件系统的压缩算法使用文件块的可变长度输入和磁盘块的固定长度输出。也就是将不同长度的文件块压缩成统一大小的磁盘块的好处是没有无效读取。
这样做的好处是随机读取性能平均提高了 20%。升级包体积缩小约5%-10%,升级时间缩短约20%。
三、EMUI未来演进的四个方向
分享会上,智石问王博士EMUI未来的优化方向是什么,王博士回答说主要集中在四个方面:
一是基本业绩将继续投入。随着上面硬件、软件、应用的变化,系统资源的应用永远都不够用,所以这种投资还会继续。
第二,体验,虽然很多消费者对华为UI有很多抱怨,但确实很难调整。王博士认为,UI背后一定有科学依据。“我们现在找到的方向是人的因素,我们在使用设备的时候,要考虑设备本身的因素,环境因素和人的因素,这三个因素都考虑到了。反馈,这就是最好的体验。 ”
什么是好的体验?是手的操作,是眼睛的所见所闻,与大脑的预期是一致的。这是一个很好的操作。如今,许多体验设计缺乏建模。有必要根据不同的年龄组和性别建立人体模型。看看哪种字体大小和对比度适合这种类型的人更合适。所以这个模型会越来越完善,会成为系统中UI的算法,在不同的场景下会有所不同。华为正在努力做到这一点。
三是创新。这种创新意味着,对于不同的应用和不同的场景,并不需要所有的应用都严格按照软件流程,循序渐进。例如,一个运行了无数次的应用程序,已经证明是一个非常优质和安全的应用程序,没有必要每次都做这么复杂的处理。
第四,中国软件工程领域的人才非常短缺。软件开发者经验的积累能否沉淀到工具和平台上,至关重要。国内从来没有一个很好的软件工具平台。
会上,王博士还提到了生态建设的重要性。目前,在终端生态建设方面,华为已经建立了三大开发者生态:AI开发者生态以HiAI平台搭建;应用生态采用Link Turbo和Ark编译器构建;连接生态系统由 HiLink 和 HiCar 构建。
此外,王成录表示,Link Turbo今年会有突破,升级到2.0版本将带来对更多华为终端和更多应用的支持,让更多用户享受极速流畅的网络。经验。
结论:华为EMUI正在从系统底层优化
方舟编译器和超级文件系统EROFS都是华为在系统底层进行优化的重要步骤。方舟编译器和超级文件系统EROFS都是华为在系统底层进行优化的重要步骤。当然,Android开发生态系统已经建立多年,其优势在于开源和自由,其劣势恰恰是由此带来的无序开发,导致终端运行效率低下。作为领先的智能手机厂商,华为推出此内容的初衷是为了进一步提升安卓系统的流畅度,同时也是出于自身开发和产品性能、体验提升的考虑。
不过,正如王成录博士所说,华为方舟编译器是为了帮助安卓阵营解决实际问题。光靠华为是不够的,还需要终端厂商和开发者的共同努力。
请登录后发表评论
注册
社交帐号登录