隨著5G商用的漸近,通信行業(yè)也迎來了5G的機(jī)遇與挑戰(zhàn)。大規(guī)模機(jī)器類通信、超可靠、低延遲通信需求場景(智能家居、智慧城市、增強(qiáng)現(xiàn)實(shí)、工業(yè)自動化、自動駕駛等)的興起,對未來網(wǎng)絡(luò)的計算和流量轉(zhuǎn)發(fā)能力提出了更高的要求。通用CPU設(shè)備已經(jīng)無法滿足處理海量數(shù)據(jù)、圖片、流量的需求。
根據(jù)不同業(yè)務(wù)場景和自身優(yōu)勢,通訊廠商引入GPU、FPGA等進(jìn)行加速,推出了各種加速硬件方案。對于異構(gòu)加速硬件,要運(yùn)行在各種CloudOS上,再被上層廠家的VNF調(diào)用,假如沒有一個統(tǒng)一的標(biāo)準(zhǔn)來管理這些加速卡,沒有統(tǒng)一的接口來讓上層網(wǎng)元調(diào)用,將會造成比較嚴(yán)重的問題。
為了實(shí)現(xiàn)NFV異構(gòu)加速硬件的統(tǒng)一管理, ETSI制定了NFV加速硬件統(tǒng)一管理軟件框架標(biāo)準(zhǔn)。此后,該標(biāo)準(zhǔn)被拓展至更多場景,并在OpenStack孵化出了Cyborg項目。
Cyborg,目前唯一的開源硬件加速管理軟件項目
Cyborg的主要功能包括硬件資源的發(fā)現(xiàn)、上報、掛載\卸載等資源管理。用戶可以通過Cyborg列出計算節(jié)點(diǎn)上已經(jīng)被發(fā)現(xiàn)和上報的加速器、并創(chuàng)建帶加速器的實(shí)例。對于一些特殊硬件的特殊功能或配置(如:FPGA的編程),也將在cyborg實(shí)現(xiàn)。
Cyborg采用經(jīng)典架構(gòu),由cyborg-api、cyborg-conductor、cyborg-agent、 cyborg-db幾個模塊組成。其中Cyborg-agent位于計算節(jié)點(diǎn),用于監(jiān)控加速器;cyborg-conductor位于控制節(jié)點(diǎn),管理整個系統(tǒng)和操作數(shù)據(jù)庫。cyborg-api和cyborg-db分別為接口和數(shù)據(jù)庫,均位于控制節(jié)點(diǎn)。
下面通過Cyborg的兩個流程來介紹其主要功能:資源發(fā)現(xiàn)和上報流程、創(chuàng)建帶加速硬件的實(shí)例流程。
加速資源發(fā)現(xiàn)和上報流程:
1. 各設(shè)備的driver為加速設(shè)備構(gòu)造Cyborg中用于描述設(shè)備的數(shù)據(jù)結(jié)構(gòu),等待cyborg-agent輪詢?nèi)∽咴O(shè)備數(shù)據(jù);
2. cyborg-agent周期性掃描計算節(jié)點(diǎn)enabled的driver;
3. cyborg-agent獲取到driver上報來的數(shù)據(jù)信息后,通過cyborg-conductor將資源信息寫入placement(更新Resource Provider(RP), Resource Class(RC),traits)和cyborg-db(更新devices, deployables, attach_handles, attributes, controlpath_ids)
創(chuàng)建帶加速硬件的實(shí)例流程:
1. User在cyborg創(chuàng)建一個加速資源模板device_profile(類似于nova flavor);
2. User創(chuàng)建flavor,并在extra-spec屬性中設(shè)置device_profile的name;
3. User 使用已創(chuàng)建的flavor 發(fā)送boot虛機(jī)請求;
4. Nova-api接受到請求以后, 向cyborg發(fā)起請求獲取device_profile信息,并將device_profile信息合入request_spec,用于調(diào)度;
5. 調(diào)度過程中nova-scheduler向placement請求獲取符合request_spec中要求的硬件加速資源,placement返回滿足要求的主機(jī)列表,之后主機(jī)列表再通過nova-scheduler其他Filter的過濾,排序后選定某個主機(jī);
6. Nova-compute在選定的主機(jī)上部署實(shí)例,并向cyborg請求加速資源的掛載操作:
Nova-compute根據(jù)device_profile向cyborg請求創(chuàng)建加速器請求(Accelerator Request, ARQ),并為每個ARQ匹配硬件資源Resource Provider(RP)。 需要說明的是:ARQ包含instance_uuid、 resource_provider_id、host_name、 device_profile_id等字段信息。一個ARQ對應(yīng)一個device_profile_group, 一個device_profile_group對應(yīng)request spec中的一個request group。
Nova-compute向cyborg發(fā)送綁定設(shè)備(bind_ARQ)的請求。Cyborg根據(jù)ARQ信息綁定instance、host、device,綁定結(jié)束后更新ARQ的狀態(tài),并通知nova當(dāng)前ARQ綁定操作是否成功;
Nova-compute接到ARQ綁定操作結(jié)束的通知后,從ARQ獲取設(shè)備信息,并將設(shè)備BDF信息寫入instance的XML文件。
中興通訊持續(xù)社區(qū)貢獻(xiàn)
社區(qū)T版本的主要工作在于實(shí)現(xiàn)S版本重新定義的加速硬件數(shù)據(jù)結(jié)構(gòu)、基本發(fā)現(xiàn)、上報、掛載流程,目前社區(qū)已實(shí)現(xiàn)基本的管理功能,與placement交互基本完成,與nova組件的交互尚在推進(jìn)中,有待成熟。另一方面社區(qū)在提升Cyborg代碼規(guī)范、及產(chǎn)品可用性方面也投入了大量精力:T版本引入集成測試、并全面引入flak8測試提升源代碼的規(guī)范、python3支持。Driver的支持方面,cyborg社區(qū)T版本新增了AICHIP ASCEND Driver。
我司從Queens版本開始投入Cyborg,歷經(jīng)四個版本,見證了Cyborg功能的逐步實(shí)現(xiàn)和完善?傮w來說,中興通訊的貢獻(xiàn)主要在三方面: 第一、Cyborg與Nova交互的集成測試以促進(jìn)Cyborg的商用進(jìn)程 (包括了加速硬件需求的接口測試,?設(shè)備調(diào)度和掛載測試,設(shè)備上報數(shù)據(jù)庫,Tempest CI及測試);第二、對現(xiàn)有Driver 的維護(hù)、支持更多的Driver (eg. ZTE自研高精度時鐘卡Driver);第三、提升源代碼規(guī)范和質(zhì)量(全面改善flake8測試)、完善接口文檔。
在OpenStack Train Release中,中興通訊在項目的commits和reviews均排名第二。中興通訊在項目擁有兩位Core Reviewer。在未來,中興通訊將持續(xù)投入在Cyborg中,為Cyborg項目的發(fā)展做出貢獻(xiàn)。