解密方舟編譯器和EMUI未來四大演進方向

今年8月,華爲方舟編譯框架代碼將開源,11月完整方舟編譯器代碼開源。

4月25日消息,兩週前華爲年度第一款旗艦機P30,同時宣佈將操作系統升級爲EMUI9.1。 在發佈會上,華爲推出了方舟編譯器和超級文件系統EROFS兩大創新亮點。

由於發佈會時間限制,當時華爲僅僅用兩頁PPT粗略地介紹了這兩項技術作用。 據華爲方面表示,自發佈會後,華爲軟件OpenLab團隊的電話幾乎要被打爆了,很多開發者都想要了解方舟編譯器更多的信息。

 

今天,智東西與少數媒體參與了華爲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,都是華爲在系統底層進行優化的重要一步。 當然,安卓開發生態建立多年,其優勢在於開源和自由,而其劣勢則也正是由此帶來的無序性發展,導致了終端運行效率低下。 而作爲頭部的智能手機廠商,華爲推出這個內容的初心是想進一步提升安卓系統的流暢性,也是出於自身發展和產品性能和體驗提升的考慮。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章