為什么越來(lái)越多企業(yè)正在往ARM平臺(tái)遷移?

作者簡(jiǎn)介:知乎大V OwlLite,中科院自動(dòng)化所 模式識(shí)別與智能系統(tǒng)學(xué)博士,現(xiàn)任圖像算法工程師。

為什么越來(lái)越多企業(yè)正在往ARM平臺(tái)遷移?

1.架構(gòu)變遷

說(shuō)到CPU架構(gòu),我們可能必然會(huì)提到CISC(復(fù)雜指令集,比如桌面端采用的X86系列)和RISC(精簡(jiǎn)指令集,比如移動(dòng)端廣泛采用的ARM系列)。理論上,RISC 相比于 CISC(Intel 和 AMD) 處理器,指令譯碼和流水線的實(shí)現(xiàn)精簡(jiǎn)化,可以在芯片上使用更少的三極管,換取更多的寄存器和流水線性能 ( 多線程 / 并發(fā)能力,高吞吐 ) 。過(guò)去,由于應(yīng)用主要是跑在對(duì)功耗不敏感的X86架構(gòu)CPU上,人們對(duì)該架構(gòu)下的應(yīng)用進(jìn)行了大量的優(yōu)化,ARM平臺(tái)的性能優(yōu)勢(shì)并沒(méi)有充分的發(fā)揮出來(lái)。最近數(shù)年,轉(zhuǎn)機(jī)出現(xiàn)了,ARM平臺(tái)在移動(dòng)端(比如手機(jī))和物聯(lián)網(wǎng)終端(比如家用智能設(shè)備)的大規(guī)模使用,使得對(duì)該平臺(tái)算法和軟件的性能優(yōu)化變得越來(lái)越充分(近年來(lái),開(kāi)源社區(qū)對(duì)ARM平臺(tái)的支持已經(jīng)足夠用戶將X86應(yīng)用在合理的投入下遷移到ARM平臺(tái),LLVM等基礎(chǔ)工具大部分可以找到支持ARM平臺(tái)的版本)。結(jié)合既有的并發(fā)能力優(yōu)勢(shì),使得ARM 平臺(tái)的服務(wù)器在一些應(yīng)用場(chǎng)景下顯得頗有吸引力。另外,對(duì)于移動(dòng)應(yīng)用,在云端采用ARM平臺(tái)服務(wù)器,還可以做到端云同構(gòu),節(jié)省開(kāi)發(fā)調(diào)試成本。

在這樣的背景下,業(yè)界大廠紛紛推出ARM平臺(tái)服務(wù)器CPU. ARM平臺(tái)服務(wù)器CPU在云端服務(wù)器啃下一塊市場(chǎng)也是必然。2019年,華為推出了第二代ARM平臺(tái)數(shù)據(jù)中心處理器鯤鵬920芯片(預(yù)期今年推出其升級(jí)版鯤鵬930),采用7nm制程,最高支持64個(gè)內(nèi)核,工作頻率高達(dá)2.6 GHz,支持8通道DDR4,以及一對(duì)100G RoCE端口。并且推出就自產(chǎn)自銷上華為云。從配置來(lái)看,其設(shè)計(jì)特別強(qiáng)調(diào)高吞吐能力,目前性能仍處于ARM平臺(tái)服務(wù)器CPU的第一梯隊(duì)。

2.為什么需要做服務(wù)遷移

越來(lái)越多的服務(wù)轉(zhuǎn)向ARM云平臺(tái)是一個(gè)趨勢(shì)。ARM架構(gòu)芯片核的面積僅為X86核的1/7,這也意味著在單位面積下,ARM可以集成更多的核心——實(shí)際數(shù)據(jù)是四倍以上。這意味著ARM架構(gòu)CPU 的眾核架構(gòu)橫向擴(kuò)展的方式會(huì)更符合分布式業(yè)務(wù)的需求。如果是新的應(yīng)用,可以直接選擇鯤鵬云平臺(tái)進(jìn)行開(kāi)發(fā),充分利益ARM云平臺(tái)的優(yōu)勢(shì)。但是當(dāng)前,絕大部分云平臺(tái)應(yīng)用都跑在于X86架構(gòu)CPU上,需要將服務(wù)進(jìn)行某種形式的“重構(gòu)”才能運(yùn)行在ARM云平臺(tái)上。其主要原因在于,用戶在往ARM平臺(tái)遷移時(shí)需要處理指令集上的差異,才能使得原來(lái)運(yùn)行在x86架構(gòu)下的程序能夠平穩(wěn)運(yùn)行于ARM平臺(tái),完成遷移。

為什么越來(lái)越多企業(yè)正在往ARM平臺(tái)遷移?

<指令集差異>

這些指令集的差異,使得像C/C++, Go 等編譯型語(yǔ)言寫(xiě)的應(yīng)用程序,需要采用ARM64(aarch64)編譯器重新編譯后才能運(yùn)行。這是因?yàn)榫幾g型語(yǔ)言先要被“翻譯”成匯編,然后轉(zhuǎn)換成二進(jìn)制指令。而ARM平臺(tái)的鯤鵬處理器和X86架構(gòu)的處理器,其匯編和二進(jìn)制指令不一樣,導(dǎo)致一方的可執(zhí)行程序不能直接移植到另一個(gè)平臺(tái)運(yùn)行。像Java, Python 等本身支持跨平臺(tái)的解釋型語(yǔ)言,如果原應(yīng)用不依賴C/C++語(yǔ)言編譯的公共組件(大部分情況下),則可以直接運(yùn)行在ARM平臺(tái)上。對(duì)于剩下的極少部分的匯編語(yǔ)言,則需使用ARM指令集改寫(xiě)一遍。比如在X86架構(gòu)下,128位按位做and運(yùn)算:

PAND xmm1 , xmm2/m128

對(duì)于ARM架構(gòu)處理器,可以替換為NEON指令:

AND Vd., Vn., Vm.

為什么越來(lái)越多企業(yè)正在往ARM平臺(tái)遷移?

<三類語(yǔ)言的服務(wù)遷移路徑>

以上這些遷移路徑說(shuō)明,傳統(tǒng)X86架構(gòu)服務(wù)的遷移雖然會(huì)帶來(lái)潛在的優(yōu)勢(shì),但遷移也是有成本的,需要投入時(shí)間對(duì)軟件/服務(wù)進(jìn)行對(duì)應(yīng)的更改和測(cè)試。

3.鯤鵬社區(qū)助力服務(wù)遷移

ARM平臺(tái)的性能優(yōu)勢(shì)和特點(diǎn)是幫助其從巨大的云計(jì)算市場(chǎng)中吃下一塊的基礎(chǔ)。至于能以多快的速度吃下多大的市場(chǎng),其決定性因素的可能并不是這些架構(gòu)和制程決定技術(shù)優(yōu)勢(shì),而是用戶的選擇,具體地,也就是用戶的遷移成本相對(duì)于可能帶來(lái)的優(yōu)勢(shì)的比較——如果只需要修改少量的代碼就可以將服務(wù)轉(zhuǎn)換到支持更高并發(fā)的ARM云平臺(tái)上,這對(duì)于那些對(duì)吞吐量尤其敏感的后端服務(wù)來(lái)說(shuō),何樂(lè)而不為呢。

為了降低用戶的遷移成本,華為花費(fèi)了相當(dāng)?shù)牧α拷ㄔO(shè)了華為云學(xué)院和鯤鵬社區(qū),指導(dǎo)和幫助用戶進(jìn)行應(yīng)用遷移方面的工作。并且推出了鯤鵬開(kāi)發(fā)套件(包括掃描評(píng)估工具Dependency Advisor, 遷移工具Porting Advisor, 和性能優(yōu)化工具Tuning Kithttps://support.huaweicloud.com/ug-pa-kunpengdevps/kunpengpt_06_0004.html)幫助用戶評(píng)估工程的可移植性,檢查用戶軟件 C/C++ 源碼,識(shí)別需要修改的部分并提供修改建議和性能調(diào)優(yōu)。而且這些內(nèi)容中的絕大部分對(duì)用戶來(lái)說(shuō)是免費(fèi)獲取的。在注冊(cè)華為云之后,用戶可以在華為云端實(shí)驗(yàn)室(https://lab.huaweicloud.com/)免費(fèi)使用華為云資源(ECS等)進(jìn)行應(yīng)用往ARM云平臺(tái)遷移的實(shí)驗(yàn)。

以相對(duì)更耗時(shí)更復(fù)雜的C/C++應(yīng)用遷移為例,可選擇云端實(shí)驗(yàn)室中的“通過(guò)鯤鵬工具鏈將X86 C/C++代碼遷移到鯤鵬平臺(tái)”實(shí)驗(yàn)進(jìn)行體驗(yàn)。用戶在該實(shí)驗(yàn)中首先預(yù)置實(shí)驗(yàn)環(huán)境,免費(fèi)獲取實(shí)驗(yàn)所需的鯤鵬ECS、EIP, VPC, 安全組等資源(可以通過(guò)開(kāi)發(fā)者免費(fèi)試用區(qū)https://activity.huaweicloud.com/free_test/index.html?#individual獲取更多更長(zhǎng)時(shí)間的資源試用)。

為什么越來(lái)越多企業(yè)正在往ARM平臺(tái)遷移?

然后可以依照提示,在網(wǎng)頁(yè)端中通過(guò)公網(wǎng)EIP登錄分配的ECS之后,修改教程中提供的C/C++應(yīng)用包的編譯腳本和相關(guān)代碼段,重新編譯即可完成安裝、驗(yàn)證和測(cè)試。

為什么越來(lái)越多企業(yè)正在往ARM平臺(tái)遷移?

<實(shí)驗(yàn)體驗(yàn)環(huán)境>

4.服務(wù)遷移實(shí)戰(zhàn)

在上文的體驗(yàn)例子中,可以完整的經(jīng)歷如下典型的C/C++工程遷移過(guò)程的關(guān)鍵部分:

為什么越來(lái)越多企業(yè)正在往ARM平臺(tái)遷移?

包括修改編譯腳本;修改宏定義,增加aarch64 架構(gòu)的宏定義;修改編譯宏分支,確保 aarch64 架構(gòu)下使能 SIMD 的 NEON 特性;修改aarch64 架構(gòu)下的內(nèi)聯(lián)匯編指令;重新編譯源碼并安裝測(cè)試。

對(duì)于C/C++工程遷移的鯤鵬ARM平臺(tái)移植,可能會(huì)碰到如下的典型問(wèn)題:

1.編譯時(shí)gcc參數(shù)設(shè)置需要調(diào)整,這方面的問(wèn)題可以參考gcc官方文檔(https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html)

2.編譯時(shí)找不到函數(shù)、缺少庫(kù)文件等??梢酝ㄟ^(guò)安裝鯤鵬ARM平臺(tái)兼容的依賴庫(kù)來(lái)解決。目前來(lái)看,隨著ARM平臺(tái)的發(fā)展,這種情況下的問(wèn)題解決不了的可能性越來(lái)越小。如果你的C/C++工程本身是在Linux平臺(tái)編寫(xiě)/編譯的,那這種情況還會(huì)相比于從windows平臺(tái)遷移少很多

3.開(kāi)源項(xiàng)目庫(kù)不支持 ARM 架構(gòu),這種情況較就更少了,一般發(fā)生在較舊的項(xiàng)目代碼。面對(duì)這種情況可能不得不尋找替代組建或者修改自己的代碼以消除依賴。

4. 編譯時(shí)提示代碼錯(cuò)誤,比如在上面的體驗(yàn)例子中如果不修改相關(guān)類型的宏定義就會(huì)出現(xiàn),解決方法于上面體驗(yàn)例子中類似。

5. 需要重寫(xiě)內(nèi)聯(lián)匯編語(yǔ)句,如上文所述,這是由于ARM與X86架構(gòu)指令集不同導(dǎo)致的??赡苄枰褂肁RM指令修改每一條相關(guān)代碼才能解決。

至于云端常見(jiàn)但由于Java的跨平臺(tái)性,遷移更為容易的Java Web應(yīng)用,可以通過(guò)云學(xué)院提供的“基于華為云鯤鵬彈性云服務(wù)器部署Web應(yīng)用”教程體驗(yàn),其過(guò)程中不涉及對(duì)代碼的修改,這類應(yīng)用的遷移相比于C/C++類應(yīng)用要容易得多。

對(duì)于將軟件遷移到ARM平臺(tái)來(lái)說(shuō),大部分情況下只要建立軟件開(kāi)發(fā)編譯環(huán)境-編譯軟件-出現(xiàn)錯(cuò)誤-修復(fù)bug的流程就可以解決問(wèn)題,這跟很多人碰到過(guò)的將Windows平臺(tái)軟件遷移到Linux平臺(tái)運(yùn)行差不多。對(duì)于更復(fù)雜的應(yīng)用軟件,比如數(shù)據(jù)庫(kù)、翻譯程序,可能需要修改匯編語(yǔ)言。當(dāng)然現(xiàn)在很多數(shù)據(jù)庫(kù)采用的是開(kāi)源軟件的或者本身支持多平臺(tái)的軟件,這類問(wèn)題也變得越來(lái)越容易解決。

當(dāng)然,實(shí)際的業(yè)務(wù)遷移到鯤鵬ARM云平臺(tái),涉及的程序語(yǔ)言和軟件依賴會(huì)相當(dāng)復(fù)雜。比如某大叔據(jù)搜索系統(tǒng)的業(yè)務(wù)軟件棧:

為什么越來(lái)越多企業(yè)正在往ARM平臺(tái)遷移?

這里的mysql, redis, Apache和Hadoop都可以通過(guò)鯤鵬代碼遷移工具找到鯤鵬ARM平臺(tái)兼容的版本,其遷移自然不是問(wèn)題。對(duì)于其他暫不兼容的,比如kudu, Impala和Ceph,其官方發(fā)布已經(jīng)提供了完整的或者大部分功能的aarch64平臺(tái)支持(https://issues.apache.org/jira/browse/KUDU-3007, https://issues.apache.org/jira/browse/IMPALA-9376), 如果升級(jí)到支持aarch64的新版后調(diào)試通過(guò),那移植到aarch64平臺(tái)也不會(huì)有問(wèn)題。對(duì)于剩下的不兼容的,則需要找替代或者修改代碼了。

從上面的實(shí)例可以看出,如果你的業(yè)務(wù)軟件棧大量采用開(kāi)源軟件并且保持了版本的更新(大家都意識(shí)到aarch64平臺(tái)變得越來(lái)越流行,需求越來(lái)越多,順勢(shì)推出了該平臺(tái)的版本),那么遷移的成本就會(huì)比較低。相反,如果采用了較老的軟件或者不支持aarch64的商業(yè)軟件,那就需要花費(fèi)比較多的精力,甚至不得不采取繞過(guò)依賴的方案。這也就意味著,僅從實(shí)際業(yè)務(wù)軟件棧的情況來(lái)看,就有部分業(yè)務(wù)并不適合遷移,企業(yè)需要根據(jù)自己的實(shí)際情況量力而行。因此,企業(yè)業(yè)務(wù)遷往ARM云平臺(tái)雖然是一個(gè)趨勢(shì),但X86云平臺(tái)在未來(lái)相當(dāng)長(zhǎng)一段時(shí)間并不會(huì)消失,而是會(huì)繼續(xù)占有相當(dāng)?shù)氖袌?chǎng),與ARM云平臺(tái)并駕齊驅(qū)。

鯤鵬開(kāi)發(fā)者系列課程傳送門(mén)在此,良心知識(shí)不付費(fèi),參與回帖互動(dòng)還有獎(jiǎng)品拿,吐槽建議都闊以:http://suo.im/5X8M85

極客網(wǎng)企業(yè)會(huì)員

免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書(shū)面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開(kāi)相關(guān)鏈接。

2020-04-22
為什么越來(lái)越多企業(yè)正在往ARM平臺(tái)遷移?
作者簡(jiǎn)介:知乎大V OwlLite,中科院自動(dòng)化所 模式識(shí)別與智能系統(tǒng)學(xué)博士,現(xiàn)任圖像算法工程師。

長(zhǎng)按掃碼 閱讀全文