黑芝麻一芯多域零拷贝共享内存技术:破解车载大数据传输效能困局

B站影视 港台电影 2025-06-23 18:25 1

摘要:武当C1200家族芯片典型应用场景会有多个系统同时运行,如仪表域,辅助驾驶域,座舱域三个系统,系统之间存在数据共享的需求。虽然可以通过以太网等接口交换数据,但是对于图像和视频等较大的数据,传统传输方式存在许多缺点,比如:传输延迟较高;存在数据拷贝,消耗CPU和

武当C1200家族芯片典型应用场景会有多个系统同时运行,如仪表域,辅助驾驶域,座舱域三个系统,系统之间存在数据共享的需求。虽然可以通过以太网等接口交换数据,但是对于图像和视频等较大的数据,传统传输方式存在许多缺点,比如:传输延迟较高;存在数据拷贝,消耗CPU和带宽资源;增加系统负载和功耗等。进而会导致车机系统出现卡顿,操作响应延迟,发热发烫,电源消耗过快,待机时间变短,器件寿命变短等各种问题。

对于大数据量数据交换应用场景,需要一套零拷贝的共享内存机制来提高传输效率,并降低系统负载和功耗。因此在武当C1200家族芯片系统中我们专门设计全局内存管理单元,通过该单元来集中管理全芯片的共享内存的申请和释放,可以实现在多个域、多个系统中共享一个或者多个内存块。该方案具有如下优势:

早期Linux系统中,不同硬件设备(如摄像头、显卡、GPU)之间的数据传输需要多次内存拷贝。例如,摄像头采集的画面需要先复制到CPU内存,再由CPU传给GPU处理,最后再复制到显存用于显示。

这种“中间商赚差价”的方式不仅耗时,还浪费资源,就像快递员每次送货都要重新打包一样低效。此时急需一种“直达通道”,让硬件设备像流水线工人一样直接传递半成品,无需中间搬运。Linux dmabuf机制的诞生就是为了充当这个“直达通道”。

该机制可以想象成一种“共享白板”系统,让不同硬件设备(比如显卡、摄像头、GPU)高效传递数据,避免重复“抄写”内容。举个例子:假设画家(GPU)在画布上作画,完成后需要快递员(显示驱动)把画布送到画廊(屏幕)展示。传统方式需要快递员重新复制一份画布再运输,而dmabuf机制允许快递员直接拿走原画布,省去了复制步骤。

Linux dmabuf heap机制提供了用户态分配dmabuf的接口,它就像硬件设备的“共享快递柜”,通过统一接口和独立权限控制,让不同硬件像快递员一样高效协作,直接存取数据包裹。用户只需“扫码取件”,复杂的底层操作由内存池自动完成。

在Linux-5.10 内核中dmabuf heap提供了分配dmabuf的多个后端实现,通过自定义一种后端实现ipc heap,将dmabuf的分配请求通过ipc(核间通信)发送给全局内存管理单元来处理,以此来实现不同系统间共享内存的统一管理。

全局内存管理单元负责全局内存的分配,释放和导入等操作,其上运行满足功能安全ASIL D要求的高效内存管理算法,具有如下优势:

· 实时性高,执行速度快,时间复杂度为O(1)

· 碎片少,浪费少,利用率高

Linux前端对外提供的接口基于标准的dmabuf heap接口进行扩展,现有的应用程序,只需要较小的改动即可使用这个流程。具体方案如下图所示:

不同汽车功能域的操作系统选择与其应用场景的特性密切相关,比如辅助驾驶域一般使用Linux系统,仪表域一般使用QNX或者Linux系统,座舱域使用Android系统,R核控制域使用RTOS系统。各域操作系统在安全性、实时性、生态兼容性之间实现平衡,支撑汽车从分布式控制向“软件定义”转型。图中一共三个系统,以Linux系统为例,对于需要在两个系统间共享内存的场景,软件实现流程如下:

1. Linux应用软件调用dmabuf heap接口分配内存,指定使用ipc heap,dmabuf heap通过ipc调用从全局内存管理单元获取内存块的全局文件描述符,并将其导出为本地Linux dmabuf,得到本系统内的文件描述符。

2. 在Linux系统内共享,将本地系统文件描述符传给使用者,使用者根据文件描述符即可导入dmabuf,实现本系统内设备之间共享使用。

3. 跨系统共享,通过dmabuf heap接口获取对应的全局文件描述符,将全局文件描述符传给需要使用该内存块的系统。

o 若目的域是Linux系统,根据拿到的全局文件描述符,将其导出为dmabuf, 得到本系统内的文件描述符,即可以在本系统内的设备之间共享使用。

o 若目的域是RTOS域,由于不存在类似Linux上面的dmabuf heap内存分配框架,所以通过ipc调用根据全局描述符得到内存块的物理地址,直接使用物理地址进行共享。

案例1:智能座舱与辅助驾驶的协同渲染——从导航界面到紧急信息零延迟

· 座舱域(Android)生成导航界面,通过跨域内存机制共享给辅助驾驶域(Linux)叠加实时路况。

· 辅助驾驶域处理完成后,再通过跨域内存机制传递给仪表域(QNX)显示,确保紧急信息零延迟。

这种设计既保证了Linux系统的灵活性,又兼容了RTOS的高效性,支撑汽车向“软件定义”演进。

案例2:环境建模与AR导航的实时联动——从传感器到AR-HUD的毫秒级响应

· 辅助驾驶域生成环境模型。辅助驾驶系统(Linux/QNX系统)通过激光雷达、摄像头等传感器实时采集道路信息,构建高精度3D环境模型(包含障碍物、车道线、交通标志等数据),并将模型存储在跨域共享内存中。

· 智能座舱域调用共享数据。座舱域(Android系统)从共享内存池中直接读取环境模型数据,通过AR-HUD(增强现实抬头显示)将导航指引、车道偏离预警等信息叠加到驾驶员视野中,实现零拷贝渲染

· 仪表域与控制域的协同响应。仪表域(QNX系统)从共享内存中提取关键驾驶状态数据(如车速、能耗),实时刷新数字仪表显示。控制域(RTOS系统)直接访问共享内存中的车辆控制指令(如紧急制动信号),通过CAN总线发送至执行机构,确保毫秒级响应。

不同并发与负载场景下,对ADAS域内和全局内存管理单元的性能测试数据,如下所示:

表1是ADAS域在不同负载和并发的测试场景下,Linux系统内核使用系统自带的机制来分配和释放域内内存的时间的测试数据。

表2是ADAS域在不同负载和并发的测试场景下,Linux系统内核使用我们提供的跨域内存机制分配和释放内存的时间的测试数据。

表3是R核域在空负载和并发线程数1的测试场景下,RTOS系统使用我们提供的跨域内存机制分配和释放内存的时间的测试数据。

通过对比表1,2,3中的数据,可以得出如下结论:

C1200全局跨域内存机制的性能指标参数与ADAS域Linux系统内核自带的机制的性能指标参数处于同一数量级,可满足实际业务需求。

跨域内存共享技术打破了传统“烟囱式”数据孤岛,支撑多域实时协同,是汽车从“功能叠加”向“场景驱动”演进的关键使能技术。

来源:高工智能汽车

相关推荐