華為王成錄:解密方舟編譯器和EMUI未來四大演進方向!

文章推薦指數: 80 %
投票人數:10人

智東西(公眾號:zhidxcom)文 | 軒窗

智東西4月25日報導,兩周前華為年度第一款旗艦機P30,同時宣布將作業系統升級為EMUI9.1。

在發布會上,華為推出了方舟編譯器和超級文件系統EROFS兩大創新亮點。

由於發布會時間限制,當時華為僅僅用兩頁PPT粗略地介紹了這兩項技術作用。

據華為方面表示,自發布會後,華為軟體OpenLab團隊的電話幾乎要被打爆了,很多開發者都想要了解方舟編譯器更多的信息。

▲華為CBG軟體部總裁 王成錄

今天,智東西與少數媒體參與了華為EMUI軟體溝通會,會上華為CBG軟體部總裁王成錄詳細介紹了方舟編譯器和超級文件系統EROFS兩項技術的原理以及研發背後的細節,以及EMUI未來的主攻方向。

一、什麼是方舟編譯器?

分享會一開始,王成錄博士先介紹了EMUI演進過程以及近幾年來,華為在系統軟體上針對用戶使用中的痛點問題進行的有針對性的優化。

比如EMUI5.0主要解決安卓系統卡頓問題,EMUI8.2上線了GPU Turbo主攻遊戲性能受限問題,EMUI9.0上線了Link Turbo主攻網絡覆蓋不均問題,EMUI9.1則上線了方舟編譯器和超級文件系統EROFS,針對安卓流暢度不足問題。

當前安卓平台的絕大多數應用是使用Java寫的,但在底層,最終真正能讓計算機「聽懂」並執行的其實是機器語言,也就是由0和1組成的二進位代碼。

所以,這中間必須存在著由高級語言到機器語言的轉化。

一般來說有兩種辦法:

(1)引入一個中間層,其工作的方式是,理解一句Java語句就將其翻譯為機器碼,讓硬體執行一下,稱之為解釋執行。

這種方式對代碼不加篩選,執行效率非常低。

(2)直接把高級語言翻譯成機器語言。

這又有兩種方式:一是在程序運行之前,把高級語言編譯為機器語言,稱之為 AOT(Ahead of time)編譯;二是,在程序運行後,實時地把高級語言編譯為機器語言並執行,稱之為 JIT(Just in time) 編譯。

在安卓5.0之前,安卓採用的是解釋執行 + JIT 的方式執行高級語言代碼,屬於邊解釋邊執行模式,但效率非常低。

隨後安卓版本不斷疊代,在安卓6.0 階段推出了虛擬機 ART。

目前安卓採用的就是解釋執行 + JIT + AOT 的綜合模式。

那麼,編譯器又是什麼呢?編譯器就是將計算機高級程式語言轉化為機器可執行的機器語言的工具,也就是直接轉化為二進位代碼。

可以說是一步到位的編譯。

用方舟編譯器做出來的APK,下載到手機上直接就是機器語言,也就是二進位代碼,機器直接就可以運行,不需要再做編譯了,這是方舟編譯器最本質的技術突破。

編譯器的研發難不難?編譯器開發是需要長期大量研發積累,王成錄博士也坦言需要「板凳要坐十年冷」。

同時,開發編譯器需要研發人員既精通高級語言,對各種框架等非常熟悉,又要對機器語言了如指掌,對研究人員要求非常高。

谷歌生態建立了這麼久,其規模非常龐大,其上的框架和、應用等非常多,想要重新做一個適配谷歌生態的編譯器,工作量可想而知,是非常巨大的。

華為是如何作出方舟編譯器呢?據王博士介紹,華為在編譯器研發上的積累,可以追溯到2009年,華為海思研發起步時,當時吸引了第一批海內外研究人員加入,創建了編譯組。

2013年,華為自研並推出了用於基站的編譯器HCC,這也是華為編譯器框架構想的正式提出,也是方舟編譯器的前身。

2014年,Fred Chow( 周志德)加入華為並擔任華為編譯器技術首席科學家,建立了方舟編譯器的主架構。

2015年華為推出自研程式語言CM,2016年成立編譯器與程式語言實驗室,2019年華為正式推出方舟編譯器。

前前後後共計十年時間,經過了幾百位研究人員的努力,投入的資金也有幾億美元了。

王成錄博士表示,有了方舟編譯器優化的安卓系統在DNA上與蘋果iOS系統接近了。

華為下一步要做的工作就是推動生態建立,不斷將系統進行優化,讓用戶用上更純凈的安卓軟體。

方舟編譯器的四大技術亮點:

1、是一種多語言聯合優化編譯器,消除了跨語言調用的開銷

據王成錄博士介紹,當前Top級的應用95%以上都採用混合語言模式,涉及多種開發語言。

具體來說是程序的邏輯部分採用Java語言編寫,但為了增強安全性、可靠性、兼容性等能力,應用開發者可能會用C語言寫庫,供Java調用。

Java和C語言之間調用,是一定要通過接口去使用,這就會形成額外的性能開銷,而且相比於不需要調用的情況開銷很大。

而方舟編譯器則可以讓不同語言代碼在程序開發環境中環境中編譯成一套語言統一的可執行文件,在硬體的運行環境高效執行。

也就是說,方舟編譯器中吸納了現在安卓生態中的各種主流框架和庫,對不同語言做了統一的程序優化,直接編譯成機器指令。

2、程序運行時無需依賴虛擬機,減少資源占用,並且建立了高效的內存回收機制

Java語言有非常多的優勢,包括跨平台、分布式,安全性高等。

Java語言在設計之初,有一個Java語言開發包,其中有一個非常重要的東西,就是虛擬機。

虛擬機的作用是,無論使用什麼樣的硬體,都可以將其抽象成Java的運行環境,因此可以實現跨平台,無論是X86、ARM架構,還是CPU的機器都沒問題。

虛擬機的出現則帶來了一個問題,只要把Java語言開發包裝上,虛擬機就一定會分配好,占用額外的系統資源。

那麼ART虛擬機的作用是什麼呢?就是運行之前先把編譯準備好了,是一種靜態編譯。

通過引入了JIT編譯和AOT編譯能解決一部分效率問題,但是對於Java動態特性的部分仍做不到直接編譯,還是要解釋執行。

Java動態特性是為了降低開發難度,不需要開發者把所有的程序都寫好,只要能夠運行時實現調用就可以了。

這部分往往只能在運行時進行處理。

方舟編譯器最大的突破就在這裡,把動態的部分全部變為靜態編譯,其核心是一定要對Java語言動態特性非常深入理解。

「就像一個優秀的翻譯官一定對漢語言文學理解的非常到位,然後再對英語理解非常到位。

」Java是非常龐大的,需要對安卓現有的應用,可能會用到哪些庫,這些庫之間怎麼用理解,需要大量的分析運行狀態,才能夠將這些動態特性完成提前的編譯。

同時由於方舟編譯器統一將程序編譯為機器語言,所以也是跨硬體平台的。

早期C/C++需要開發者自己管理程序對系統內存的使用和釋放,影響開發效率。

Java的虛擬機模式提供了內存GC(垃圾回收)機制,在內存進行全局回收時,所有部分都要停下來,等待回收完成,這是產生隨機卡頓的重要原因。

方舟編譯器則是在編譯時,為程序配備及時回收的內存處理機制。

在程序運行的過程中都在實施處理,這是方舟編譯器又一個非常重要的技術突破。

3、可針對不同應用靈活編譯優化,翻譯出性能更佳的機器指令

一個翻譯器做得好不好,重要的衡量標準是能不能給程序帶來性能提升。

「編譯器和翻譯人類語言是一樣的,翻譯出來不太難,但是要翻譯的又快又好就太難了。

所以,當方舟編譯器整套邏輯通了之後,還需要做大量的優化和調整。

一方面需要對Java語言的了解再深入再細緻再重建;另一方面對機器指令順序結構理解要更清楚。

這兩個匹配的方法越準確,編譯器效率越高。

王成錄博士表示,「一個好的編譯器,開發者一行代碼都不需要修改,性能能提升10%到20%」。

現有的安卓編譯,大部分代碼在虛擬機環境運行,其創建遵循同一套「模板」,所以難以作深度的優化。

方舟編譯器可針對不同應用靈活編譯優化,每個應用編譯優化方案由開發者自己來定,分別形成不同應用優化後的機器碼。

王成錄博士表示,方舟編譯器從立項之初最理想的目標就是不需要開發者更改業務代碼,大家只需要通過華為的方舟編譯器做重新編譯就足夠了。

現在可能還需要開發者作一些對接,但很快隨著一些應用進入,這個目標很快就能實現。

4、開發者學習和使用成本低,打包時即編譯

方舟編譯器的又一亮點是,在應用開發構建的階段為開發者提供快速的集成編譯環境。

而現行安卓系統則是在用戶將應用下載後,在終端上實現編譯的。

據王成錄博士介紹,在同一硬體平台上,方舟編譯器讓系統操作流暢度提升了24%,系統響應速度提升44%,第三方應用操作流暢度提升60%。

在內存回收機制上方舟編譯器已經趕超了蘋果iOS系統。

方舟編譯器在今年4月隨著華為P30系列發布並宣布開源,華為接下已經為方舟編譯器制定好了上市計劃。

今年8月,在華為終端開發者大會上,華為將開源方舟編譯框架代碼,供開發者研究參考,11月的綠盟開發者大會上,華為將完整方舟編譯器代碼開源,讓開發者可編譯使用。

二、什麼是超級文件系統EROFS?

隨著存儲介質的進步,文件系統也在被驅動著演進。

文件系統對磁碟讀寫效率有著重要影響。

此前,華為曾推出過F2FS,2016年就在華為P9上應用了,而這個是面向用戶分區的。

今天要提的超級文件系統EROFS,則是針對系統分區的。

安卓系統採用的模式是EXT4,文件塊定長輸入,變長輸出,導致同一個文件塊的內容可能會出現在不同的磁碟塊中,讀取時造成了浪費。

超級文件系統EROFS的特點是:1、隨機讀寫的性能提升了20%;2、採用先進的壓縮算法,減少了2GB;3、採用只讀模式,讓系統更安全。

目前,EROFS文件系統已經開源,並已經合入Linux內核主線,在4.19版本發布。

據王成錄博士介紹,這一系統是華為研發人員一行行寫出來,100%原創。

其中,王成錄博士特別提到了壓縮算法,也是華為申請了專利的一項技術。

而EROFS文件系統的壓縮算法採用的則是文件塊變長輸入,磁碟塊定長輸出。

也就是說,將不同長度的文件塊壓縮成為統一大小的磁碟塊,這樣做的好處是不存在無效的讀取。

這樣做的好處是,隨機讀性能平均提升20%。

升級包大小下降約5%-10%,升級時間縮短了約20%。

三、EMUI未來演進的四大方向

在分享會上,智東西問到王博士,未來EMUI的優化方向有哪些時,王博士回答說主要集中在四個方面:

第一,基礎的性能仍然會持續投資,隨著硬體的變化,軟體的變化,上面應用的變化,對系統資源的應用永遠沒有夠的那一天,所以這個投資還會持續。

第二,體驗,雖然很多消費者對於華為UI吐槽非常多,但確實眾口難調。

王博士認為UI的背後一定有科學依據。

「我們現在找到的方向就是人因,我們在使用一個設備的時候一定要考慮設備本身的因素,環境因素和人的因素,這三個因素都考慮全了,在給消費者不同場景下恰當的反饋,這才是最好的體驗。

什麼是好的體驗?就是手的操作和眼睛看到的,跟大腦期望是協調的這就是好的操作。

現在很多的體驗設計是缺少建模的,一定要根據不同的人群年齡段,性別去構建人的模型,看多大的字體更合適,多大的對比度,對這一類的人群是合適的,所以這種模型會構建的越來越完善,變成系統裡面UI的算法,在不同場景下就會不一樣,這一塊華為努力在做。

第三,創新,這個創新指的是,隨著應用的不一樣,場景的不同,沒有必要讓所有的應用嚴格的按照這個軟體的過程,一步一步都走完。

打個比方,有個應用運行了無數次了,已經證明是一個非常高質量、安全的應用,就沒有必要每次都做那麼複雜的處理。

第四,中國在軟體工程領域非常缺人。

軟體開發人員經驗的積累,能不能沉澱為工具和平台很關鍵,在中國沒有出現過一個非常優秀的軟體工具平台。

在會上,王博士還特意提到了生態構建的重要性。

目前,在終端生態構建上,華為已建立三大開發者生態:以HiAI平台建立AI開發者生態;以Link Turbo和方舟編譯器建立應用生態;以HiLink和 HiCar建立連接生態。

此外,王成錄介紹說,今年Link Turbo將有突破,升級到2.0版本,將帶來對更多華為終端與更多應用的支持,讓更多用戶能享受極速流暢的網絡體驗。

結語:華為EMUI正在從系統底層進行優化

無論是方舟編譯器還是超級文件系統EROFS,都是華為在系統底層進行優化的重要一步。

無論是方舟編譯器還是超級文件系統EROFS,都是華為在系統底層進行優化的重要一步。

當然,安卓開發生態建立多年,其優勢在於開源和自由,而其劣勢則也正是由此帶來的無序性發展,導致了終端運行效率低下。

而作為頭部的智慧型手機廠商,華為推出這個內容的初心是想進一步提升安卓系統的流暢性,也是出於自身發展和產品性能和體驗提升的考慮。

不過,也正如王成錄博士所說的那樣,華為做方舟編譯器是想要幫安卓陣營解決實際問題的,僅僅華為一家之力是不夠的,還需要終端廠商、開發者等一起努力。


請為這篇文章評分?


相關文章 

P30黑科技揭曉 EMUI 9.1革新安卓編譯機制

4月11日,華為上半年度旗艦P30系列在上海正式發布,國內版EMUI 9.1系統的新特性也悉數亮相,其中最亮眼的要數「華為方舟編譯器」的「首秀」。華為表示使用這一工具能夠從程序編譯與運行機制上提...