創(chuàng)業(yè)詞典網(wǎng) 創(chuàng)業(yè)知識學習分享
在前不久華為P30系列新品發(fā)布會上,華為消費者事業(yè)群 CEO余承東提到過一項很厲害的技術(shù),但被他一嘴帶過,這項技術(shù)就是方舟編譯器。
他提到,方舟編譯器可以提升Android系統(tǒng)內(nèi)應(yīng)用的編譯效率,過去Android應(yīng)用一邊編譯一邊執(zhí)行,而方舟編譯器將轉(zhuǎn)變?yōu)槿虣C器預(yù)編譯然后高效執(zhí)行。
華為宣布,使用方舟編譯器最終將提升24%的系統(tǒng)操作流暢度,提升44%的系統(tǒng)響應(yīng)能力,以及提升60%的三方應(yīng)用操作流暢度,“Android系統(tǒng)將比iOS系統(tǒng)還要流暢”。
這一技術(shù)將正式開源給開發(fā)者,讓所有人都可以使用方舟編譯器對應(yīng)用預(yù)編譯。
據(jù)華為消費者事業(yè)群軟件部總裁王成錄向包括PingWest品玩在內(nèi)的媒體介紹,自發(fā)布會結(jié)束后,華為軟件內(nèi)部團隊的電話幾乎被打爆,很多開發(fā)者都想了解方舟編譯器更多的信息。
這個技術(shù)到底厲害在哪?它哪里厲害?在了解方舟編譯器的同時,我們需要先了解一下Android的編譯流程。
編譯器的定義為:將“一種語言(通常為高級語言)”翻譯成能直接被計算機或虛擬機執(zhí)行的目標代碼,編譯器的效率將直接影響程序運營性能/效率。
而Android系統(tǒng)內(nèi)部絕大多數(shù)應(yīng)用的邏輯部分都使用Java來編寫,但為了保證安全性、可靠性、兼容性等不同的需求,很多開發(fā)者會使用不同的語言來編寫其他的庫,最終供Java調(diào)用。
也就是說在Android系統(tǒng)內(nèi)部,不同模塊可能采用了不同的語言編寫,而為了達對各個模塊的互相理解,相互調(diào)用則會帶來系統(tǒng)資源上的內(nèi)耗。
編譯器充當?shù)氖?ldquo;翻譯”功能。
將不同計算機的高級語言轉(zhuǎn)化為機器可以理解、可以執(zhí)行的機器語言,由不同的代碼替換為機器可讀懂的“0101”。
這體現(xiàn)在軟件開發(fā)的部分。
而編寫應(yīng)用的Java代碼能夠如何被Android系統(tǒng)理解,直接影響了程序的執(zhí)行效率。
編譯器的性能體現(xiàn)在是否可以將一種語言完美地解釋為可執(zhí)行的高級語言。
比如說,一個中英文翻譯,她既能理解中文成語的博大精深,也可以譜寫出英文語境中優(yōu)美的句子。
乍一看,只要有一個非常好的“翻譯官/編譯器”就可以解決所有的問題。
其實在編寫Android系統(tǒng)的Java語言內(nèi)部,還引入了虛擬機的機制。
從Android系統(tǒng)誕生那天起,就選擇了使用Java作為基礎(chǔ)的編寫語言。
據(jù)王成錄介紹,Java語言有非常多的優(yōu)勢,比如說它跨平臺、分布式,安全性做得都很好。
而Java語言設(shè)計當初就有一個JDK,叫Java語言的開發(fā)包,開發(fā)包中就包含了一項重要的功能,稱之為虛擬機。
虛擬機主要針對硬件環(huán)境。
有了這個虛擬機以后,接下來無論是什么樣的硬件,Java語言不需要管了,它的功能是將其抽象成Java的運行環(huán)境,因此Java實現(xiàn)了跨平臺——不管是X86機器,ARM機器,還是其他CPU的機器都沒有問題。
但這也導致了新的問題:無論任何一個機器,虛擬機資源必須分配好,所以占用了額外的系統(tǒng)資源。
也就是說,一個應(yīng)用先由Java編寫成可執(zhí)行文件(Dex碼),再進入系統(tǒng)由虛擬機虛擬環(huán)境解釋執(zhí)行為機器可讀的二進制碼。
兩道工序的執(zhí)行效率也就是應(yīng)用在系統(tǒng)內(nèi)被執(zhí)行使用的執(zhí)行效率。
打開使用一個軟件應(yīng)用,快不快,體驗好不好,就在于這兩道工序效率如何。
實際上Android的演進解釋了這套編譯邏輯上帶來的效率問題。
王成錄提到,Android 1.0的時候,基本完全使用Dalvik虛擬機,邏輯就是解釋一句執(zhí)行一句,效率非常慢。
Android 2.2的時候,當系統(tǒng)發(fā)現(xiàn)應(yīng)用內(nèi)有有一段代碼頻繁執(zhí)行的時候,系統(tǒng)將直接編譯解釋,下次調(diào)用就不用重復解釋,直接執(zhí)行上次解釋出的機器指令,這叫JIT(即時,Just In Time)編譯。
但是這個應(yīng)用一退出了以后, 這段機器指令也消失了。
Android 5.0的時候,一個非常大的變化是引入了ART虛擬機(Android Run Time),采用AOT編譯器(Ahead Of Time),就是運行之前,將部分代碼編譯解釋好為二進制語言,轉(zhuǎn)為靜態(tài)編譯,極大地提升了效率。
但對于那些Java動態(tài)特性的部分,還有其他部分,仍然做不到直接編譯,還是要解釋執(zhí)行。
前面已經(jīng)提到,一個應(yīng)用由C語言編譯出來的庫,加上Java語言本身的編譯以及虛擬機的編譯,當一個應(yīng)用發(fā)生復雜的邏輯關(guān)系調(diào)用時,解釋和編譯這些代碼需要通過接口去使用,因此產(chǎn)生很大的開銷。
“一個數(shù)據(jù),如果沒有跨語言的協(xié)同,和有跨語言協(xié)調(diào)來比,效率差別很大。
”王成錄說。
方舟編譯器是直接將應(yīng)用打包成二進制碼輸送到系統(tǒng)內(nèi)執(zhí)行,將所有編譯轉(zhuǎn)為靜態(tài)編譯。
“有了方舟編譯器后如何實現(xiàn)的呢?相當于,我不論你這個業(yè)務(wù)邏輯是Java寫的還是庫是用C寫的,都沒有問題,用方舟編譯器做了統(tǒng)一的程序優(yōu)化以后直接編譯成機器指令。
用方舟編譯器做出來的APK,下載到手機上不需要再編譯了。
這就是巨大的差別。
”“最難啃的骨頭”王成錄介紹,華為方舟編譯器有四大技術(shù)亮點。
第一,首個多語言聯(lián)合優(yōu)化的編譯器,消除了跨語言調(diào)用開銷;第二,程序運行時無需依賴虛擬機,減少了資源占用,同時實現(xiàn)了高效的內(nèi)存回收機制;第三,方舟編譯器可以針對不同應(yīng)用靈活編譯優(yōu)化;第四,對于開發(fā)者學習和使用成本非常低。
方舟編譯器最大的突破是將所有編譯的部分,包括靜態(tài)動態(tài)的部分全部變?yōu)殪o態(tài)編譯出的二進制代碼。
眾所周知,Java語言系統(tǒng)非常龐大。
這就需要對Android現(xiàn)有的應(yīng)用,可能會用到哪些庫,這些庫之間怎么用理解,需要大量的分析運行狀態(tài),才能夠?qū)⑦@些動態(tài)特性完成提前的編譯。
由于是機器語言,所以還涉及到了跨硬件平臺開發(fā)。
這就需要對所有開發(fā)環(huán)境、系統(tǒng)內(nèi)部解釋環(huán)境的編譯及語言、整體架構(gòu)和邏輯理解非常深入。
“就像一個優(yōu)秀的翻譯官一定對漢語言文學理解的非常到位,然后再對英語理解非常到位。
”王成錄說,一個翻譯器做得好不好,重要的衡量標準是能不能給程序帶來性能提升。
“編譯器和翻譯人類語言是一樣的,翻譯出來不太難,但是要翻譯的又快又好就太難了。
”邏輯通順以后,還需要大量的優(yōu)化和調(diào)整。
一方面對Java語言的了解再深入再細致再重建;另外一方面,對機器指令順序結(jié)構(gòu)理解要非常清楚才行,這兩個匹配的方法越準確,編譯器效率越高。
“一個好的編譯器,開發(fā)者一行代碼都不需要修改,性能能提升10%到20%。
”據(jù)PingWest品玩了解,方舟編譯器是個通用技術(shù),基于目前ARM指令集開發(fā)、適用于所有ARM芯片平臺。
也就是說,經(jīng)過方舟編譯器編譯的應(yīng)用,再經(jīng)過其他品牌廠商的適配,就可以適用于包括小米、OPPO、vivo等其他品牌手機上的Android系統(tǒng)。
如果沒有適配,則還是按照普通app效率執(zhí)行。
據(jù)王成錄介紹,華為在2009年開始準備編譯器研發(fā)方面的工作,從華為海思研發(fā)起步時,2013年華為HCC自研編譯器有了雛形,它吸引了第一批海內(nèi)外研究人員加入,創(chuàng)建了編譯組。
隨后,華為“2012年實驗室”成立,2016年正式設(shè)立了編譯器與編程語言實驗室。
直到今天,華為才算正式推出了方舟編譯器。
王成錄說,編譯器真的是一個“板凳要坐十年冷”的工程,“我們穩(wěn)得住才能做下來,非常的復雜。
”據(jù)PingWest品玩了解,方舟編譯器開發(fā)人員有一半來自于消費者BG,一半來自于“2012實驗室”,投入研發(fā)人員幾百人。
方舟編譯器是華為發(fā)布的最新的“黑科技”,但華為不是無意為之。
王成錄介紹說,華為一直在圍繞性能這條線找最主要的矛盾。
比如隨著應(yīng)用的豐富,手游越來越流行,華為針對游戲做了GPU Turbo。
把游戲問題解決后,發(fā)現(xiàn)還有很多應(yīng)用需要改進網(wǎng)絡(luò)實時連接,所以華為發(fā)布了Link Turbo,“這個發(fā)揮了華為的優(yōu)勢,我們對網(wǎng)絡(luò)非常熟悉,我們做了聚合把端和網(wǎng)絡(luò)的連接。
”王成錄說,方舟編譯器是最后的、最難啃的骨頭,但華為把它攻克了。
給Android系統(tǒng)動手術(shù)華為方舟編譯器,只是華為改造Android性能的一部分。
簡而言之,華為在系統(tǒng)軟件上針對用戶使用中的痛點問題進行有針對性的優(yōu)化。
比如EMUI 5.0主要解決Android系統(tǒng)卡頓問題,EMUI 8.2上線了GPU Turbo主攻游戲性能受限問題,EMUI9.0上線了Link Turbo主攻網(wǎng)絡(luò)覆蓋不均問題,EMUI 9.1則上線了方舟編譯器和超級文件系統(tǒng)EROFS,針對Android流暢度不足問題。
鋪開Android系統(tǒng)全棧圖,華為針對每一項Android系統(tǒng)內(nèi)部模塊進行改造優(yōu)化。
華為將Android系統(tǒng)分為生態(tài)外部、框架層、中間件、硬件抽象和內(nèi)核等多個層面進行全鏈條優(yōu)化。
王成錄介紹,EMUI 5.0圍繞核心組件內(nèi)的進程管理和文件系統(tǒng)進行優(yōu)化。
“我們最終把F2FS(專門為Flash閃存定做的操作系統(tǒng))這個系統(tǒng)放在5.0上了,發(fā)現(xiàn)上手機的碎片整理能力比原來EXT系列的文件系統(tǒng)要高了很多。
”而EMUI 8.0的Link Turbo圍繞框架層的通信、中間件的連接以及芯片驅(qū)動的網(wǎng)絡(luò)管理做優(yōu)化。
“這是在整個圖形中間件、在內(nèi)存管理,和在進程上做完整的優(yōu)化技術(shù)。
”除去方舟編譯器,EMUI 9.0上線的另一重大技術(shù)是超級文件系統(tǒng)EROFS,這個文件系統(tǒng)是解決系統(tǒng)分區(qū)文件存儲和管理的問題,圍繞Android系統(tǒng)內(nèi)核安全管理和內(nèi)存管理進行改造。
王成錄提到,所有系統(tǒng)初始化的文件存在系統(tǒng)分區(qū),以前系統(tǒng)分區(qū)只有初始化啟動寫入一次后,除系統(tǒng)升級以外,永遠不允許再次寫入。
原始的系統(tǒng)分區(qū)給只讀只寫加了兩道鎖。
如果寫了以后,就意味著系統(tǒng)已經(jīng)被攻破。
但文件系統(tǒng)對磁盤讀寫效率有著重要影響,據(jù)華為介紹,超級文件系統(tǒng)EROFS采用了可讀設(shè)計,使用了壓縮算法,Android系統(tǒng)隨機讀性能平均提升20%,升級包大小下降約5%-10%,升級時間縮短了約20%。
“這個文件系統(tǒng)是只讀的,既解決安全性問題,又解決性能效率問題。
這個系統(tǒng)是華為百分之百原創(chuàng)的,我們這個團隊能夠把這件事情做出來,在中國也是第一次。
”走入無人區(qū)據(jù)PingWest品玩了解,華為此前在5萬臺華為手機上秘密試驗F2FS文件系統(tǒng)性能的影響,為此王成錄還和余承東簽了“軍令狀”——因為測試修改手機文件系統(tǒng)對于手機安全有極大的隱患,一旦發(fā)生意外,將對手機品牌造成很嚴重的影響。
而一旦成功,將驅(qū)動Android系統(tǒng)帶來文件可讀取本質(zhì)和讀寫性能方面的變革。
一個問題是,華為給Android動了這么多的手術(shù),這件事情Google怎么看?Google是華為的戰(zhàn)略合作伙伴,華為和Google一直保持著積極持續(xù)的溝通。
王成錄說,“我們在安卓底層的優(yōu)化工作,很多其實都體現(xiàn)在了Android的大版本里,作為了產(chǎn)業(yè)的共同資產(chǎn)。
比如‘天生快,一生快’里的很多系統(tǒng)機制。
F2FS文件系統(tǒng)也為多個廠家使用。
”根據(jù)王成錄的說法,Google很快就注意到了華為在測試F2FS文件系統(tǒng),Google的態(tài)度是“在中國用沒有問題。
”這次進一步推出方舟編譯器和超級文件系統(tǒng)EROFS,我們推測華為的目標是,推動這些改變進入Google的開源社區(qū),借此進駐到系統(tǒng)內(nèi)部。
華為過去幾波改造都是推動終端側(cè)的改革。
華為提到,這就像是改造人的身體機能。
同時,華為還想保證市場上的水和糧食的供應(yīng)是好的——通過華為HiAI和HiLink,推動外部生態(tài)的繁榮和開放。
方舟編譯器未來使命就在這里。
“這是華為非常完整的邏輯,我相信我們后續(xù)仍然會圍繞全棧,因為下層的芯片還要不斷的演進,上面的應(yīng)用也在不斷發(fā)展變化,整個系統(tǒng)優(yōu)化調(diào)整還會持續(xù)。
”有了方舟編譯器編譯以后,就不需要用Java的虛擬機了,它改變了過去Android系統(tǒng)內(nèi)部的代碼解釋機制。
王成錄說,“海思做了芯片以后,需要有自己的編譯器才能真正發(fā)揮芯片的能力。
”他還提到,方舟編譯器也可以適用于ICT行業(yè)其他系統(tǒng),未來可基于具體芯片指令集進行開發(fā)。
提到軟件研發(fā),王成錄流露出了個人情懷,“我覺得中國這么大量的軟件研發(fā)人員,但國內(nèi)一直缺乏領(lǐng)先的系統(tǒng)軟件。
系統(tǒng)軟件指的是什么?基本上是操作系統(tǒng),數(shù)據(jù)庫、編譯器。
但實際上還有一個,就是編程框架和編程語言。
實際上華為走到編譯器領(lǐng)域,是非常重要的部分,這個編譯器再發(fā)展,就可能變成編程框架和編程語言。
”編譯器似乎是一個開始。
在軟件行業(yè),華為正在走入無人區(qū)。
下一篇:阿里香港二次上市 回歸真的"只是時間問題"? 下一篇 【方向鍵 ( → )下一篇】
上一篇:小米5G新品發(fā)布會 小米國內(nèi)首款5G手機發(fā)布 上一篇 【方向鍵 ( ← )上一篇】
快搜