149、各平台 Camera 内存架构:ION、DMA-BUF、CMA 在不同平台上的实现差异

149、各平台 Camera 内存架构:ION、DMA-BUF、CMA 在不同平台上的实现差异
149、各平台 Camera 内存架构:ION、DMA-BUF、CMA 在不同平台上的实现差异从一次半夜的预览卡顿说起去年做一款高通SM8450平台的旗舰机,Camera HAL层对接第三方算法库时,预览流突然出现周期性卡顿——每3秒掉一帧,持续半秒。抓了systrace,发现是CPU在访问预览buffer时发生了page fault,而GPU那边还在等同一个buffer的sync fence。更诡异的是,同样的算法库在MTK天玑9000上跑得丝滑,换到高通就翻车。排查到最后,问题出在ION heap分配策略上:高通默认用了system heap,而MTK那边走的是camera专用heap,物理连续性和cache一致性策略完全不同。这种跨平台的内存分配差异,是Camera系统中最隐蔽的坑。今天就把ION、DMA-BUF、CMA这三兄弟在不同平台上的实现差异掰开揉碎讲清楚。ION:从高通独占到Android标配,但各家改得面目全非ION最初是高通搞出来的,后来被Android官方收编,但各芯片厂商的实现在细节上已经分道扬镳。高通平台的ION heap类型最丰富。camera流通常走ion_camera_heap或ion_system_heap。这里有个关键区别:ion_camera_heap分配的是物理连续内存,而ion_