概述
本应用说明介绍了当 Qualcomm SVA(Sound Trigger Engine)与自定义语音激活或热词引擎集成在同一 ADSP 镜像中时,如何配置和验证 ADSP island TCM 内存。它涉及两种相关的故障模式:- 创建 ADSP 镜像时出现构建时内存不足(OOM)故障。
- SVA 与自定义引擎同时处于活动状态时出现运行时 TCM 分配故障或 ADSP 崩溃(panic)。
适用范围
本说明面向在所有基于 Qualcomm ADSP 的平台上集成、配置、构建和验证并发语音唤醒引擎的工程师。读者应熟悉 ADSP 镜像生成、island 内存放置、pp_libs_cfg.json、cust_config.xml 以及 ADSP 运行时日志分析。
ADSP island TCM 内存架构
相关的 island TCM 被划分为两个逻辑池。两个池共用同一个固定的物理 island TCM 预算;因此,增大一个池就需要减小另一个池。
可用的 island TCM 总量由硬件和软件配置决定,是固定的。请综合评估池大小、模块放置和模型占用。
自定义 VA 集成期间的构建时 OOM
症状
添加自定义语音激活模块时,ADSP 镜像创建可能会失败,并出现类似以下的错误:QURTOS_VA_ISLAND_POOL 中仅剩约 16 KB,而自定义引擎的小模型需要约 37,000 字节,大模型需要 46,080 字节。
根本原因
目标配置不需要的模块仍被放置在 island 内存中。它们预留的空间减少了自定义热词模块可用的余量。解决方法
审查pp_libs_cfg.json,并为未使用的模块设置 island: False。所记录的示例包括:
voice_wakeup_v2_module,当该配置中未使用 Qualcomm 语音激活时。stage1_pdk_module,当目标配置不需要它时。
pp_libs_cfg.json 中的示例概念:
并发语音激活时的运行时故障
症状
先启用 SVA、随后启用自定义关键词引擎时,ADSP 可能会报告 TCM 分配故障,例如:根本原因
所记录的配置使用TCM_PHYSPOOL = 0x40000(256 KB)。在 SVA 已占用部分共享 island TCM 预算之后,这不足以满足自定义引擎约 46 KB 的运行时分配。该问题仅在并发使用场景中出现,因为合并后的峰值需求超出了可用分区。
池重新平衡示例
64 KB 的转移是针对所记录配置验证过的示例。如果平台、ADSP 镜像、SVA 配置、自定义引擎、模型或模块放置发生变化,请重新评估。
减小
QURTOS_VA_ISLAND_POOL 可以为 TCM_PHYSPOOL 提供更多内存,但会减少 SVA 和其他 VA island 使用者可用的内存。如果剩余的池不足,或者缺少大小合适的对齐空闲块,SVA 初始化、运行时分配、动态映射或并发语音运行可能会失败。
此更改特定于具体配置。在用于生产之前,请通过构建检查、池使用分析以及 SVA/自定义 VA 并发测试进行验证。
内存大小计算方法
在最终确定池大小之前,请执行以下步骤:- 测量每个语音唤醒引擎的 island 和 TCM 占用,包括自定义的小模型和大模型。
- 确定最坏情况下的同时激活场景。
- 计入固定的平台预留以及放置在 island 内存中的所有模块。
- 分配
QURTOS_VA_ISLAND_POOL和TCM_PHYSPOOL,使合并后的峰值需求处于固定的物理 island TCM 预算之内。 - 为分配器开销和配置增长保留实际可用的余量。
配置文件
验证池大小更改时,请记录所使用的确切分支、平台、配置修订版本和模型修订版本。
验证
总结
请按照最坏情况下的并发语音唤醒工作负载设置共享 island TCM 分区的大小,移除不必要的 island 放置,并在生产部署之前完成构建和运行时验证。

