通過零拷貝共享內(nèi)存技術(shù),黑芝麻智能解決車載多域間大數(shù)據(jù)傳輸?shù)难舆t與資源消耗問題。核心技術(shù)包括全局內(nèi)存管理單元和dmabuf機(jī)制優(yōu)化,顯著降低CPU負(fù)載與DDR帶寬占用,推動汽車向 "場景驅(qū)動" 架構(gòu)演進(jìn)。
零拷貝共享內(nèi)存對車載大數(shù)據(jù)傳輸?shù)男侍嵘?/strong>
武當(dāng)C1200家族芯片典型應(yīng)用場景會有多個系統(tǒng)同時運(yùn)行,如儀表域,輔助駕駛域,座艙域三個系統(tǒng),系統(tǒng)之間存在數(shù)據(jù)共享的需求。雖然可以通過以太網(wǎng)等接口交換數(shù)據(jù),但是對于圖像和視頻等較大的數(shù)據(jù),傳統(tǒng)傳輸方式存在許多缺點(diǎn),比如:傳輸延遲較高;存在數(shù)據(jù)拷貝,消耗CPU和帶寬資源;增加系統(tǒng)負(fù)載和功耗等。進(jìn)而會導(dǎo)致車機(jī)系統(tǒng)出現(xiàn)卡頓,操作響應(yīng)延遲,發(fā)熱發(fā)燙,電源消耗過快,待機(jī)時間變短,器件壽命變短等各種問題。
對于大數(shù)據(jù)量數(shù)據(jù)交換應(yīng)用場景,需要一套零拷貝的共享內(nèi)存機(jī)制來提高傳輸效率,并降低系統(tǒng)負(fù)載和功耗。因此在武當(dāng)C1200家族芯片系統(tǒng)中我們專門設(shè)計全局內(nèi)存管理單元,通過該單元來集中管理全芯片的共享內(nèi)存的申請和釋放,可以實現(xiàn)在多個域、多個系統(tǒng)中共享一個或者多個內(nèi)存塊。該方案具有如下優(yōu)勢:
· 全芯片各個域?qū)崿F(xiàn)數(shù)據(jù)零拷貝
· 降低CPU負(fù)載和系統(tǒng)功耗
· 降低DDR帶寬占用
· 性能高效
· 支持分配安全內(nèi)存
· 滿足ISO26262 ASIL D級別功能安全要求
Linux dmabuf機(jī)制:從“中間商”到“直達(dá)通道”的技術(shù)躍遷
早期Linux系統(tǒng)中,不同硬件設(shè)備(如攝像頭、顯卡、GPU)之間的數(shù)據(jù)傳輸需要多次內(nèi)存拷貝。例如,攝像頭采集的畫面需要先復(fù)制到CPU內(nèi)存,再由CPU傳給GPU處理,最后再復(fù)制到顯存用于顯示。
這種“中間商賺差價”的方式不僅耗時,還浪費(fèi)資源,就像快遞員每次送貨都要重新打包一樣低效。此時急需一種“直達(dá)通道”,讓硬件設(shè)備像流水線工人一樣直接傳遞半成品,無需中間搬運(yùn)。Linux dmabuf機(jī)制的誕生就是為了充當(dāng)這個“直達(dá)通道”。
該機(jī)制可以想象成一種“共享白板”系統(tǒng),讓不同硬件設(shè)備(比如顯卡、攝像頭、GPU)高效傳遞數(shù)據(jù),避免重復(fù)“抄寫”內(nèi)容。舉個例子:假設(shè)畫家(GPU)在畫布上作畫,完成后需要快遞員(顯示驅(qū)動)把畫布送到畫廊(屏幕)展示。傳統(tǒng)方式需要快遞員重新復(fù)制一份畫布再運(yùn)輸,而dmabuf機(jī)制允許快遞員直接拿走原畫布,省去了復(fù)制步驟。
Linux dmabuf heap機(jī)制提供了用戶態(tài)分配dmabuf的接口,它就像硬件設(shè)備的“共享快遞柜”,通過統(tǒng)一接口和獨(dú)立權(quán)限控制,讓不同硬件像快遞員一樣高效協(xié)作,直接存取數(shù)據(jù)包裹。用戶只需“掃碼取件”,復(fù)雜的底層操作由內(nèi)存池自動完成。
在Linux-5.10 內(nèi)核中dmabuf heap提供了分配dmabuf的多個后端實現(xiàn),通過自定義一種后端實現(xiàn)ipc heap,將dmabuf的分配請求通過ipc(核間通信)發(fā)送給全局內(nèi)存管理單元來處理,以此來實現(xiàn)不同系統(tǒng)間共享內(nèi)存的統(tǒng)一管理。
全局內(nèi)存管理單元:ASIL D級安全與O(1)高效算法的雙引擎
全局內(nèi)存管理單元負(fù)責(zé)全局內(nèi)存的分配,釋放和導(dǎo)入等操作,其上運(yùn)行滿足功能安全ASIL D要求的高效內(nèi)存管理算法,具有如下優(yōu)勢:
· 實時性高,執(zhí)行速度快,時間復(fù)雜度為O(1)
· 碎片少,浪費(fèi)少,利用率高
Linux前端對外提供的接口基于標(biāo)準(zhǔn)的dmabuf heap接口進(jìn)行擴(kuò)展,現(xiàn)有的應(yīng)用程序,只需要較小的改動即可使用這個流程。具體方案如下圖所示:
不同汽車功能域的操作系統(tǒng)選擇與其應(yīng)用場景的特性密切相關(guān),比如輔助駕駛域一般使用Linux系統(tǒng),儀表域一般使用QNX或者Linux系統(tǒng),座艙域使用Android系統(tǒng),R核控制域使用RTOS系統(tǒng)。各域操作系統(tǒng)在安全性、實時性、生態(tài)兼容性之間實現(xiàn)平衡,支撐汽車從分布式控制向“軟件定義”轉(zhuǎn)型。圖中一共三個系統(tǒng),以Linux系統(tǒng)為例,對于需要在兩個系統(tǒng)間共享內(nèi)存的場景,軟件實現(xiàn)流程如下:
1. Linux應(yīng)用軟件調(diào)用dmabuf heap接口分配內(nèi)存,指定使用ipc heap,dmabuf heap通過ipc調(diào)用從全局內(nèi)存管理單元獲取內(nèi)存塊的全局文件描述符,并將其導(dǎo)出為本地Linux dmabuf,得到本系統(tǒng)內(nèi)的文件描述符。
2. 在Linux系統(tǒng)內(nèi)共享,將本地系統(tǒng)文件描述符傳給使用者,使用者根據(jù)文件描述符即可導(dǎo)入dmabuf,實現(xiàn)本系統(tǒng)內(nèi)設(shè)備之間共享使用。
3. 跨系統(tǒng)共享,通過dmabuf heap接口獲取對應(yīng)的全局文件描述符,將全局文件描述符傳給需要使用該內(nèi)存塊的系統(tǒng)。
o 若目的域是Linux系統(tǒng),根據(jù)拿到的全局文件描述符,將其導(dǎo)出為dmabuf, 得到本系統(tǒng)內(nèi)的文件描述符,即可以在本系統(tǒng)內(nèi)的設(shè)備之間共享使用。
o 若目的域是RTOS域,由于不存在類似Linux上面的dmabuf heap內(nèi)存分配框架,所以通過ipc調(diào)用根據(jù)全局描述符得到內(nèi)存塊的物理地址,直接使用物理地址進(jìn)行共享。
案例1:智能座艙與輔助駕駛的協(xié)同渲染——從導(dǎo)航界面到緊急信息零延遲
· 座艙域(Android)生成導(dǎo)航界面,通過跨域內(nèi)存機(jī)制共享給輔助駕駛域(Linux)疊加實時路況。
· 輔助駕駛域處理完成后,再通過跨域內(nèi)存機(jī)制傳遞給儀表域(QNX)顯示,確保緊急信息零延遲。
這種設(shè)計既保證了Linux系統(tǒng)的靈活性,又兼容了RTOS的高效性,支撐汽車向“軟件定義”演進(jìn)。
案例2:環(huán)境建模與AR導(dǎo)航的實時聯(lián)動——從傳感器到AR-HUD的毫秒級響應(yīng)
· 輔助駕駛域生成環(huán)境模型。輔助駕駛系統(tǒng)(Linux/QNX系統(tǒng))通過激光雷達(dá)、攝像頭等傳感器實時采集道路信息,構(gòu)建高精度3D環(huán)境模型(包含障礙物、車道線、交通標(biāo)志等數(shù)據(jù)),并將模型存儲在跨域共享內(nèi)存中。
· 智能座艙域調(diào)用共享數(shù)據(jù)。座艙域(Android系統(tǒng))從共享內(nèi)存池中直接讀取環(huán)境模型數(shù)據(jù),通過AR-HUD(增強(qiáng)現(xiàn)實抬頭顯示)將導(dǎo)航指引、車道偏離預(yù)警等信息疊加到駕駛員視野中,實現(xiàn)零拷貝渲染。
· 儀表域與控制域的協(xié)同響應(yīng)。儀表域(QNX系統(tǒng))從共享內(nèi)存中提取關(guān)鍵駕駛狀態(tài)數(shù)據(jù)(如車速、能耗),實時刷新數(shù)字儀表顯示。控制域(RTOS系統(tǒng))直接訪問共享內(nèi)存中的車輛控制指令(如緊急制動信號),通過CAN總線發(fā)送至執(zhí)行機(jī)構(gòu),確保毫秒級響應(yīng)。
性能實測:C1200跨域內(nèi)存機(jī)制如何打破“煙囪式”數(shù)據(jù)孤島
不同并發(fā)與負(fù)載場景下,對ADAS域內(nèi)和全局內(nèi)存管理單元的性能測試數(shù)據(jù),如下所示:
表1是ADAS域在不同負(fù)載和并發(fā)的測試場景下,Linux系統(tǒng)內(nèi)核使用系統(tǒng)自帶的機(jī)制來分配和釋放域內(nèi)內(nèi)存的時間的測試數(shù)據(jù)。
表2是ADAS域在不同負(fù)載和并發(fā)的測試場景下,Linux系統(tǒng)內(nèi)核使用我們提供的跨域內(nèi)存機(jī)制分配和釋放內(nèi)存的時間的測試數(shù)據(jù)。
表3是R核域在空負(fù)載和并發(fā)線程數(shù)1的測試場景下,RTOS系統(tǒng)使用我們提供的跨域內(nèi)存機(jī)制分配和釋放內(nèi)存的時間的測試數(shù)據(jù)。
通過對比表1,2,3中的數(shù)據(jù),可以得出如下結(jié)論:
C1200全局跨域內(nèi)存機(jī)制的性能指標(biāo)參數(shù)與ADAS域Linux系統(tǒng)內(nèi)核自帶的機(jī)制的性能指標(biāo)參數(shù)處于同一數(shù)量級,可滿足實際業(yè)務(wù)需求。
跨域內(nèi)存共享技術(shù)打破了傳統(tǒng)“煙囪式”數(shù)據(jù)孤島,支撐多域?qū)崟r協(xié)同,是汽車從“功能疊加”向“場景驅(qū)動”演進(jìn)的關(guān)鍵使能技術(shù)。