2022年11月5日,“倚天開啟云原生算力新時(shí)代”專場在杭州·云棲大會(huì)D館云棲科創(chuàng)SHOW場舉行,安謀科技(Arm China)高級(jí)軟件經(jīng)理別再平帶來了題為《Neoverse生態(tài)與軟件遷移》的主題分享,詳細(xì)的介紹了Arm Neoverse生態(tài)及性能優(yōu)勢和遷移建議,本文根據(jù)該演講整理而成。
01 Arm完善、豐富的生態(tài)成為國內(nèi)外多家云廠商首選
在Arm的生態(tài)系統(tǒng)中包含CPU架構(gòu)、CPU微架構(gòu),芯片實(shí)現(xiàn)三個(gè)概念,CPU架構(gòu)定義了用戶對(duì)CPU核心的期望行為,包括寄存器、內(nèi)存模型,異常模型等等,而CPU微架構(gòu)則是一個(gè)CPU核心的具體實(shí)現(xiàn),芯片則是芯片廠商在CPU核心的基礎(chǔ)上配合各種加速器和總線互聯(lián)最終實(shí)現(xiàn)。
同一個(gè)CPU架構(gòu)可以有不同的微架構(gòu)實(shí)現(xiàn),例如上圖右側(cè)中的例子:Arm的Cortex A710和Arm的Neoverse N2兩款CPU核心,都是基于Armv9.0架構(gòu)實(shí)現(xiàn),同一款軟件也同樣可以在兩款CPU上運(yùn)行。
上圖中展示的是Arm的CPU架構(gòu)演進(jìn),Arm自2011年推出基于64位的Armv8架構(gòu)以來,保持著逐代演進(jìn)的節(jié)奏,根據(jù)市場和客戶的需求,不斷地在安全、性能、功能等方面加入不同的CPU特性,不同的CPU特性會(huì)組合成為一個(gè)CPU擴(kuò)展,也就是一個(gè)小(新)版本。Arm的CPU版本是逐年演進(jìn)且向前兼容的,像Neoverse N2是基于Armv9的架構(gòu),它可以同時(shí)兼容前代架構(gòu)的所有特性,系統(tǒng)軟件等也可以通過查詢系統(tǒng)寄存器了解當(dāng)前硬件所實(shí)現(xiàn)的具體CPU架構(gòu)特性。
2018年Arm戰(zhàn)略性地將服務(wù)器芯片設(shè)計(jì)和傳統(tǒng)客戶端芯片設(shè)計(jì)分離,推出了Arm Neoverse產(chǎn)品線,縱向看Arm Neoverse平臺(tái)有三個(gè)系列產(chǎn)品,V系列、N系列和E系列。V系列強(qiáng)調(diào)性能,可提供最高單核處理能力,主要用于HPC和數(shù)據(jù)中心云應(yīng)用等;N系列更注重性能、功耗和面積的平衡,具備最高的可擴(kuò)展性,主要適用于數(shù)據(jù)中心、云計(jì)算應(yīng)用;E系列更注重功耗和面積,主要應(yīng)用于無線接入等功耗受限的領(lǐng)域。
橫向看Neoverse平臺(tái)近幾年推出的CPU產(chǎn)品,N1平臺(tái)是第一代聚焦基礎(chǔ)設(shè)施的CPU實(shí)現(xiàn),目前已經(jīng)獲得廣泛應(yīng)用。在服務(wù)器領(lǐng)域,基于N1的產(chǎn)品有AWS和Ampere的服務(wù)器芯片,DPU領(lǐng)域有英特爾基于Neoverse N1的DPU實(shí)現(xiàn)。第二代是V1,屬V系列產(chǎn)品,更注重單核性能,新增2×256的SVE加速引擎,AWS的Graviton 3是基于V1來實(shí)現(xiàn)的,并且已經(jīng)于今年5月份正式商用。
N2是第一個(gè)支持Armv9架構(gòu)的CPU核心,支持2×128的SVE引擎,倚天710芯片也是基于N2平臺(tái)實(shí)現(xiàn)的。
Poseidon平臺(tái)基于Armv9.2架構(gòu),在N2的基礎(chǔ)上性能再提高30%,且增加了CCA架構(gòu)特性,支持機(jī)密計(jì)算。
上圖展示的是Arm Neoverse平臺(tái)推出以來,在最近兩年時(shí)間里取得的一些成就??梢钥吹皆谠粕?,AWS、微軟、谷歌、阿里云等都推出了基于Arm Neoverse的云實(shí)例。在智能網(wǎng)卡領(lǐng)域,Marvell推出了基于Neoverse的智能網(wǎng)卡,谷歌云和英特爾聯(lián)合推出了“Mt Evans”DPU。在企業(yè)領(lǐng)域,惠普發(fā)布了基于Ampere的ProLiant Gen11平臺(tái),也代表Arm正進(jìn)入傳統(tǒng)的企業(yè)領(lǐng)域。同時(shí)在規(guī)范方面,Arm推出了System Ready認(rèn)證項(xiàng)目,針對(duì)Arm系統(tǒng)的軟硬件進(jìn)行測試認(rèn)證,確保最終Arm的系統(tǒng)可以開箱即用和安裝多樣的操作系統(tǒng),過去兩年已經(jīng)有五十多個(gè)系統(tǒng)獲得System Ready認(rèn)證。
聚焦云計(jì)算領(lǐng)域,從上圖中可以看到Arm Neoverse系統(tǒng)已經(jīng)被部署在公有云、私有云,混合云等方方面面,且已經(jīng)被國內(nèi)外主流云計(jì)算廠商所采用,比如阿里云、騰訊云、AWS、微軟、谷歌等。
在云原生的軟件生態(tài)方面,Arm持續(xù)致力于開源軟件開發(fā)和支持。目前Arm對(duì)超過100個(gè)開源項(xiàng)目進(jìn)行投入,可以看到(上圖)自下而上從網(wǎng)絡(luò)、OS、虛擬化、容器,編程語言以及各種上層應(yīng)用負(fù)載,Arm都有很完善的支持。對(duì)底層網(wǎng)絡(luò)側(cè)的DPDK、OVS、ODP均可支持。在語言層面,OpenJDK、GoLang等也都可以在Arm平臺(tái)上直接運(yùn)行,包括壓縮方面的主流計(jì)算庫,Arm也可以很好的支持。 頂部(上圖)列出了一些主流的云負(fù)載應(yīng)用,有常見的一些數(shù)據(jù)庫、緩存、Web服務(wù)器、大數(shù)據(jù)、存儲(chǔ)等。左側(cè)(上圖)中可以看到Arm在CI/CD領(lǐng)域也有很大的投入,GitLab、Github Actions、Travis等都原生支持Arm系統(tǒng),方便開發(fā)者在Arm系統(tǒng)上進(jìn)行開發(fā)構(gòu)建。
在操作系統(tǒng)領(lǐng)域,從主流的發(fā)行版OS到社區(qū)版OS,Arm都已經(jīng)是所謂的”第一等公民“,Red Hat Enterprise Linux、CentOS、SUSE、龍蜥社區(qū)等對(duì)Arm系統(tǒng)都有原生支持。
在編譯器領(lǐng)域,在GCC和LLVM,Arm和生態(tài)伙伴一起合作,持續(xù)投入,確保在Silicon硬件系統(tǒng)面世以前,相應(yīng)的架構(gòu)特性和微架構(gòu)實(shí)現(xiàn)就在編譯器中獲得支持。隨著編譯器版本的更新,Arm會(huì)逐步支持相應(yīng)架構(gòu)特性,以及相應(yīng)微架構(gòu)實(shí)現(xiàn),保證客戶用最簡便的編譯方法獲得最優(yōu)化的運(yùn)行性能。
從另一角度可以看到,Arm會(huì)把自己的IP路線圖和編譯器路線圖相配合,例如在2024年之后,相應(yīng)的編譯器就會(huì)支持Poseidon,我們會(huì)在Poseidon平臺(tái)落地前,就把相應(yīng)的功能支持加入到編譯器當(dāng)中,保證最終用戶拿到硬件之后可以第一時(shí)間用現(xiàn)有的編譯器獲得最好的性能。 02 多兼容,可擴(kuò)展,Arm多業(yè)務(wù)場景性能大幅提升
下圖中列了Neoverse平臺(tái)的N1、N2兩款CPU核心以及Cortex A72的性能對(duì)比及架構(gòu)特性的增強(qiáng)。Arm Neoverse N1這款CPU核心,對(duì)比Cortex A72有60%的性能提升,同時(shí)降低了30%的功耗。Arm Neoverse N1加入了很多服務(wù)器領(lǐng)域的架構(gòu)特性,例如獨(dú)立的L2 Cache,支持原子操作,同時(shí)也支持基本的RAS特性。
接下來的Neoverse N2 CPU核心,在N1基礎(chǔ)上提升了35%的性能,且保持了同樣的功耗,使得N2有了非常好的可擴(kuò)展性,同時(shí)N2也是第一款支持Armv9架構(gòu)的CPU實(shí)現(xiàn),尤其指出N2實(shí)現(xiàn)了MPAM架構(gòu)特性,類似于傳統(tǒng)x86的RDT,可以把內(nèi)存及cache進(jìn)行隔離劃分,可以避免系統(tǒng)抖動(dòng)及云環(huán)境下多租戶之間的相互影響。
使用基于Arm Neoverse平臺(tái)的服務(wù)器,可以獲得更高的性能,更低的功耗,以及最終帶來更低的部署成本。給大家列一個(gè)端到端的例子,上圖中包含網(wǎng)絡(luò)服務(wù)的端到端的解決方案,可以看到從整個(gè)解決方案中的各種軟件,Arm都有相應(yīng)的性能提升,比較熟悉的包括前端的web服務(wù)、反向代理、防火墻,后端的數(shù)據(jù)庫、緩存,以及業(yè)務(wù)處理的Java、視頻編解碼等,Arm系統(tǒng)相對(duì)于同代的x86系統(tǒng),都有20%以上的性能優(yōu)勢。
相對(duì)于第一代N1來說,N2在各種應(yīng)用負(fù)載上均有大幅的性能提升,在MemcacheD、MySQL、NGINX上分別有30%、29%、48%的性能提升。
上圖中為大家展示的是我們基于Neoverse N2的倚天G8y實(shí)例,和傳統(tǒng)x86實(shí)例的實(shí)測對(duì)比結(jié)果,我們對(duì)Web服務(wù)器場景進(jìn)行測試,使用默認(rèn)的編譯器及軟件版本,最終測試得到的結(jié)果顯示,對(duì)于HTTP場景下,G8y實(shí)例相對(duì)于x86實(shí)例有20%的性能優(yōu)勢。如果再考慮加密層面,針對(duì)HTTPS進(jìn)行測試會(huì)有38%的性能優(yōu)勢。倚天G8y實(shí)例將于11月15號(hào)正式商用,相應(yīng)的測試參數(shù)都在上圖中列了出來,大家可以參考進(jìn)行對(duì)比測試。
同時(shí)我們也進(jìn)行了內(nèi)存數(shù)據(jù)庫Redis的測試,在pipeline參數(shù)分別設(shè)置為1、50、100的情況下,基于倚天710芯片的g8y實(shí)例相對(duì)于x86實(shí)例分別有10%、20%,36%的性能收益。其中整個(gè)軟件都是直接用現(xiàn)有的開源軟件項(xiàng)目直接下載并直接編譯安裝,無需經(jīng)過任何手動(dòng)優(yōu)化即可獲得圖中的結(jié)果。 03 有效操作優(yōu)化保障代碼安全,實(shí)現(xiàn)性能提升
在上文中我們已經(jīng)看到,Arm本身有很完善的軟件生態(tài),尤其在云原生領(lǐng)域,用戶在使用的時(shí)候,基本無需進(jìn)行特殊代碼改動(dòng),接近于開箱即用的場景,我這邊給到大家的遷移建議主要是針對(duì)一些自研非開源的軟件,尤其是大家之前的軟件中使用了一些針對(duì)x86系統(tǒng)的手動(dòng)優(yōu)化,在這些場景下,主要是在SIMD并發(fā)處理和內(nèi)存訪問優(yōu)化方面給大家提一些建議。
首先是SIMD單指令多數(shù)據(jù)的優(yōu)化,通過使用這種技術(shù),我們可以在一條指令中同時(shí)執(zhí)行多個(gè)操作,提高操作并行度,進(jìn)而最終提高IPC。Arm架構(gòu)主要包含兩個(gè)架構(gòu)擴(kuò)展,Neon和SVE,特別適合用在一些數(shù)據(jù)量比較大的處理場景,起到加速作用,例如視頻編解碼、圖形圖像處理、音頻語音處理、壓縮與解壓縮,以及一些網(wǎng)絡(luò)的處理等等。
首先來看Neon,我們可以把一個(gè)128比特的寄存器,當(dāng)做是幾個(gè)元素的集合,元素的大小可以是8、16、32、64位,元素可以被當(dāng)作整數(shù)或者浮點(diǎn)數(shù)進(jìn)行處理,但是要保證這里面的每個(gè)元素和數(shù)據(jù)類型是相同的,對(duì)應(yīng)的元素會(huì)組成一個(gè)通道,當(dāng)我們執(zhí)行一條Neon指令的時(shí)候,就可以同時(shí)處理多個(gè)數(shù)據(jù)元素,提高效率。
再看SVE架構(gòu)擴(kuò)展,其功能和Neon類似,但SVE相比Neon主要有兩個(gè)方面的優(yōu)勢: 1、從架構(gòu)角度看,Neon寄存器寬度固定為128比特,限制了它的擴(kuò)展。SVE在架構(gòu)上允許從128一直到2048比特的位寬,只要是128比特的整數(shù)倍就可以,給了設(shè)計(jì)者更大的靈活度。 2、從軟件角度看,SVE在軟件上不需要關(guān)心Vector具體的寬度,開發(fā)人員只需要寫一套代碼,就可以運(yùn)行在不同硬件上。
關(guān)于使用Neon和SVE加速,最常用的方式是通過傳入一些編譯選項(xiàng),或者編譯器識(shí)別當(dāng)前CPU類型去自動(dòng)應(yīng)用Neon和SEV加速。但如果大家發(fā)現(xiàn)了一些熱點(diǎn)想要手動(dòng)進(jìn)行優(yōu)化的時(shí)候,建議直接用intrinsics方式,相對(duì)于匯編代碼,代碼邏輯更清晰且更容易編寫,同時(shí)也便于編譯器進(jìn)一步進(jìn)行性能優(yōu)化。
關(guān)于性能優(yōu)化的例子:Arm在SPDK當(dāng)中應(yīng)用Neon對(duì)算法進(jìn)行優(yōu)化,無論編碼還是解碼,基本上都有大約2倍的性能提升,在SPDK內(nèi)存清零操作中,使用SVE加速獲得了8倍的性能提升。右側(cè)(上圖)是代碼的示例,通過代碼示例,在右下角也可以看到,這套代碼沒有具體vector寬度的指定,不管最終SVE硬件的寬度是128還是256, 都可以直接運(yùn)行。另外也可以看到這個(gè)SVE版本的循環(huán)沒有針對(duì)尾循環(huán)的特殊處理,因?yàn)镾VE擴(kuò)展配合特殊的循環(huán)指令以及相應(yīng)的掩碼預(yù)測寄存器,可以自動(dòng)處理尾循環(huán)。
Arm和傳統(tǒng)x86 CPU之間一個(gè)很顯著的區(qū)別是它們的內(nèi)存模型(memory model)。大家最直觀的內(nèi)存序是順序內(nèi)存序(SC),這種情況下所有的內(nèi)存操作都不會(huì)亂序,好處是容易理解,但對(duì)于CPU的實(shí)現(xiàn)限制太嚴(yán),會(huì)嚴(yán)重影響CPU性能。目前比較多的是x86采用的TSO模型,相對(duì)于第一種SC,解除了一些限制,允許存儲(chǔ)和加載這兩個(gè)操作亂序。 Arm架構(gòu)則采用了一種限制更少的memory model,這種模型下所有的內(nèi)存加載和存儲(chǔ)操作都可以進(jìn)行亂序,這樣給了微架構(gòu)設(shè)計(jì)者最大的自主權(quán),可以帶來更高的性能。
Arm為了提高性能允許各種內(nèi)存操作進(jìn)行亂序,當(dāng)我們需要按照一種固定的順序執(zhí)行時(shí),Arm提供了各種內(nèi)存柵欄來保證內(nèi)存訪問的順序,幫助大家來保證代碼正確性。從左到右(上圖)分別是Load-Acquire / Store-Release半柵欄、DMB全柵欄、DSB、ISB,屏障的限制越來越強(qiáng),對(duì)性能的影響也越來越大,在保障正確性的前提下,盡量選擇比較弱的柵欄,做到恰到好處地實(shí)現(xiàn)正確性和性能的平衡。 我們的建議是寫代碼時(shí),先選擇比較強(qiáng)的柵欄,保證代碼的正確性,后續(xù)進(jìn)行代碼評(píng)測優(yōu)化的過程中如果發(fā)現(xiàn)成為瓶頸的話,再選用一些比較弱的柵欄進(jìn)行優(yōu)化。
上圖是Arm對(duì)DPDK Virtio應(yīng)用進(jìn)行優(yōu)化的例子,包含前端后端,通過一個(gè)隊(duì)列進(jìn)行通信,相當(dāng)于一個(gè)生產(chǎn)者一個(gè)消費(fèi)者。這里最初使用的是全柵欄,后續(xù)在性能測試時(shí)發(fā)現(xiàn)是一個(gè)瓶頸,做優(yōu)化時(shí)把相應(yīng)的全柵欄DMB換成了半柵欄后,在PVP測試場景下獲得了20%的性能提升,只要改動(dòng)這一處即可達(dá)到性能提升的效果。
這里說明一下,Arm memory model是一種硬件定義的內(nèi)存模型,對(duì)于大多數(shù)情況,我們并不建議大家直接操作依賴于具體架構(gòu)的匯編代碼,一種更推薦的方式是借助于語言定義的memory model,例如我們可以使用C++11或者C11的memory model,調(diào)用其API,這樣工具鏈會(huì)處理語言的memory model并自動(dòng)映射到最終硬件架構(gòu)的memory model,這樣的操作方便移植且不容易出錯(cuò)。 最后再次強(qiáng)調(diào),與內(nèi)存序相關(guān)的編程非常復(fù)雜,memory model是非常容易出問題的點(diǎn),我們必須仔細(xì)權(quán)衡其正確性和性能。為了代碼的安全,建議大家在開發(fā)初期可以使用一些較強(qiáng)的屏障指令保證邏輯正確,在后續(xù)的代碼優(yōu)化過程當(dāng)中,通過移除一些冗余屏障或在必要時(shí)切換到較輕的屏障,最終達(dá)到提高性能的目的。 以上就是我要分享的全部內(nèi)容,謝謝大家。
審核編輯 :李倩
-
寄存器
+關(guān)注
關(guān)注
31文章
5357瀏覽量
120631 -
cpu
+關(guān)注
關(guān)注
68文章
10878瀏覽量
212162 -
加速器
+關(guān)注
關(guān)注
2文章
802瀏覽量
37931
原文標(biāo)題:學(xué)習(xí)分享 | 安謀科技(Arm China)高級(jí)軟件經(jīng)理別再平:Neoverse生態(tài)與軟件遷移
文章出處:【微信號(hào):Ithingedu,微信公眾號(hào):安芯教育科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論