如何优化大规模回归测试的执行时间?
解读
国内先进工艺SoC项目一次完整回归动辄十万级用例、千亿级仿真周期,跑完常需十几到几十小时。验证经理面试时问“怎么提速”,并非想听“加机器”这种预算型答案,而是考察候选人能否从流程、平台、用例、调度、工具链五个维度给出可落地、可量化、可复现的系统化方案,并兼顾芯片厂普遍存在的“人少、机少、节点紧”的现实。
知识点
- 回归分层策略:Smoke、Weekly、Full、Sign-off四级回归,国内主流公司采用“每日凌晨Smoke+白天Weekly”双轨制。
- TestRank算法:基于代码覆盖率、功能覆盖率、历史Bug命中率、用例失败率四维权重动态排序,优先跑“高价值”用例。
- 并行度模型:Amdahl定律在仿真农场的实际表现,国内机房普遍万兆以太+56G IB混合网络,需把通信开销控制在5 %以内。
- 增量编译与X-propagation:VCS的incr compile、Questa的vopt incremental,可缩短30 %编译时间;打开X-prop可提前暴露0/1-X转换问题,减少二次回归。
- 用例瘦身技术:
- 约束松弛回卷(constraint rollback):把“硬约束”降级为“软约束”,减少求解器回溯。
- 事务级降采样:VIP内部每64拍采样一次协议检查,仿真速度提升1.8×,覆盖率损失<0.3 %。
- 硬件加速回归:
- ZeBu、Palladium的“Swap & Play”模式,把Boot ROM到OS启动段跑在加速器,剩余随机用例回退到仿真器,整体提速8×。
- 国内流片前三个月必须过“一周一回归”门槛,否则无法赶上MPW班车。
- 智能失败重跑:失败用例自动二分定位种子,配合Jenkins + Redis缓存,重跑时间从全量2 h降到10 min。
- 覆盖率驱动的用例裁剪:基于“覆盖率饱和曲线”N-1原则,当某覆盖点连续三拍无增长即标记为饱和,后续回归可跳过相关用例,平均节省15 %仿真周期。
- 资源调度:国内普遍使用Slurm + LSF混合集群,需把License峰值错开到凌晨2-5点,避免“抢license”导致空转。
- 版本基线冻结:每周二四晚上20:00冻结RTL,验证侧22:00前提交用例,保证夜间农场满载率>90 %,否则次日晨会通报。
答案
“我负责的项目曾把单次Full Regression从38小时压到9小时,分五步:
第一步,用TestRank算法对10.2万条用例打分,按权重取TOP 30 %先跑,两小时即可达到85 %覆盖率,提前暴露90 %的Bug。
第二步,在编译阶段打开VCS的incr compile + parallel compile,把原本1.2小时的编译时间降到18分钟;同时打开-Xprop+race,提前发现X态传播问题,减少二次回归轮次。
第三步,用例瘦身:把DDR控制器VIP的时序检查从每拍采样改为每64拍采样,单用例仿真周期减少40 %,覆盖率损失经评估仅0.28 %,可接受。
第四步,农场侧做“动态分片”:基于Slurm的job array,把单用例拆成8~32个并行种子,跑在32核刀片上,通信开销用RAMdisk降到3 %;同时把License密集型用例(形式验证、VIP)错峰到后半夜,整体机器利用率从62 %提到91 %。
第五步,失败用例智能重跑:第一次失败立即触发二分种子,缓存波形到Redis,重跑只需拉取增量信号,平均重跑时间从120分钟降到8分钟;若连续三次失败则自动开JIRA高优先级Bug,避免人工反复确认。
通过这五步,我们在TSMC 7 nm项目上实现了“一晚一回归”,流片前零致命Bug,最终一次成功。”
拓展思考
- 云端弹性农场:国内部分初创公司已把夜间闲置的阿里云E-HPC GPU节点挂载本地Slurm,白天仿真、晚上训练AI模型,成本降低35 %,但需解决数据出境合规问题。
- AI生成用例:基于GPT+RL的测试序列生成,已在某AI芯片GPU-NOC验证中试用,用例数减少50 %而覆盖率反增4 %,未来可能颠覆“随机约束”方法论。
- 覆盖率合并策略:当项目进入Sign-off阶段,需把仿真、形式、EMU、FPGA四端覆盖率统一合并,国内主流采用UCIS 2.0 + SQLite轻量库,合并时间从4小时降到15分钟,但跨工具语义对齐仍是痛点。