关于ZAKER 合作
雷锋网 1小时前

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

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

通过零拷贝共享内存技术,黑芝麻智能解决车载多域间大数据传输的延迟与资源消耗问题。核心技术包括全局内存管理单元和 dmabuf 机制优化,显著降低 CPU 负载与 DDR 带宽占用,推动汽车向 " 场景驱动 " 架构演进。

零拷贝共享内存对车载大数据传输的效率提升

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

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

该方案具有如下优势:

· 全芯片各个域实现数据零拷贝

· 降低 CPU 负载和系统功耗

· 降低 DDR 带宽占用

· 性能高效

· 支持分配安全内存

· 满足 ISO26262 ASIL D 级别功能安全要求

Linux dmabuf 机制:从 " 中间商 " 到 " 直达通道 " 的技术跃迁

早期 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 ) 高效算法的双引擎

全局内存管理单元负责全局内存的分配,释放和导入等操作,其上运行满足功能安全 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 总线发送至执行机构,确保毫秒级响应。

性能实测:C1200 跨域内存机制如何打破 " 烟囱式 " 数据孤岛

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

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

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

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

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

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

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