
一塊 GPU 渲染好的圖像,要送去顯示、要交給視頻編碼器錄屏、要被 AI 模型讀取分析——同一份數據,多個設備、多個進程都想用。這就是「BO 共享」要解決的問題。本節先做需求分析(為什么需要共享、共享難在哪里),再建立一整套核心概念(exporter/importer、handle 與 fd、dma_buf 抽象、引用計數、dma_resv同步),作為第五章后續各節(dma-buf 機制、prime、同步)的地圖與索引。1. 引言:為什么"共享"而非"拷貝"在現代 SoC、嵌入式與圖形/多媒體系統中,CPU、GPU、VPU(視頻處理單元)、ISP(圖像信號處理器)、NPU、DMA 控制器等多個加速單元需要協同處理同一批大塊數據——圖像幀、視頻流、AI 張量、3D 紋理。它們之間傳遞數據,天然有兩條路:拷貝一份副本,或共享同一塊物理內存。拷貝的代價在數據量面前迅速失控。以一路 4K@60fps 未壓縮視頻為例,僅 ISP→VPU、ISP→GPU 兩條拷貝就要吃掉 ~2 GB/s 內存帶寬;再疊加多路、多消費者,帶寬、延遲、內存占用、功耗全面惡化,CPU 還被拖去做無謂的搬運。因此:BO(Buffer Object)共享機制的核心目標是零拷貝(zero-copy)——讓多個設備/進程直接訪問同一塊后端存儲,而非各持副本。零拷貝在現代應用里已不是「優化項」,而是「必需項」。