每日最新頭條.有趣資訊

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

作者 | Lisa

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

1

從大型機到 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 的服務如何遷移?

2

跨平台軟體遷移實踐

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

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

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

第一類是 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 匯編指令代碼,具體步驟如下所示:

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

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

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

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

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

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

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

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

掃描工具: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 完成功能測試。

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

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

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

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

4、性能分析優化;

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

3

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

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

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

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 平台軟體開發、優化經驗。

獲得更多的PTT最新消息
按讚加入粉絲團