Categories
程式開發

最終,我決定將代碼遷出x86架構!


如今,我們幾乎所有軟件都建立在x86 架構之上,在互聯網漫長的演進過程中,各大公司拼盡全力在迭代上層架構、優化整體性能,開發者們該用的、能用的招儿想必都用上了,接下來呢?如果底層架構不出現大的革新,接下來還有什麼方法大幅提升生產力?各位開發者還有其他選擇嗎?

從大型機到x86架構,計算的下一個拐點在哪?

上世紀60年代,IBM發布了System360這樣的大型計算機,促進了人類社會巨大的進步,衛星氣象預測、登月等活動都依賴於這樣的大型計算機完成。如今,銀行的核心系統仍然在運行著這種大型機。但是,這種大型機有一個很大的問題:只有比較富裕的機構才能用得起,比如銀行。

於是,上世紀70年代,DEC解決了這個問題,這是一個值得注意的拐點:研發人員用小型機發布了PDP-11,大幅度降低了大型機的成本,讓大量企業能夠用得起這樣的計算機,這是一次巨大的進步。

隨後,英特爾出現了,不光企業能用計算機,個人也能用了,每個人桌面上都有一台電腦。上世紀70年代,依賴於英特爾x86芯片的PC機出現了,其最大的貢獻就是讓計算機從企業走向個人。

發展至今,幾乎所有軟件均建立在x86架構之上 ,隨著近二十年中國互聯網的快速演進,各大公司在上層架構的設計與優化方面投入了大量精力,在系統整體性能方面,該用的、能用的都用上了。

如今,新的拐點出現了:計算已經變成手持的了,每個人手上都有智能終端。不僅如此,應用場景也在變:移動應用逐漸雲化,5G催生了雲遊戲的誕生;Web應用的加密性越來越重要,HTTPS流量越來越大;大數據分佈式並行計算成為主流等,這些都讓x86架構的不足逐漸顯露出來。

以移動應用運行為例,傳統的x86平台依賴指令翻譯運行安卓應用,性能損耗大,兼容性也無法保障。此外,服務器端有很多應用需要測試,過去的做法是真機測試,或者手機開發仿真環境,這種做法的資源靈活度低、故障率高、可靠性和易用性都比較差。而真正的革新可能還是需要自底向上,甚至直達芯片級。 x86架構未來能滿足開發者的訴求嗎?有可能,因為 Intel 一直是比較開放的,也投入了很多力量在社區建設,包括開源上面。

但是,企業和開發者需要更多選擇。單位芯片面積算力更強、眾核架構設計的ARM開始被注意。一個ARM核的面積僅為x86核的七分之一,同樣的芯片尺寸下,ARM的核數是x86的4倍以上,由於芯片的物理尺寸有限制,無法無限制增加,ARM的眾核橫向擴展更符合分佈式業務需求。

2019年,華為鯤鵬920處理器正式發布,這是一個基於ARM架構,採用最新製程工藝製造,可以支持32/48/64個內核,主頻可達2.6GHz,支持8通道DDR4、PCIe 4.0和100G RoCE網絡的處理器。

相較於x86架構,華為鯤鵬處理器的優勢較為明顯:

1、多核,性能提升20%,雲應用支持度更好,更靈活;

2、支持8個DDR通道,傳統CPU僅6個,吞吐率提升25%;

3、SOC芯片,一顆芯片四合一,包含CPU、南橋、網卡和SAS控制器,效能提升30%;

4、集成壓縮、加密、重刪等硬件加速引擎的處理器,大大提升應用的性能,釋放更多CPU算力。

值得注意的是,鯤鵬的基礎生態也已經相當完善,特別是與開發者關係較為密切的主流技術基本都支持,比如 Web 支持Nginx、Apache、Tomcat,中間件支持Memcached、Redis、Kafka,數據庫支持MySQL 、Mariadb、PostgreSQL,大數據支持Hadoop、Hive、HBase,開發語言支持Go,C/C++,Java,Ruby、Perl、Python,JavaScript等,操作系統支持openEuler、Ubuntu、CentOS、中標麒麟、UOS等。

對於新的應用而言,可以很輕鬆的選擇基於鯤鵬平台開發。那麼,傳統架構怎麼辦,基於x86的服務如何遷移?

跨平台軟件遷移實踐

軟件遷移是指將某個可運行的程序,由原來的環境遷移到另一個環境,​​並重新運行。改變的環境可能是處理器架構、操作系統、軟件運行環境等。總的來說,軟件移植是個“臟活”,需要開發者修改源碼、編譯、再修改、再編譯,費時費力。

對此,華為計算產品線主任工程師,華為鯤鵬開發套件的設計者張汝濤在最近的《如何實現從x86到鯤鵬平台90%C/C++代碼自動遷移》的演講中表示,華為提供了鯤鵬開發者套件,幫助用戶基於C/C++ 源碼提升移植效率;其次,鯤鵬社區提供了大量的兼容鯤鵬計算平台的開源軟件包供開發者下載直接使用,不用開發者二次移植;另外,移植過程中碰到的任何問題,在鯤鵬社區或OpenLab有專業的技術人員在線進行支持。

簡單來說,應用遷移至x86平台可以分為三大類型:

最終,我決定將代碼遷出x86架構! 1

第一類是Java、Python等解釋型語言。由於這類語言本身支持跨平台,只要運行環境OK即可,前提是原應用在運行中不依賴C或C++語言編譯產生的公共組件(SO庫文件或可執行文件)。如果滿足上述條件,則應用不需要重新編譯,基於x86的Jar包可以直接運行在ARM64服務器,不需要維護兩個分支代碼,這是最簡單的一類遷移。

第二類是C、C++或Go等編譯型語言。這類應用需要採用ARM64的GCC編譯器重新編譯即可運行,只要有源代碼就不用擔心;如果沒有源代碼,華為也提供了相關的方案,下文詳述。

第三類是彙編語言應用。這類應用本身佔比較少,重新編譯不行,需要重新寫一遍,如果不能重寫,在指令集翻譯工具研發推出後也可以解決這個問題。

實現90%的C、C++代碼自動遷移

如上所述,C、C++語言的應用遷移略複雜。 C語言自誕生以來,被廣泛用於開發各行各業的軟件。 C++語言既保留了C語言有效性、靈活性等特點,又增加了面對對象編程的支持,具有強大的編程功能,多年來一直是程序喜愛的編程語言之一。

C/C++是編譯型語言,硬件平台的切換將導致原有C/C++程序不能運行,開發者不得不解決軟件移植問題。基於編譯型語言開發的應用程序,其編譯後所得可執行程序,二進制執行指令是CPU架構相關的。因此,基於x86架構編譯的C/C++語言應用程序,無法直接在ARM服務器運行,需要進行移植編譯。這裡的移植前提一是基於Linux的應用程序;二是無x86彙編指令代碼,具體步驟如下所示:

最終,我決定將代碼遷出x86架構! 2

在編譯的過程中,開發者可能會遇到一些問題:

1.軟件工程構建文件中包含-march與-mtune編譯參數,如果提示參數不兼容,則需要調整,可能兼容的調整後參數為:-march=ARMv8.1-a -tune=tsv110

2.參數設置指導請參考:https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html

3.編譯時遇到找不到函數、缺少庫文件等錯誤,安裝對應的鯤鵬平台兼容的依賴庫,安裝方法同x86服務器

4.開源項目庫不支持ARM架構,這種情況較少,一般發生在較舊的項目代碼;解決方法包括:修改代碼,尋求替代組件等

5.編譯時提示代碼錯誤,可能需要根據平台差異修改部分代碼,例如平台類型相關宏定義

6.彙編程序和C/C++源代碼中內聯彙編需要重寫,ARM和x86架構指令集不兼容。

最終,我決定將代碼遷出x86架構! 3

為應對上述問題,張汝濤表示,華為鯤鵬平台提供了完整的工具鏈幫助開發者提高應用遷移或者調用的效率,比如:

  • 掃描工具:Dependency Advisor,檢查用戶軟件資源包二進製文件,並評估可移植性;檢查指定的用戶軟件安裝路徑下的二進製文件,並評估可移植性;檢查用戶軟件C/C++源碼、軟件構建工程文件,並評估可移植性;向用戶提供軟件移植報告,提供移植工作量評估;支持命令行方式和Web兩種工作模式。
  • 移植工具:Porting Advisor,檢查用戶軟件C/C++軟件構建工程文件,並提供修改建議;檢查用戶軟件C/C++源碼,並提供修改建議;檢查用戶軟件中x86彙編代碼,並提供修改建議;支持命令行和Web兩種訪問方式;提供一鍵式移植軟件到鯤鵬平台;支持用戶RPM、DEB軟件包重構。
  • 性能優化工具:Tuning Kit,支持安全可靠的升級回退功能;支持系統性能數據採集和分析,包括:CPU、內存、磁盤IO、網絡IO,根據現有積累的經驗,對已經明確的指標給出基準參考值和優化建議;支持Java程序性能分析;支持和Porting & Dependency Advisor同時部署在同一台機器。
  • 加速庫:從底層算力進一步提升應用軟件性能,glibc基礎庫目前已經在鯤鵬開源社區開源,優化了16個最常用的接口,相當於Intel優化範圍的10%;HMPP適配接口數501個,佔IPP信號庫接口的38.5%,佔IPP庫總接口的11%,對標Intel IPP完成功能測試。

最終,我決定將代碼遷出x86架構! 4

過往,曾有企業嘗試將大數據搜索系統遷移到鯤鵬平台。我們可以此為例總結整個遷移過程,根據張汝濤的介紹,遷移過程共分為如下四步:

1、用戶業務軟件棧匯總及兼容性分析;

2、用戶業務軟件組件依賴分析——華為鯤鵬代碼遷移工具;

3、C/C++軟件移植修改建議:

4、性能分析優化;

在這個過程中,華為提供了完整的開發者套件,可以幫助開發者檢測C、C++ 軟件構建配置文件,檢測C、C++源碼及x86彙編指令,並且根據檢測出的軟件修改規模進行工作量評估。其中,由於指令集不同,開發者重點關注彙編指令移植即可。

最終,我決定將代碼遷出x86架構! 5

移植完成,一切才剛剛開始

軟件遷移不僅是個工程問題,也是個技術問題,遷移只是第一步,張汝濤表示,鯤鵬平台為企業和開發者提供了一系列完整的服務和生態共建方案。

最終,我決定將代碼遷出x86架構! 6

為了讓鯤鵬能夠更好地服務各行各業,華為接下來將構建以開發者為中心的人才發展體系,針對開發者在學習、訓練、構建、社交等階段的不同需求,針對性的提供相應資源政策與活動,並優化流程,具體如下:

50多家大學加入沃土高校教研扶持

為了讓廣大學生開發者掌握基於鯤鵬平台的開發技能,華為已與50多家高校開展了鯤鵬相關的教學與科研合作。以教材為例,華為已經發布了20套書面教材和超過200套線上課程。未來,還將有更多高校加入沃土計劃,與華為共同培養鯤鵬人才。

24類華為認證

目前,華為已發布24類鯤鵬相關的職業認證,並且已被眾多企業與機構認可,這是鯤鵬合作夥伴的必備條件,也是個人求職與晉升的有力憑證。未來,具備HCIE認證的開發者一定是職場上的高精尖人才。

上線“沃土計劃2.0”激勵細則

去年,華為宣布沃土計劃2.0,五年投入15億美金,覆蓋四個領域,分別面向高校,初創企業,開發人員及合作夥伴。如今,所有激勵細則均已上線,初創企業最高可獲得75萬人民幣的雲券,歡迎大家申請。 2020年,華為將投入兩億美金,並公佈了針對高校,初創企業,開發人員及合作夥伴的具體人才扶持細則。

  • 高校教研扶持:面向高校,提供 1 億人民幣的扶持金額,包括人才培養,雲資源及樣機支持,同時華為與教育部簽署 3 年協議投入 10 億人民幣,共同推進人才的培養。
  • 初創企業及開發人員扶持:面向初創企業及個體開發人員,以雲資源及線下活動的方式發放 1 億人民幣的補助,每家初創公司最高可獲得 75 萬人民幣的雲券。
  • 合作夥伴發展扶持:面向合作夥伴,提供 6 億人民幣的扶持總額,其中 3 億人民幣一次性研發費用補貼,3 億人民幣的雲資源。

最後,希望各位開發者可以放心嘗試在鯤鵬平台之上用代碼改變世界。當一個新技術出現時,開發者最擅長的就是抓住它;當一個新的計算拐點出現,開發者大可勇敢的擁抱,一起參與這場可能的IT革命。

嘉賓介紹:

張汝濤,現任華為計算產品線主任工程師,華為鯤鵬開發套件的規劃設計者,負責架構和功能設計。從事軟件開發20年,在嵌入式軟件、企業軟件領域有豐富的經驗。原ARM開源軟件部門主任工程師,從事ARM64平台開源軟件開發、移植和性能優化,完善軟件生態。主要貢獻於雲、存儲、網絡相關的多個開源項目。多次在開源項目的峰會和社區會議上交流ARM64平台軟件開發、優化經驗。