天天看點

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

如今,我們幾乎所有軟體都建立在 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 架構,華為鲲鵬處理器的優勢較為明顯:

  • 多核,性能提升 20%,雲應用支援度更好,更靈活;
  • 支援 8 個 DDR 通道,傳統 CPU 僅 6 個,吞吐率提升 25%;
  • SOC 晶片,一顆晶片四合一,包含 CPU、南橋、網卡和 SAS 控制器,效能提升 30%;
  • 內建壓縮、加密、重删等硬體加速引擎的處理器,大大提升應用的性能,釋放更多 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 平台可以分為三大類型:

最終,我決定将代碼遷出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 彙編指令代碼,具體步驟如下所示:

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

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

  • 軟體工程建構檔案中包含 -march 與 -mtune 編譯參數,如果提示參數不相容,則需要調整,可能相容的調整後參數為:-march=ARMv8.1-a -tune=tsv110
  • 參數設定指導請參考:ARM Options (Using the GNU Compiler Collection (GCC))
  • 編譯時遇到找不到函數、缺少庫檔案等錯誤,安裝對應的鲲鵬平台相容的依賴庫,安裝方法同 x86 伺服器
  • 開源項目庫不支援 ARM 架構,這種情況較少,一般發生在較舊的項目代碼;解決方法包括:修改代碼,尋求替代元件等
  • 編譯時提示代碼錯誤,可能需要根據平台差異修改部分代碼,例如平台類型相關宏定義
  • 彙程式設計式和 C/C++ 源代碼中内聯彙編需要重寫,ARM 和 x86 架構指令集不相容。
最終,我決定将代碼遷出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 完成功能測試。
最終,我決定将代碼遷出x86架構!

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

1、使用者業務軟體棧彙總及相容性分析;

2、使用者業務軟體元件依賴分析——華為鲲鵬代碼遷移工具;

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

4、性能分析優化;

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

最終,我決定将代碼遷出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 平台軟體開發、優化經驗。

點選關注,第一時間了解華為雲新鮮技術~

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

繼續閱讀