omniture
<center id="kgssg"></center>
<center id="kgssg"><wbr id="kgssg"></wbr></center>
<noscript id="kgssg"><option id="kgssg"></option></noscript><optgroup id="kgssg"><wbr id="kgssg"></wbr></optgroup><optgroup id="kgssg"></optgroup>
<optgroup id="kgssg"><div id="kgssg"></div></optgroup>
<center id="kgssg"><div id="kgssg"></div></center>
<center id="kgssg"></center>

浪潮云海首席科學家張東:面向一云多芯的系統設計方法

2023-10-27 10:45 4976

北京2023年10月27日 /美通社/ -- 近日,浪潮云海首席科學家張東、資深研究員亓開元在《中國計算機學會通訊》2023年第9期發表論文《面向一云多芯的系統設計方法》,深入分析一云多芯背后的關鍵挑戰問題,闡釋面向一云多芯的系統設計方法和關鍵技術路線,并在此基礎上,描繪了一云多芯三階段發展路線圖,為促進一云多芯向應用感知、架構無感知的目標迭代演進提供新思路。

近年來,巨大的市場需求加速了我國云計算軟硬件的發展,從芯片、整機、云操作系統、中間件到應用軟件的云計算創新鏈、產業鏈已初步形成。隨著行業"上云用數賦智"進程的不斷加速和深化,應用場景呈現多樣化趨勢,越來越多的數據中心選擇多元化的算力構建,給融合池化管理和靈活彈性調度帶來了新的挑戰。

中央處理器(CPU)作為應用最廣泛的算力器件,多廠商、不同架構疊加組合造成的多元異構現象尤為突出。Intel、AMD等x86架構仍是數據中心的主導力量,但占比逐步縮減;ARM架構憑借運算核心多、功耗低等優勢,發展勢頭強勁;開源的RISC-V架構也逐步興起。同時,在全球產業鏈重構的背景下,我國核心器部件的研發和生產也進入蓬勃發展階段,但因起步較晚、技術路線各異、發展水平不一,多元異構處理器將會長期并存發展。

一云多芯關鍵科學問題

云計算作為一種追求性價比的算力供給模式,其處理器的升級、換代和擴容正從單一架構向多元異構轉變。在多元異構處理器功能、性能和可靠性存在差異的情況下,為滿足高效穩定的技術需求,實現應用跨處理器低成本或自由切換,規避供應風險,保障關鍵業務長期穩定運行,"一云多芯"成為云計算發展的必然趨勢。

互聯網行業面向公有云的一云多芯工作開始得較早,憑借技術和資金儲備自研高性價比的處理器,如亞馬遜推出基于ARM的Graviton處理器,打破了對x86架構的依賴。針對行業私有云南向資源多樣性與北向應用復雜性的矛盾,目前國內金融、電信、能源等行業也已開始進行一云多芯的研究和建設,早期通過云管理層實現納管多個異構資源池,雖然能形成統一入口,但由于資源池割裂、應用無法跨架構編排,造成資源供給效率低下。

云海云操作系統(InCloud OS)、Apsara Stack、EasyStack等通過單一資源池實現異構資源的統一調度和互聯互通,但當前階段主要解決"多芯"的混部問題,距離以應用為中心的跨架構運行和低成本切換尚有較大差距。為滿足多芯共存條件下業務的穩定運行、平滑切換和彈性伸縮,如下科學問題和技術難題亟待解決。

1.應用跨架構可移植及運行環境等價性問題。應用程序運行在多芯系統不同處理器架構的節點上,首先需要確保程序本身的跨架構可移植。進一步,層次化、模塊化的復雜應用在異構節點間進行動態遷移、遠程調用或水平擴展,如何保障運行環境(操作系統、運行時、依賴庫等)的跨架構等價可執行成為挑戰(見圖1)。


2.多元異構算力量化分析和負載感知調度問題。多元異構CPU性能差異達2~10倍,附加異構加速單元的節點間計算能力的差異更是數量級的。應用在異構節點間遷移、切換或伸縮時,需要保證用戶體驗前后一致,遵守業務的服務水平協議(Service Level Agreement,SLA)。如何針對多元異構算力等價關系進行評估建模和量化分析,實現負載感知均衡調度和自適應彈性伸縮成為關鍵科學問題。

3.非對等架構下分布式應用的狀態一致性保證問題。相比于傳統分布式節點的對等性,一云多芯應用分布的異構節點非對等性不容忽視。針對非對等分布式云原生應用,實現有狀態任務在異構節點間高效一致性共識協商和數據同步,以及無狀態任務的非侵入流量動態控制和平滑切分,成為跨架構云原生應用編排的關鍵技術難點。

一云多芯系統設計和關鍵技術

ACM圖靈獎獲得者尼古拉斯·沃斯(Niklaus Wirth)提出了著名的公式"程序=數據結構+算法",揭示了程序的時間和空間本質。一云多芯系統作為一種軟件定義外延,除了數據平面的指令邏輯和數據狀態兩個時空要素外,還包括控制平面對多元異構資源的管控。因此,一云多芯系統可以抽象為"資源管理+運行程序+數據狀態"。

其中,資源管理通過軟件定義提供計算、存儲、網絡和安全等硬件資源抽象,以虛擬機、容器、裸金屬(bare metal)等粒度為應用提供資源封裝及運行環境;運行程序按照分層解耦分為資源層、平臺層和應用層,例如,承載用戶業務的應用程序、資源管理程序;數據狀態是指程序運行所依賴的內存瞬時數據、數據庫持久化數據及流量狀態等。

根據上述定義,一云多芯系統應從程序的可運行性、資源的可管理性及狀態的可遷移性三方面分別進行設計。

1.    程序的可運行性程序的跨架構運行在一云多芯系統中,程序的首要設計目標是可運行性,即可以在不同處理器架構的環境中移植運行,技術路線包含跨平臺語言、跨平臺編譯以及指令翻譯技術(見下表程序的跨架構運行技術)


主要特點

適用場景

局限性

跨平臺語言

程序本身適用具有跨平臺特性的編程
語言編寫。通過提供不同架構的程序運
行時屏蔽底層硬件差異

Web應用、OpenStack各組
件等用于管理、調度及用戶交
互的應用程序

運行時環境依賴、本地庫依賴

跨平臺編譯

通過編譯生成與目標架構匹配的二進
制文件。配合應用運行環境、解決編譯
階段的問題

應用的跨平臺構建。例如通過
性能跟高的
x86平臺交叉構
建ARM平臺程序

對于可執行程序、仍然需要二
進制代碼與處理器架構的統一

二進制翻譯

無需重新編譯。實現二進制指令的直接
翻譯執行

桌面輕量應用、模擬器、科研
調試等

性能損耗較大,對處理器能力
有要求,翻譯結果存在不確定
性,目前階段難以大規模應用

跨平臺語言以Java、Python為代表,通過跨平臺語言實現程序架構無關部分的跨架構運行,但仍然存在一些架構相關的問題:(1)運行時環境依賴,例如,Java程序在多芯系統中運行需要提供不同架構的Java虛擬機(Java Virtual Machine,JVM)運行時;(2)本地庫依賴,例如Java本地接口(Java Native Interface,JNI)需要跨平臺移植。

跨平臺編譯即交叉編譯,借助特定處理器架構環境及編譯工具生成其他架構的可執行程序。交叉編譯通過架構無關的源代碼實現程序的跨平臺二進制代碼生成,但是對于可執行程序,仍然需要統一二進制代碼與處理器架構。

二進制翻譯即指令集翻譯技術,是解決應用跨架構移植問題的研究熱點,實現方法包括軟件級二進制翻譯和芯片級二進制翻譯。無論軟件級還是芯片級,均受到翻譯系統的限制。軟件級二進制翻譯需要對應用運行環境進行改造,增加了運行環境的復雜性,而芯片級二進制翻譯過程性能損耗嚴重。例如,目前針對純運算類程序的翻譯器效率是直接編譯的60%~70%,如果涉及系統調用、鎖等操作,效率將下降到30%~40%,并且二進制翻譯過程依然存在指令集不兼容的問題,例如高級矢量擴展(Advanced Vector Extensions,AVX)指令。

運行時的等價封裝

跨平臺語言解決了應用的跨架構問題,但是需要提供跨架構的運行時;交叉編譯解決了跨架構編譯問題,但是仍然存在運行時的動態庫依賴問題。因此,程序在多芯系統中運行不僅需要考慮自身的可運行性,對于現代化的復雜應用,還應綜合考慮其依賴的運行時。可行的路線是結合標準化的容器方式對應用程序及其運行時依賴進行封裝,作為實現應用的跨架構部署及切換的基礎資源封裝。

也就是說,基于同一套源代碼,針對不同的架構構建不同的容器鏡像,如果程序是基于跨平臺的語言構建的,則將程序腳本或中間代碼與運行時封裝為容器;如果程序是基于非跨平臺的語言構建的,則可以通過交叉編譯,構建各種架構下的二進制文件,然后將其與依賴庫等封裝為容器,此流程可以通過一套流水線作業自動構建,并推送至鏡像庫。

綜上所述,一云多芯程序可運行性設計包括三個方面,首先實現應用程序的跨架構編譯及運行,其次構建標準容器化封裝,最后通過云資源編排管理實現輕量化部署(見圖2)。


2.資源的可管理性資源可管理性包括架構感知和算力量化分析,以及面向系統的資源均衡調度和面向業務的彈性伸縮。

架構感知技術架構感知是一云多芯實現節點調度、界面功能自適應展示的關鍵,是支撐程序的可運行性、實現資源封裝生命周期管理的基礎,可通過收集器、調度器、攔截器實現。(1)收集器采集并上報各節點的CPU架構、硬件特性等信息,建立包含架構特性的主機列表。(2)調度器為各種粒度的資源封裝選擇匹配的主機節點,采用級聯過濾器機制,加載多個獨立的過濾器,依次對創建請求與主機進行匹配。在一云多芯場景下,通過級聯架構感知過濾器,識別資源封裝創建請求中的鏡像架構標簽,根據CPU架構特性匹配結果過濾出主機節點。(3)攔截器用于建立可動態擴展的"架構-功能"映射矩陣,解析資源封裝管理請求的動作及架構特征,執行攔截請求并將結果反饋展示,從而實現不同架構功能差異化的自動識別、動態擴展,屏蔽底層實現差異,提供統一的資源管理視圖。

算力量化技術

因不同架構的處理器計算能力不同,相同應用即便使用了同等規格的資源封裝(例如相同的CPU核心、內存等),在異構環境上運行的性能也存在差異。根據應用場景,算力可分為CPU通用算力和XPU異構算力。一云多芯系統目前面臨的主要問題是CPU的多元異構,多廠商的ARM、x86架構處理器在指令集、核心數、生產工藝等方面均有所不同,因此在性能上也存在差異。這種差異性可以通過算力等價關系刻畫,根據層次劃分為規格算力、有效算力和業務算力(見表2)。

其中,規格算力的通用性最強,有效算力對特定負載類型更具針對性,業務算力更加貼近真實的應用場景,但由于負載和應用的多樣性,有效算力、業務算力的測算需要聯合上下游生態共同完成。


定義

測算對象

量化方法

測算工具

規格算力

從服務器系統資源層面測試評估
計算能力

 

處理器、內存、磁盤和
網絡等

系統整機規格性能基
準測試

SPEC CPU、
UnixBeneh、Stress

有效算力

從平臺層面測試評估中間件的資
源封裝性能

Redis、MySQL、
Kafka等中間件

針對中間件的井發性
能、響應延遲、吞吐量
等指標進行量化評估

Redis-Benchmark 、
Mysqlslap

業務算力

從應用層面使用真實業務負載測
試評估資源封裝計算能力

客戶關系管理(CRM)
電商、AI推理/調練等
業務應用

針對業務事務處理能
(TPS )化評估

響應時延、選代時間等
指標進行量化評估

Jmeter、LoadRunner

均衡調度技術

從資源層面,在為資源封裝選擇節點時,根據節點計算能力利用均衡策略對負載進行調度,這是一個以資源利用率最大化為目標的約束優化問題。均衡調度算法作用在級聯過濾器之后,從過濾出的主機節點中選擇負載相對最小的作為最終目標,對于一云多芯系統,此過程的關鍵是節點的算力量化分析。基于規格算力評估多類型資源的規格系數,再結合歸一化、主資源公平等數值方法,能夠測算出各節點的可用算力。基于歸一化的算法如下:


節點j的得分Scorej是r種資源類型權重得分之和,包括CPU、內存、硬盤等,如式(1)。各資源類型權重得分算法如式(2),其中,ResourceNormalizedji為節點j資源i可分配量的最小-最大正向歸一化,如式(3)所示;WeighterMultiplieri為資源的權重,可根據負載的CPU、內存或IO密集類型調整權重,體現每種資源的重要程度,coefficientji為各資源的規格算力系數,例如,ARM型和x86型CPU的規格算力量化關系為1∶2,規格系數分別為1和2,可分配CPU核數相同的情況下,x86型節點被調度的優先級更高,從而實現一云多芯場景下基于算力量化的均衡調度。

彈性伸縮技術

為了支撐面向業務峰值和低谷的彈性伸縮,要做到資源封裝的精準規劃、快速調度和算力等價,保證應用服務彈得對、彈得快、彈得準。(1)在資源規劃方面,根據應用負載特定周期內的概率分布特征,基于歷史數據時間序列建立負載趨勢模型,刻畫應用負載、服務質量與資源關系的負載畫像和容量畫像,通過負載趨勢預測和應用異常反饋方式規劃資源封裝伸縮需求。(2)在快速調度方面,基于架構感知、均衡調度技術,在擴展資源封裝時快速調度至最佳節點,并拉起應用服務,保障應用服務及時響應。(3)在彈性伸縮引發資源封裝跨架構切換時,基于算力量化技術刻畫不同架構的算力,根據有效算力、業務算力計算資源封裝的等價關系,確保業務的服務質量隨資源增減而線性伸縮。

3.狀態的可遷移性資源層的應用狀態遷移將持久化數據、內存瞬時狀態、外設配置以及網絡流量整體遷移至目標節點,涉及資源封裝內所有相關數據狀態。除了應用本身之外,還涉及操作系統、中間件等,遷移難度較大。為解決此問題,可進一步遵循資源層、平臺層和應用層解耦的思路,采用基于云原生微服務治理的狀態同步和流量切分方法。

資源封裝遷移

虛擬機的在線熱遷移技術已經相對成熟,通常通過預拷貝算法將源虛擬機的內存增量狀態以迭代的方式傳輸到目的主機,也出現了后拷貝、混合拷貝等優化算法以及硬件壓縮加速技術,加速內存拷貝收斂,減少停機時間,提升遷移效率。但是虛擬機遷移仍存在相同廠商CPU代際差距、不同廠商同架構兼容性、不同架構無法熱遷移的限制。容器的在線遷移技術研究起步較晚,本質上是進程組的遷移,當前的研究主要基于用戶空間的檢查點和恢復(Checkpoint and Restore In Userspace,CRIU)實現容器運行時狀態的遷移,并衍生出了一系列縮短遷移時間、降低不可用時間的優化方法。

此外,自適應容器在線遷移通過動態調整壓縮算法的加速因子實現CPU和網絡帶寬資源的匹配,減少容器快照的傳輸時間。以虛擬機和容器為資源封裝粒度的整體遷移,雖然已經有了一些研究與應用,但是仍存在遷移數據量大、停機時間和總遷移時間長的問題,實現應用跨架構平滑切換難度較大。隨著云原生技術的發展,結合服務治理方式成為可行路線,其中的關鍵技術包括有狀態服務的數據同步、無狀態服務的流量切換。

數據狀態同步

多副本的狀態同步依賴于分布式一致性算法。ACM圖靈獎獲得者萊斯利·蘭伯特(Leslie Lamport)提出了基于消息傳遞且具有高容錯性的Paxos共識算法,ZooKeeper的ZAB,MySQL的wsrep、Etcd,Redis的Raft協議都基于其核心思想實現了數據狀態一致性。在此基礎上,一云多芯平臺層的數據狀態同步需要進一步考慮節點非對稱特征。下文以Raft協議為例進行說明。

選舉(leader election)過程:主節點(leader)向所有的從節點(follower)周期性發送心跳來保證主節點地位,當一個從節點在一個超時周期內沒有收到心跳,則該節點轉化為候選(candidate)節點參與選舉。一云多芯系統中各節點的處理能力、網絡條件等不同導致超時影響差異化,可采用基于極大似然估計的適應性方法,避免心跳延遲大、處理能力弱的節點頻繁觸發選舉,同時保證處理能力強的節點可快速發起選舉。對于投票策略,采用節點優先級或縮小隨機超時取值范圍機制,使強節點更容易獲得多數票。

復制(log replication)過程:采用法定寫入(quorum write)機制,主節點接收來自客戶端的請求,向從節點發起寫入提議并接收反饋投票,每個提議獲得的票數大于半數才能提交寫入。在一云多芯中異構節點作為容災可用區(Availability Zone,AZ)設計,須保證各容災可用區都被寫入。

業務流量切分

云原生應用通過網關或負載均衡器將流量分發至各無狀態副本實例,流量就是無狀態工作負載的狀態。在多芯系統中,當應用在異構節點間遷移或彈性伸縮時,需要切分流量,并引流至對應節點的副本上。為保證服務質量不降級,根據有效算力、業務算力量化分析確定等價目標副本的規格和數量,并分配其承擔的流量比例,流量切換應與業務邏輯充分解耦,可采用服務網格的思想實現。

控制面感知副本變化生成流量切分策略,下發至網絡代理和網關。對于東西向流量,網絡代理劫持流量并根據切分策略按比例轉發到不同的副本。對于南北向流量,網關在流量轉發時根據切分策略轉發到不同副本。在流量切分的瞬時過程中,受目標節點副本未啟動、TCP連接延遲等因素的影響,會出現無法響應、丟包等應用服務質量下降的情況,可以通過預熱、探針、重試、排水技術保障應用跨架構的平滑切換。

一云多芯發展路徑

按照資源可管理性、程序可運行性、狀態可遷移性系統設計,一云多芯可以分三個階段逐步演進(見圖6)。


階段一:混合部署、統一管理、統一視圖

第一階段以可管理性為目標,實現異構處理器節點的統一池化管理、統一服務目錄和統一監控運維,可運行性和可遷移性方面通過同源異構、離線遷移、手動切換、業務切分實現應用跨架構的部署和協同。目前國內外一云多芯建設主要處于這一階段。遵循系統設計方法,筆者團隊在InCloud OS的研發實踐中,提出了基于同源異構的持續集成、基于不可變基礎設施的持續交付及架構感知調度方法,支持同一主線云操作系統源代碼編譯,構建異構節點的可執行程序,實現C/C++、Java、Python、Go多語言千萬級代碼在8種主流處理器上的分鐘級構建,為各類型應用提供了參考指導方案。

在基于InCloud OS建設的云平臺中,單資源池支持所有主流處理器架構,并按每個控制器1000個節點級聯擴展,實現了相距超過1000公里的三地數據中心一云多芯跨域統一管理、互聯互通,支撐云數智多樣化業務需求,制定了技術規范和參考架構。

階段二:業務牽引、分層解耦、架構升級

在第一階段的基礎上,為進一步滿足應用的低成本跨架構切換,第二階段通過分層解耦和架構升級,實現應用的跨架構遷移、多架構混合部署和流量切分。筆者團隊分別在資源層、平臺層及應用層進行了初步探索。

1.在資源層,結合GuestOS感知應變機制進一步提升面向多元CPU的遷移適用性,提出了基于一致性快照的在線遷移方法。通過變更數據塊追蹤和多線程異步優化,實現10 TB大規格虛擬機的快速完整遷移。遷移后,系統啟動初始化硬件檢查,若不支持相關CPU特性則切換到應變(fallback)措施,保證系統正常運行,特別針對Windows虛擬機實現了CPU、固件自適應,兼容Win XP以上桌面版和Win 2000以上服務器版,已在實際生產環境中展開應用。然而,虛擬機遷移的方式對應用是無感知的,遷移可能產生數據庫和應用異常的風險,需要應用開發者配合,對虛擬機遷移后的可用性進行進一步驗證。

2.在平臺層,目前生產環境采用的方案是通過數據同步、業務切分實現有狀態應用的跨架構運行。基于InCloud OS提供x86和ARM數據庫集群服務及數據同步服務,數據同步服務根據源端數據庫預寫日志(Write Ahead Log,WAL)捕獲數據變化,在傳輸中通過加密壓縮算法、事務合并、網絡包封裝優化網絡協議開銷和延遲,在目標端通過分組多任務并行和原生加載機制提升重放效率,實現亞秒級數據同步。應用基于讀寫分離架構設計,面向x86架構數據庫讀寫、ARM架構數據庫只讀,實現一云多芯場景下數據庫跨架構運行。

3.在應用層,InCloud OS于2023年1月完成首個一云多芯場景下SPEC Cloud基準測試,驗證了基于單一資源池承載多型x86、ARM處理器架構的資源可管理性、計算密集型聚類算法K-means的跨架構程序可運行性、IO密集型分布式數據庫Cassandra的狀態可遷移性,并結合均衡調度算法,實現了擴展性超過90%,性能超過SLA基線20%,平均上線時間超過世界紀錄25%。

階段三:軟件定義、算力標準、全棧多芯

一云多芯是芯與云的融合,是平臺和生態的協同。在第三階段,通過處理器、整機、云操作系統、數據庫、中間件和應用等產業鏈上下游的共同配合,實現應用與處理器架構的徹底解耦,保障業務長期穩定運行。

1.在算力資源層,提升處理器性能、可靠性的同時,通過系統設計定義處理器設計標準化和兼容性,同時推動二進制翻譯技術在應用過程中不斷優化。在支持處理器多芯的基礎上,擴展對GPU、DPU等異構算力的統一抽象,實現異構加速協同。

2.在平臺層,突破應用特征感知的可變粒度資源調度分配技術,解決應用類型與資源封裝的自適應配置和編排問題,研究函數拓撲編排、高效調度和快速啟動技術,解決大規模云原生應用的靈活構建和彈性擴展問題。

3.在應用層,促進應用支持多芯同源異構,完善云原生化轉型升級最佳實踐,與資源層和平臺層相結合,實現應用感知、架構無感知的平滑切換和彈性伸縮。

4.在算力評估、標準和測評方面,研究多元異構有效算力的量化方法,聯合專業測評機構及產業鏈上下游,建立一云多芯行業標準。

結束語:一云多芯是解決數據中心多芯共存問題的必然趨勢。為解決應用跨架構可運行、算力量化分析、負載感知調度、非對等架構分布式狀態一致性的問題,筆者團隊提出了一云多芯系統的核心設計理念和系統設計方法。

1.堅持系統觀念,場景驅動、系統設計。從以CPU為核心向以系統為核心的設計模式轉變,以應用為導向建立多元異構融合、軟件定義和軟硬協同的技術發展路線,持續提升計算效率和能效比。

2.加強生態協作,分層解耦、開放標準。處理器、整機、云操作系統、中間件、應用逐層解耦,通過生態協同消除單一技術路線帶來的垂直封閉、生態離散問題,實現一云多芯標準化和規范化。

3.制定發展路線圖,迭代創新、持續演進。從混合部署、離線遷移和手動切換,到基于架構升級的平滑切換和彈性伸縮,再到算力標準和全棧多芯迭代演進。

當前的研究和實踐工作正處于第一階段向第二階段的過渡時期,圍繞程序可運行性、資源可管理性和狀態可遷移性技術進行了探索和布局,下一步需要加強產業鏈、創新鏈協作,向應用感知、架構無感知的目標迭代演進,推動一云多芯計算理論基礎更加堅實完備,軟硬協同和軟件定義機制更加成熟有效,應用感知場景范式更加清晰可行,產業生態更加標準規范。

 

消息來源:浪潮云海
China-PRNewsire-300-300.png
全球TMT
微信公眾號“全球TMT”發布全球互聯網、科技、媒體、通訊企業的經營動態、財報信息、企業并購消息。掃描二維碼,立即訂閱!
collection
<center id="kgssg"></center>
<center id="kgssg"><wbr id="kgssg"></wbr></center>
<noscript id="kgssg"><option id="kgssg"></option></noscript><optgroup id="kgssg"><wbr id="kgssg"></wbr></optgroup><optgroup id="kgssg"></optgroup>
<optgroup id="kgssg"><div id="kgssg"></div></optgroup>
<center id="kgssg"><div id="kgssg"></div></center>
<center id="kgssg"></center>
久久久亚洲欧洲日产国码二区