4. HAL层AI调度框架设计

在Camera HAL层引入AI场景识别后,调度框架需要同时处理来自ISP的实时帧数据流与AI推理任务。本章聚焦于HAL层AI任务调度器的架构设计、优先级队列的实现策略以及实时性约束分析,确保AI推理不阻塞主流水线,同时满足场景切换的响应延迟要求。

4.1 HAL层AI任务调度器架构

调度器采用分层解耦设计,将AI任务的生命周期管理与Camera HAL的帧处理流水线分离。核心架构包含三个层次:

  • 任务接入层:接收来自3A算法、ISP统计模块、应用层的AI推理请求,统一封装为AiTask结构体。
  • 调度决策层:基于优先级、帧时间戳、当前负载状态,决定任务入队、抢占或延迟。
  • 执行引擎层:管理NPU/DSP/GPU硬件资源池,负责任务分发与结果回收。
设计原则:调度器不直接持有AI推理硬件句柄,通过抽象接口IExecutor与底层驱动交互,便于跨平台移植。
HAL层AI任务调度器架构 HAL层AI任务调度器架构 任务接入层 (Task Ingress) 3A算法请求 ISP统计模块 应用层回调 帧同步信号 AiTask封装 AiTask封装 AiTask封装 调度决策层 (Scheduler Core) 优先级队列 (实时/高/中/低) 负载监控器 (NPU/CPU/内存) 抢占仲裁器 (帧截止时间) 执行引擎层 (Execution Engine) NPU Executor DSP Executor GPU Executor CPU Fallback

4.2 优先级队列设计

AI任务根据场景敏感度和帧截止时间划分为四个优先级等级。队列内部采用多级反馈机制,允许高优先级任务抢占低优先级任务的执行槽位。

优先级等级 典型任务 最大延迟容忍 抢占策略
实时 (P0) 人脸检测、运动跟踪 < 8 ms 立即抢占,不可阻塞
高 (P1) 场景分类、HDR触发 < 16 ms 等待当前帧完成,下一帧抢占
中 (P2) 物体识别、夜景模式 < 33 ms 排队等待,可被P0/P1抢占
低 (P3) 场景统计、日志分析 > 100 ms 空闲时执行,可被所有高优先级抢占
队列实现要点:使用std::priority_queue配合自定义比较器,比较器同时考虑优先级等级和任务入队时间戳,避免低优先级任务无限饥饿。

4.3 实时性要求分析

Camera HAL层对AI调度有严格的实时性约束,主要来自三个维度:

  • 帧同步实时性:AI推理结果必须在下一帧ISP处理开始前返回,否则场景决策失效。典型帧间隔为33ms(30fps)或16ms(60fps)。
  • 场景切换响应:从暗光切换到夜景模式,或从普通场景切换到人像模式,AI调度器需在3帧以内完成模型切换与预热。
  • 资源竞争隔离:AI推理任务不得占用超过30%的NPU算力,预留资源给3A算法和ISP后处理。
实时性约束与调度时序 实时性约束与调度时序 帧 N N+1 N+2 N+3 N+4 AI推理 场景分类 人脸 HDR触发 统计 截止 截止 截止 实时性约束说明 • 每个AI任务必须在对应帧的截止时间前完成推理 • 高优先级任务(红色/橙色)可抢占低优先级任务(绿色/紫色)的执行槽位 • 调度器通过Earliest Deadline First (EDF)算法辅助决策

4.4 调度策略与关键指标

调度器综合使用以下策略来满足实时性要求:

策略 触发条件 效果
EDF调度 同优先级队列内 截止时间最早的任务优先执行
优先级继承 低优先级任务持有锁 临时提升持有锁任务的优先级,避免死锁
任务降级 连续超时超过3次 降低模型精度或跳过非关键帧
负载均衡 NPU利用率 > 80% 将部分推理任务卸载到DSP或CPU
避坑提示:不要将所有AI任务都设置为P0优先级。过度使用高优先级会导致低优先级任务饥饿,进而影响场景统计和长周期优化。建议P0任务占比不超过总任务量的10%。

4.5 调度器性能基准

在典型骁龙8 Gen3平台上,调度器引入的额外开销应控制在以下范围内:

  • 调度决策延迟:< 50 μs(从任务入队到开始执行)
  • 上下文切换开销:< 10 μs(任务间切换)
  • 内存占用:< 512 KB(包含队列、任务描述符、状态缓存)
  • 最大队列深度:64个待处理任务(防止内存爆炸)

调度器通过无锁队列和内存池技术减少锁竞争和动态分配,确保在极端场景下仍能稳定运行。