華為王成錄:解密方舟編譯器和EMUI未來四大演進方向!
今年8月,華為方舟編譯框架程式碼將開源,11月完整方舟編譯器程式碼開源。
據“智東西”微信公眾號(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,都是華為在系統底層進行優化的重要一步。 當然,安卓開發生態建立多年,其優勢在於開源和自由,而其劣勢則也正是由此帶來的無序性發展,導致了終端執行效率低下。 而作為頭部的智慧手機廠商,華為推出這個內容的初心是想進一步提升安卓系統的流暢性,也是出於自身發展和產品效能和體驗提升的考慮。