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