深度解读华为EMUI9.1带来的技术创新产物:华为方舟编译器和EROFS超级文件系统
4月25日,华为EMUI 媒体 沙龙在北京召开,华为消费者BG软件部总裁王成录博士向参会媒体详细介绍了华为EMUI 9.1系统。EMUI 9.1通过华为方舟编译器和EROFS超级文件系统两大技术创新,结合开放生态共同助力用户体验的提升。
EMUI的前世今生
从2012年EMUI1.0的合一桌面,到2016年EMUI5.0的“天生快,一生快”,到2018年EMUI8.2的GPU Turbo,再到EMUI9.0的Link Turbo,以及目前最新的EMUI9.1超级文件系统和华为方舟编译器,EMUI在不断的创新发展中做到了反哺整个安卓产业,不断输出优秀成果。EMUI一路走来,一直致力于提升用户体验,用户体验永远是华为思考一切问题的出发点。目前EMUI服务着全球216个国家和地区,日活跃用户到达4.7亿。
华为方舟编译器是什么?
编译器是连接人类世界与机器世界的一座桥梁,起着翻译官的重要作用。简言之编译器就是把编程人员开发的高级语言程序,翻译成机器可执行的机器指令,这就是编译器。而要想把编译器做好,既要懂原来的高级语言,又要懂所看到的硬件平台。必须对整个机器的CPU、GPU所有的指令要熟悉,又对目标语言要非常熟悉。就像一个翻译官,把中文翻译成英文,至少要对中文英文都非常理解。
十年磨一剑的技术积累
华为从2009年就开始创建编译组,源于在研发海思芯片以后,需要有自己的编译器才能真正发挥芯片的能力;2013年,华为推出了自研编译器HCC; 2014年,Fred Chow等诸多编译器领域的资深专家加入华为,搭建了华为编译器的主架构;2016年,有了成功的实践经验以后,华为2012年实验室成立了编译器与编程语言实验室;2019年,经过十年的积累沉淀,终于推出了华为方舟编译器这个“板凳要坐十年冷”的复杂工程。
华为方舟编译器的四大技术亮点
第一,多语言联合编译和跨语言调用开销是影响Android性能开销的最核心原因之一,目前Android应用市场里面Top级别的APP 95%以上都是由多种开发语言来实现的。举例说明,这些APP的逻辑部分是Java代码,但是为了增强app应用的安全性、可靠性、兼容性,开发者会用效率更高的C语言写库,供Java来调用。直接导致的结果是应用真正运行起来的时候,一定会有Java和C语言之间调用问题,就会形成额外的性能开销。而方舟编译器在不同语言代码的开发环境中,就编译成一套可执行文件,在运行环境中高效执行。
第二,Android从诞生那天起,就选择了Java这个成熟的语言,Java语言有跨平台、分布式,安全性高等诸多优势。但是随之应运而生的还有Java语言开发包中的重要组成--虚拟机,无论是什么样的硬件,Java语言都不需要管,统统抽象成Java的运行环境,因此可以跨平台操作。这个又带来另外一个问题,任何机器只要把应用装上就会分配好虚拟机,占用额外的系统资源。今天的Android应用市场中的APP,实际上都是DEX码的文件,消费者从应用市场下载APP以后,真正解释成机器指令和执行文件是在 手机 上的虚拟机里做的,因此对系统资源要求高。安卓自身的编译技术在不断的发展,但始终需要在运行中依赖虚拟机来进行动态编译和解释执行,对系统资源消耗较大。
而方舟编译器在开发环境中就可以完成全部代码的编译,无论业务逻辑是Java写的还是C语言写的,不需要再次编译,手机安装应用程序后无需依赖虚拟机资源,即可全速运行程序,带来效率上的极大提升,消除了影响性能的虚拟机机制。EMUI 9.1仅仅对系统组件System Server应用了华为方舟编译器后,就带来了系统操作流畅度提升24%,系统响应性能提升44%的收益。华为方舟编译器提供了全新的系统及应用的编译和运行机制,从动态编译变为静态编译,就是直接将高级语言直接编译成机器码,消除了虚拟机动态编译的额外开销,实现了开发和运行效率的兼容并举。
内存回收机制是另一个方舟编译器的重大技术突破。Android系统在全局回收内存资源时,需要暂停应用等待回收完成,这是产生随机卡顿的重要原因。而在方舟编译器里,在编译时为程序配备了及时回收的内存处理机制,即在程序执行过程当中同步实时处理回收。所以方舟编译器的垃圾回收及时又彻底,并且不需要停止进程。
第三,编译器和翻译语言的原理是一样的,单独直译出词句并不是难点,难得是要翻译的又快又好。比如把英文“What happens in Vegas, stays in Vegas”翻译成中文,最简单的直译是“在拉斯维加斯发生的一切,就留在拉斯维加斯”;好一些的译文是“事情过去了就过去了,追悔无益”;而优秀的译文则是“勿念过往,活在当下”。方舟编译器通过了大量的优化和调整,一方面对Java语言深入了解后再细致重建,另一方面对机器指令顺序结构理解要求非常清晰,这两方面的匹配度越高,编译器效率越高。一个好的编译器,开发者一行代码都不需要修改,性能能提升10%到20%。
方舟编译器跟现有的Android非常不一样,能做到更加灵活更加深入的优化,给应用开发者带来了更大的优化应用的机会。现有的Android编译大部分代码在虚拟机环境运行,虚拟机的创建来自于同一套“模板”,但不同应用的优化诉求不一样,因而难以作深度的优化,方舟编译器则是每个应用编译优化方案自己来定,分别形成不同应用优化后的机器码,每一个应用开发者都有了把自己的应用做的更好的机会,不再受限于Android虚拟机的限制。
第四,方舟编译器从多年前决定做的那一刻起,就立下了上层业务代码不需要改动,开发者只通过华为方舟编译器做可以重新编译的目标。现在开发者不论用Java语言去开发新的APP,还是自己写的C语言库,这两种方式都不需要变,从而大大降低了开发者学习和使用成本。
EROFS超级文件系统
EROFS超级文件系统是伴随着存储介质的发展一步一步走过来,存储介质不断的演进,让这个文件系统不断的跟着演进,数据在这个存储介质上存储读取更好更安全更快。2016年搭载EMUI 5.0的华为Mate 9,首次在业界规模商用F2FS文件系统,替代了传统的EXT4文件系统,令用户分区的文件读写流畅度提升20%。EROFS超级文件系统通过高效的压缩算法加持,带来随机读性能提升,EROFS的做法是保证每次压缩一块,正好是一个固定大小的存储块(即压缩后的文件和存储的最小单元边界一致),这样几乎没有浪费,不仅性能提升随机读性能的20%,ROM空间还节约了2GB。以华为P30 Pro 128G为例,系统初始空间相比Ext4节省2GB,相当于用户可以多存1000张照片或500首歌曲。
超级文件系统天然只读设计,系统分区不可被三方改写,因为一旦系统区被写就意味着系统被攻破了,所有运行管理保证它的正确性,所以不能被改写意味着更安全。Ext4是一个读写双向的文件系统,为了防止读写系统区,要加两把锁才能锁住。这两把锁加上,这个机制就变得更复杂了,EROFS只读系统天生没有这个问题更加安全,在这种情况下想把系统区攻破则是难上加难。
打造开放生态,共享智慧体验
通过Huawei HiAI构建移动AI开放平台,华为把AI所有能力开放给第三方,使能现在的应用更丰富更强大。Huawei HiAI开放能力不断增强,支持算子数量增加至147算子,API上线数量增加33个API,接入原子化服务超3200项。已经有很多合作伙伴利用HiAI开放平台给消费者提供了很多创新体验,比如storysign利用HiAI的API能力帮助残障人士进行无障碍的阅读。通过开放的全球生态系统,以及1400+生态合作伙伴和560000+的开发者,用户将会获得更多更丰富的智慧场景体验。
推进方舟编译器的开源,让更多用户享受应用流畅体验。继华为P30系列发布会方舟编译器开源后,将在2019年8月的华为终端开发者大会宣布方舟编译框架代码开源,后续会在2019年11月的绿盟开发者大会实现完整方舟编译器代码开源。
Link Turbo的发展让联接更多样。Link Turbo通过优化手机网络的连接,让整个生态串联起来。服务器端装载SDK以后就享受到网络的多路合并,无论是WIFI还是LTE都能连接起来,保证网络足够的带宽和实时性。EMUI9.1带来了以用户为中心的全场景体验,覆盖方方面面的日常生活场景。例如HUAWEI HiCar带来手机车钥匙,跑步机数据同步,与PC一碰分享等多设备之间的互联体验。未来EMUI将着眼更多无缝的全场景用户体验,视频、音频、图像等各种信息和指令都可以在PC、电视、平板等智能设备中无缝流转,用户获得更加丰富优质的体验。