楊鵬飛,劉 波,黨佳樂,呂文凱
自動駕駛、物聯(lián)網(wǎng)、星載、機載計算等行業(yè)和領(lǐng)域,越來越多的應(yīng)用場景是在體積、重量、功耗等條件和資源受限的環(huán)境下.嵌入式計算設(shè)備既要自身具有強大的計算和管理能力,又要實現(xiàn)與其他設(shè)備相互協(xié)同,協(xié)作處理復(fù)雜的任務(wù)場景.如未來星載計算機既要能夠獨立進行系統(tǒng)管理和任務(wù)執(zhí)行,又要能與其它星載計算機實現(xiàn)互聯(lián)協(xié)作[1-2],這對條件受限下的高性能異構(gòu)計算提出了更高的要求.不同類型、架構(gòu)、數(shù)量的器件構(gòu)成的異構(gòu)化的計算平臺,包括CPU、DSP、GPU、FPGA、NPU和其它可編程邏輯等各種計算資源[3-4],能夠較好的滿足算力需求,但同時也給平臺的架構(gòu)設(shè)計、系統(tǒng)管理、網(wǎng)絡(luò)集群構(gòu)建與應(yīng)用開發(fā)部署提出了更大挑戰(zhàn).
可重構(gòu)計算能夠通過在線方式對計算機硬件結(jié)構(gòu)進行升級或修改,從而更好的滿足嵌入式計算設(shè)備架構(gòu)共融、資源共用、協(xié)同處理的“云”化發(fā)展趨勢和技術(shù)要求[5].但可重構(gòu)計算概念的提出主要是針對于硬件層面,解決專用集成電路開發(fā)周期長、靈活性差的缺陷,所以更多的研究仍集中在可重構(gòu)邏輯器件、系統(tǒng)硬件性能提升,較少的考慮平臺級架構(gòu)以及系統(tǒng)管理軟件與調(diào)度策略對系統(tǒng)性能的提升,從而忽略了在系統(tǒng)級的管理調(diào)度以及在軟件層面的可重構(gòu)計算對系統(tǒng)性能的提升[6].而可重構(gòu)計算要發(fā)揮效能優(yōu)勢,可重構(gòu)硬件是基礎(chǔ),平臺架構(gòu)是關(guān)鍵,資源、通信和架構(gòu)的自組織協(xié)同和動態(tài)自演化理論與技術(shù)是核心,信息快速存儲與檢索是提升平臺效能的有效途徑,有必要對其涉及內(nèi)容展開深入研究[7].此外,對于任務(wù)驅(qū)動模型,從任務(wù)接入到任務(wù)執(zhí)行完成的過程中,涉及到故障的自動檢測、計算節(jié)點的自動切換以及任務(wù)的自動恢復(fù)等問題.為保證任務(wù)持續(xù)高效的執(zhí)行,計算平臺的高可用性是必要的.因此,急需一種任務(wù)驅(qū)動的、異構(gòu)資源可自組織協(xié)同和統(tǒng)一化管理的、高可用的可重構(gòu)異構(gòu)計算平臺.
基于以上分析,本文提出了一種任務(wù)驅(qū)動的嵌入式可重構(gòu)異構(gòu)計算平臺,與傳統(tǒng)平臺相比,該平臺具有以下三方面優(yōu)勢:
(1)通過集群構(gòu)建的方式,統(tǒng)一管理調(diào)度集群中的嵌入式計算節(jié)點,同時集群具有自動構(gòu)建能力,實現(xiàn)了異構(gòu)計算資源的自組織協(xié)同與統(tǒng)一化管理.
(2)基于容器化的方式,進行任務(wù)的快速部署,同時細化了資源管理的粒度,提高資源利用率.
(3)基于B/S模式開發(fā)Web可視化界面,提供統(tǒng)一的用戶接入接口,用戶端隨遇接入,便于使用和管理平臺.
本文按照自頂向下的設(shè)計方法,首先給出任務(wù)驅(qū)動的嵌入式可重構(gòu)異構(gòu)計算平臺的總體架構(gòu),然后分層介紹詳細的設(shè)計細節(jié).
如圖1所示,一種任務(wù)驅(qū)動的嵌入式可重構(gòu)異構(gòu)計算平臺包括三層:用戶接入層、系統(tǒng)中間件層及硬件層.其中,用戶接入層實現(xiàn)用戶的任務(wù)接入,包括Web可視化模塊與任務(wù)接入模塊.系統(tǒng)中間件層通過動態(tài)集群構(gòu)建模塊實現(xiàn)嵌入式集群的構(gòu)建與管理、任務(wù)池構(gòu)建模塊構(gòu)建集群的任務(wù)池、資源池構(gòu)建模塊構(gòu)建集群的資源池、虛擬計算環(huán)境構(gòu)建模塊實現(xiàn)任務(wù)執(zhí)行的虛擬計算環(huán)境的構(gòu)建.硬件層實現(xiàn)嵌入式計算節(jié)點上異構(gòu)資源的統(tǒng)一接入及板間網(wǎng)絡(luò)化互聯(lián).
用戶通過用戶接入層實現(xiàn)任務(wù)的接入,任務(wù)接入模塊按照一定的負載均衡策略將任務(wù)分發(fā)到集群中.集群中的主節(jié)點提取任務(wù)池中的任務(wù),在資源池中為任務(wù)匹配資源.匹配成功后,主節(jié)點進行任務(wù)下發(fā),計算節(jié)點利用容器虛擬化技術(shù),構(gòu)建任務(wù)執(zhí)行的虛擬計算環(huán)境執(zhí)行任務(wù).
圖1 平臺分層架構(gòu)圖Fig.1 The diagram of platform layered architecture
如圖2所示,用戶接入層包括Web可視化模塊與任務(wù)接入模塊.其中,Web可視化模塊為任務(wù)接入提供Web可視化界面,進行任務(wù)、資源、用戶的管理,并為用戶接入和授權(quán)提供保證;任務(wù)接入模塊為用戶提供統(tǒng)一接入地址,運用代理保證統(tǒng)一接入的高可用性并將任務(wù)按照一定的負載均衡策略在集群間分發(fā).
圖2 用戶接入層示意圖Fig.2 The diagram of user access layer
Web可視化模塊,為多重用戶提供不同的可視化交互界面,幫助用戶基于安全機制實現(xiàn)任務(wù)管理、資源管理、用戶管理和其他管理.
任務(wù)接入模塊,用于接收用戶的任務(wù)請求,如圖3所示,該模塊是由多個計算節(jié)點搭建的代理集群,基于Virtual Router Redundancy Protocol (VRRP)[8]協(xié)議實現(xiàn)代理集群中的節(jié)點共有一個虛擬IP (VIP),當VIP綁定的節(jié)點Master故障時,VIP會漂移到一個Slave節(jié)點上,此Slave節(jié)點上升為新的Master,繼續(xù)提供任務(wù)接入服務(wù),從而為用戶提供一個統(tǒng)一、高可用的訪問接口,保證了任務(wù)接入的高可用性.同時,代理集群按照一定的負載均衡策略,將任務(wù)分配到多個集群中,從而提高任務(wù)處理的并發(fā)度和吞吐量、提高平臺資源的利用率.
圖3 任務(wù)接入模塊結(jié)構(gòu)示意圖Fig.3 The schematic diagram of task access module
如圖4所示,系統(tǒng)中間件層通過動態(tài)集群構(gòu)建模塊、任務(wù)池構(gòu)建模塊、資源池構(gòu)建模塊及虛擬計算環(huán)境構(gòu)建模塊實現(xiàn)集群、任務(wù)池、資源池的構(gòu)建;實現(xiàn)資源自組織協(xié)同和統(tǒng)一化管理;匹配任務(wù)與資源,配合混合時間驅(qū)動,利用虛擬化技術(shù)構(gòu)建實現(xiàn)實時可控的、可重構(gòu)的虛擬計算環(huán)境進行任務(wù)執(zhí)行.
1.2.1 動態(tài)集群構(gòu)建模塊
動態(tài)集群構(gòu)建模塊實現(xiàn)嵌入式集群的構(gòu)建.多個嵌入式計算板卡在物理上呈現(xiàn)分布式、承載異構(gòu)計算資源的特點,動態(tài)集群構(gòu)建模塊將分布式嵌入式節(jié)點的計算能力進行集中,構(gòu)建集群,對資源和任務(wù)統(tǒng)一調(diào)度、管理.動態(tài)集群構(gòu)建模塊由心跳檢測、數(shù)據(jù)庫一致性、動態(tài)中心選舉三部分組成.
(1)心跳檢測
心跳檢測實現(xiàn)集群中節(jié)點健康狀態(tài)的檢測,在節(jié)點地位對等的主從服務(wù)方式下,對各個節(jié)點進行存活檢測,將新的計算節(jié)點加入集群,對故障節(jié)點進行刪除,是實現(xiàn)資源自組織協(xié)同和統(tǒng)一化管理的基礎(chǔ).當刪除計算節(jié)點時,通過下述數(shù)據(jù)庫一致性策略同步數(shù)據(jù)庫中集群的節(jié)點信息,刪除故障節(jié)點的信息.
(2)數(shù)據(jù)庫一致性
數(shù)據(jù)庫一致性實現(xiàn)集群中各個節(jié)點數(shù)據(jù)庫數(shù)據(jù)的同步.一方面,當有讀數(shù)據(jù)庫操作時,從節(jié)點可以分擔請求、減小主節(jié)點的壓力.另一方面,由于每一個計算節(jié)點均知曉集群的任務(wù)、資源配置信息,當主節(jié)點故障時,可以利用下述動態(tài)中心選舉策略選舉出新的主節(jié)點,同步數(shù)據(jù)庫中數(shù)據(jù),從而解決了主節(jié)點單點故障的問題.
(3)動態(tài)中心選舉
動態(tài)中心選舉實現(xiàn)了集群中主控制節(jié)點的動態(tài)選擇,在數(shù)據(jù)庫一致性的基礎(chǔ)上,利用選舉策略動態(tài)選擇主節(jié)點,主節(jié)點負責集群中任務(wù)、資源的統(tǒng)一管理,實現(xiàn)集群的動態(tài)構(gòu)建.選舉出的主節(jié)點負責任務(wù)的下發(fā),即將具體的任務(wù)及任務(wù)相關(guān)的配置信息,按照一定的策略分發(fā)到某一計算節(jié)點中.當某一計算節(jié)點發(fā)生故障時,主節(jié)點負責故障遷移并將該故障節(jié)點上的任務(wù)重新下發(fā).
1.2.2 任務(wù)池構(gòu)建模塊
任務(wù)池構(gòu)建模塊構(gòu)建集群的任務(wù)池,任務(wù)池中包含集群的全部任務(wù)信息,主節(jié)點從任務(wù)池中順序提取任務(wù)進行處理.
1.2.3 資源池構(gòu)建模塊
資源池構(gòu)建模塊包括資源發(fā)現(xiàn)與可用性檢測兩部分.在嵌入式計算板卡啟動時,完成資源配置的掃描,獲取已注冊的設(shè)備信息并對設(shè)備進行健康檢測,將可用資源信息存入數(shù)據(jù)庫的資源列表中,實現(xiàn)資源發(fā)現(xiàn)與可用性檢測,借助數(shù)據(jù)庫一致性策略構(gòu)建集群的資源池.資源池中包含了整個集群各個嵌入式計算節(jié)點的資源類型、資源數(shù)目、資源健康狀態(tài)等信息.新加入集群的節(jié)點,通過資源發(fā)現(xiàn)與可用性檢測將異構(gòu)資源信息加入到資源池中,對于故障和失效節(jié)點,在心跳檢測機制和數(shù)據(jù)庫一致性的基礎(chǔ)上,資源池自組織的清除故障和失效節(jié)點的異構(gòu)資源信息,從而實現(xiàn)異構(gòu)計算資源的自組織協(xié)同和統(tǒng)一化管理.
1.2.4 虛擬計算環(huán)境構(gòu)建模塊
虛擬計算環(huán)境構(gòu)建模塊將任務(wù)與任務(wù)所需資源匹配,根據(jù)任務(wù)的需求,主節(jié)點構(gòu)建任務(wù)執(zhí)行的虛擬計算環(huán)境,即構(gòu)建任務(wù)執(zhí)行環(huán)境的相關(guān)配置信息,隨任務(wù)一同下發(fā)給計算節(jié)點,計算節(jié)點將任務(wù)與配置環(huán)境整合,利用容器虛擬化技術(shù)構(gòu)建任務(wù)執(zhí)行的虛擬計算環(huán)境[9].這樣實現(xiàn)了資源與環(huán)境的構(gòu)建由任務(wù)觸發(fā),根據(jù)任務(wù)的需要動態(tài)的生成與調(diào)整,即實現(xiàn)了任務(wù)驅(qū)動.在此任務(wù)驅(qū)動的計算平臺上,我們將應(yīng)用及運行環(huán)境打包為Docker鏡像并上傳到Docker倉庫中.使用Docker的方式構(gòu)建虛擬計算環(huán)境,其啟動快速,屬于秒級別[10].如圖5所示,計算節(jié)點按照主節(jié)點下發(fā)的配置信息從Docker倉庫中拉取鏡像,構(gòu)建任務(wù)執(zhí)行的虛擬計算環(huán)境即可,這樣就可以將應(yīng)用的安裝、環(huán)境的配置自動化的完成[11].此外,配合混合時間驅(qū)動設(shè)計,以保證控制的確定性和實時性.
圖4 系統(tǒng)中間件層示意圖Fig.4 The diagram of system middleware layer
硬件層負責嵌入式計算板卡上異構(gòu)資源統(tǒng)一接入、板間網(wǎng)絡(luò)化互聯(lián),實現(xiàn)了標準的可擴展的高速系統(tǒng)總線和異構(gòu)資源統(tǒng)一化組件封裝和接入,使得異構(gòu)資源能夠按照統(tǒng)一的調(diào)用接口及協(xié)議進行管理和通信,為系統(tǒng)高擴展性和異構(gòu)資源的組件化服務(wù)提供硬件支撐.如圖6所示,硬件資源模塊采用“總線-組件”的體系結(jié)構(gòu)設(shè)計,將掛載有異構(gòu)計算資源的控制器板卡通過消息總線定義的標準接口進行網(wǎng)路化互聯(lián)通信.當有新的計算板卡接入時,只需要在系統(tǒng)中將對應(yīng)的板卡IP上進行相應(yīng)配置,即可實現(xiàn)新資源的發(fā)現(xiàn)和定位.
虛擬計算環(huán)境構(gòu)建中,任務(wù)執(zhí)行的環(huán)境由任務(wù)和任務(wù)配置信息動態(tài)生成,即任務(wù)的執(zhí)行環(huán)境是由任務(wù)驅(qū)動構(gòu)建的,基于容器化技術(shù),其執(zhí)行環(huán)境是動態(tài)可重構(gòu)的.
圖5 基于Docker的虛擬計算環(huán)境構(gòu)建Fig.5 Virtual computing environment construction based on Docker
圖6 異構(gòu)計算資源板卡互聯(lián)示意圖Fig.6 Schematic diagram of heterogeneous computing resource board card interconnection
本文利用AIO-RK3399、Core-RK3399ProD、Xilinx UltraScale+MPSoC ZCU102,3種共5張板卡搭建文中所述異構(gòu)計算平臺,所述板卡的硬件信息如表1所示,平臺實物圖如圖7所示.
表1 平臺硬件信息Tab.1 Hardware informations for the platform
圖7 平臺實物圖Fig.7 Physical platform
針對平臺的特點,任務(wù)執(zhí)行的高可用性是關(guān)鍵,因此首先對本文提出的平臺的高可用性進行分析.此外,基于動態(tài)集群構(gòu)建模塊與資源池構(gòu)建模塊,集群可以實現(xiàn)對計算節(jié)點和異構(gòu)計算資源自組織協(xié)同與統(tǒng)一化管理.為了說明本文中基于容器化技術(shù)的任務(wù)執(zhí)行方式的優(yōu)勢,對容器中任務(wù)執(zhí)行的計算性能和資源開銷進行了分析.
下面分別從任務(wù)接入、任務(wù)下發(fā)和任務(wù)執(zhí)行的三方面說明本文提出的平臺架構(gòu)的高可用性.
2.1.1 高可用的任務(wù)接入
在用戶接入層中,任務(wù)接入模塊基于VRRP協(xié)議實現(xiàn)代理集群中的節(jié)點共有一個虛擬IP(VIP),當VIP綁定的節(jié)點故障時,VIP自動漂移到新的代理節(jié)點,對于用戶而言感知不到代理服務(wù)器的變化,從而為用戶提供一個統(tǒng)一、高可用的訪問接口,保證了任務(wù)接入的高可用性.
2.1.2 高可用的任務(wù)下發(fā)
本文采用主節(jié)點動態(tài)選舉技術(shù),當集群中當前的主節(jié)點故障時,通過心跳檢測和數(shù)據(jù)庫一致性策略,該主節(jié)點將從集群中去除,同步數(shù)據(jù)庫后通過動態(tài)中心選舉策略選舉出新的主節(jié)點,繼續(xù)進行任務(wù)下發(fā),避免了主節(jié)點宕機導(dǎo)致整個集群的崩潰,提高了集群的容錯性,保證了集群中主節(jié)點的高可用性,進而保證了任務(wù)下發(fā)的高可用性.
2.1.3 高可用的任務(wù)執(zhí)行
當某一計算節(jié)點故障后,通過心跳檢測和數(shù)據(jù)庫一致性策略,該計算節(jié)點將被從集群中去除,所有在該節(jié)點上正在執(zhí)行的任務(wù)將失敗并由主節(jié)點重新進行資源分配和任務(wù)下發(fā),從而實現(xiàn)了任務(wù)遷移,保證了任務(wù)執(zhí)行的高可用性.
從上面三方面的分析可以看出,本文提出的平臺架構(gòu)在任務(wù)生命周期的各個階段(任務(wù)接入、任務(wù)下發(fā)、任務(wù)執(zhí)行)均是高可用的.
新的計算節(jié)點加入到集群中時,通過資源池構(gòu)建模塊的資源發(fā)現(xiàn)與可用性檢測功能即可檢測到計算節(jié)點的資源信息并保存到數(shù)據(jù)庫中;通過心跳檢測,集群中的節(jié)點檢測到新的計算節(jié)點并將其信息存儲到數(shù)據(jù)庫中.之后,數(shù)據(jù)庫一致性模塊同步集群數(shù)據(jù)庫,將新計算節(jié)點的資源信息同步到集群所有節(jié)點上.到此,新的計算節(jié)點及節(jié)點上的異構(gòu)計算資源自動加入集群中.當集群中某一節(jié)點故障(脫離集群)時,集群通過心跳檢測,檢測到節(jié)點的故障狀態(tài),將故障節(jié)點的節(jié)點信息和資源信息從數(shù)據(jù)庫中移除,數(shù)據(jù)庫一致性策略同步集群資源狀態(tài),則故障節(jié)點的信息已不再集群中,即自動清除了故障節(jié)點.從上述過程可以看出,本文提出的平臺架構(gòu),實現(xiàn)了計算節(jié)點的熱插拔和異構(gòu)資源的自適應(yīng)接入和刪除,資源由集群統(tǒng)一調(diào)度管理,實現(xiàn)了異構(gòu)資源的自組織協(xié)同和統(tǒng)一化管理.
為了測試在容器中執(zhí)行任務(wù)與在主機中執(zhí)行任務(wù)時處理器的計算性能與資源占用情況的差異,在ZCU102平臺上利用Linpack測試工具[12]以浮點計算峰值為評價指標測試處理器的計算性能、利用Apache Benchmark對Nginx服務(wù)進行壓力測試并利用Nmon監(jiān)控資源占用情況[13].
2.3.1 Linpack測試
假設(shè)處理器每個時鐘周期的浮點運算次數(shù)為1,則理論處理器浮點運算峰值為1.2 GHz×1×4核=4.8Gflops.
Linpack測試結(jié)果如表2所示,其中Max表示測試得到的實際處理器浮點計算峰值,定義最大效率為Max與理論處理器浮點計算峰值的比值.我們用最大效率作為處理器計算能力的評價指標.
表2 處理器浮點計算峰值最大效率對比Tab.2 The comparisons of processor floating-pointcomputes peak maximum efficiency
表2中可以看出,相比主機,容器中的任務(wù)執(zhí)行沒有損失處理器的計算能力.
2.3.2 Apache Benchmark測試
分別對主機與容器中的Nginx服務(wù)進行遠程訪問壓力測試,利用Nmon得到的監(jiān)控結(jié)果如表3所示.其中,PE(usr%+sys%)表示任務(wù)在用戶空間與內(nèi)核空間處理器的占用比,PE-WAvg表示處理器資源占用的加權(quán)平均占比.
表3 處理器資源占用對比Tab.3 The comparison of PE resource consumption
表3中可以看出,相比于主機,容器中的處理器加權(quán)平均占比減少了6.6%,即容器中的資源占用更少.
綜合以上兩種測試可以看到,相比于主機,在容器環(huán)境中不會有明顯的計算性能下降,卻有效的減少了資源的占用.此外,基于容器化的任務(wù)分配和部署方式細化了任務(wù)占用資源的粒度,其粒度不再是片級,而是任務(wù)所需的資源大小,即多個任務(wù)各自占有資源的一部分,從而大大提高了資源的利用率.
因此,在本文提出的平臺上,基于容器化的任務(wù)計算環(huán)境的構(gòu)建在不損失計算能力的條件下,可以有效的提高異構(gòu)計算資源的利用率、減少資源占用,從而提升平臺的性能.
本文針對嵌入式計算節(jié)點,提出了一種任務(wù)驅(qū)動的嵌入式可重構(gòu)異構(gòu)計算平臺,從用戶接入、系統(tǒng)中間件、硬件三層詳細闡述了平臺的架構(gòu)和設(shè)計,實現(xiàn)了一種任務(wù)驅(qū)動的、高可用的、異構(gòu)計算資源自組織協(xié)同與統(tǒng)一化管理的嵌入式計算平臺.