T33-自动化测试反复跑 test 触发 OOM:ISP bin 内存改 vmalloc 并缩减分配大小

T33-自动化测试反复跑 test 触发 OOM:ISP bin 内存改 vmalloc 并缩减分配大小

适用场景

        在 T32Pro(及同类平台)做自动化测试、反复轮询 test 程序时,出现 OOM 内存错误,且摄数越多越明显。本文适用于排查这类「重复运行导致的累计/分配内存不足」问题,重点是 ISP bin 文件的内存分配方式与大小。

问题现象

        T32Pro 跑自动化测试反复轮询 test 程序报 OOM,双摄、三摄、四摄均出现。关键对照:相同双摄 500W 配置下 T32-NQ 正常,仅 T32Pro 报 OOM;test 之间加延时后概率缓解但未解决,重复跑同一个 test 即可复现。

根因分析

        OOM 的根因是 ISP bin 文件内存使用 kmalloc 分配,且默认分配偏大:

    • kmalloc 分配的是连续物理内存,分配大块时更容易因内存碎片化失败;

    • bin 默认分配较大,在自动化测试反复加载 bin 的场景下,物理连续内存被反复占用,最终触发 OOM。

    「加延时概率缓解」说明与重复分配/释放的时序相关,但根因在分配方式与大小,延时只是降低复现概率。

排查与修复方法

    第一步,确认对照关系。用同配置在小内存压力或不同芯片(T32-NQ vs T32Pro)上对比,锁定是平台/分配路径差异。

    第二步,定位 ISP bin 的内存分配。确认 bin 解析加载时用 kmalloc 还是 vmalloc、分配大小是多少。

    第三步,改为 vmalloc。vmalloc 分配虚拟连续(物理可不连续)内存,对大块分配更友好,降低 OOM 风险。

    第四步,缩减分配大小。将 bin 分配由 400 缩减为 200(K),并同步修改 SDK 侧 mmap,保证驱动与 SDK 一致。

    第五步,压测验证。反复运行 test,确认不再 OOM;并对大分辨率 sensor(如 800 万)回归,确认缩减后无副作用。

验证结果

        修改后测试数天有效,代码(SDK + ISP)已入库,T32Pro 与 CW080 同步修改,后续数日测试 ok。

使用建议

        排查自动化测试反复运行导致的 OOM,优先检查大块内存的分配方式(kmalloc 的物理连续限制)与分配大小是否可优化;改 vmalloc + 缩减分配是常见有效手段,但需回归大分辨率场景确认无副作用。



评论交流 (共 0 条)