2. Xcelium仿真性能度量体系

在性能回归与仿真加速工程中,最忌讳的一句话是“感觉变快了”。要让优化可复现、可比较、可验收,必须先把“快”拆解成一组可采集、可对比、可归因的量化指标。Xcelium 的性能度量体系通常围绕五个维度展开:编译时间、仿真速度、内存占用、CPU 利用率与回归通过率。前四者刻画“跑得多快、多省”,最后一个刻画“跑得对不对”——脱离通过率的加速没有工程意义。

五个核心指标的定义与采集口径

指标本身不难理解,难的是口径统一。同一份设计,用不同命令、不同统计窗口采集,结果可能相差数倍。因此每个指标都要固定“采集什么、从哪里取、以什么为分母”。

指标定义典型采集来源单位/口径
编译时间从启动 xrun 到 elaboration 完成、可进入仿真xrun 日志时间戳、-elaborate 阶段耗时秒(s),区分单次/增量
仿真速度单位时间内推进的仿真时间仿真结束报告、$finish 前后时间差ns/s 或 仿真时间/墙钟时间
内存占用仿真进程峰值物理内存/usr/bin/time -v、ps 采样、Xcelium 内存报告MB / GB(峰值 RSS)
CPU 利用率进程占用 CPU 时间与墙钟时间之比time 输出 user+sys、top 采样百分比,可大于 100%(多线程)
回归通过率通过用例数 / 总用例数回归报告、xrun 退出码、UVM 报告百分比

需要特别强调两个口径问题。第一,仿真速度的分母是墙钟时间而非 CPU 时间,否则多线程优化会被误判。第二,内存要取峰值 RSS 而非平均值,因为仿真崩溃往往发生在内存峰值时刻,平均值会掩盖风险。

指标之间的耦合关系

这五个指标不是孤立的,它们之间存在明显的相互制约。下图展示了各指标在仿真流程中的位置及其耦合方向:编译时间与内存占用共同决定“启动成本”,仿真速度与 CPU 利用率共同决定“运行效率”,而回归通过率是最终约束——任何加速手段若导致通过率下降,都必须回退。

Xcelium 性能度量体系:指标位置与耦合关系 编译/elaboration 阶段 仿真运行阶段 编译时间 xrun 启动 → elaboration 完成 单位:秒(区分单次/增量) 内存占用 峰值 RSS(非平均值) 单位:MB / GB 仿真速度 仿真时间 / 墙钟时间 单位:ns/s CPU 利用率 (user+sys) / wall 可 >100%(多线程) 回归通过率 通过用例 / 总用例 加速的最终约束条件 编译产物影响运行效率 内存不足触发换页→降速 速度提升需通过率不降 编译优化不得改变功能 回退约束 采集口径统一是可比性的前提:仿真速度用墙钟时间,内存用峰值 RSS,CPU 利用率区分单/多线程

采集实操:从命令行到日志

指标采集要落到具体命令上。以下是一段可直接参考的采集方式,用 /usr/bin/time -v 包裹 xrun,同时捕获墙钟、CPU 与峰值内存:

/usr/bin/time -v xrun -f run.f -l sim.log 2> time.log

# 从 time.log 提取关键字段
grep -E "Elapsed|User time|System time|Maximum resident" time.log

# 从 sim.log 提取仿真时间推进量
grep -E "Simulation time|\\$finish" sim.log

假设某次回归的采集结果为:编译 420 s、仿真推进 2.4 ms 仿真时间、墙钟 600 s、峰值 RSS 6.8 GB、user+sys 合计 540 s。则可计算:仿真速度 = 2.4 ms / 600 s ≈ 4.0 ns/s;CPU 利用率 = 540 / 600 = 90%(单线程场景下说明存在约 10% 的 I/O 或等待开销)。若该用例在 8 线程下 user+sys 达到 3200 s,则利用率约 533%,说明多线程确实在并行工作,此时仿真速度的提升才有依据。

采集时务必固定机器负载、关闭其他大内存进程,并记录 Xcelium 版本与编译选项。同一指标在不同版本、不同 -mce/-j 参数下不可直接横向比较。

指标解读:从数字到归因

拿到数字只是第一步,解读才是价值所在。常见的判读逻辑如下:

  • 编译时间突增:优先检查是否触发了全量重编译(增量编译失效)、是否新增了大量 include 或宏展开,而非直接归因于机器变慢。
  • 仿真速度下降但 CPU 利用率同步下降:典型信号是 I/O 瓶颈或内存换页,应检查峰值 RSS 是否逼近物理内存上限。
  • CPU 利用率高但仿真速度不涨:可能是多线程争用、锁竞争或调试波形(如 -access +rwc)带来的额外开销。
  • 通过率下降:无论速度提升多少,都必须先定位是编译选项、时序约束还是测试平台改动导致,不能以“加速”为由放行。
回归通过率是“一票否决”指标。若某次优化使仿真速度提升 30% 但通过率从 100% 降到 97%,正确做法是回退并定位那 3% 的失败用例,而不是接受“整体更快”的结论。

建立基线:让指标可比较

单次采集没有意义,必须建立性能基线。建议对每个回归套件固定一组基线参数:同一 Xcelium 版本、同一编译选项、同一机器配置、同一随机种子。每次回归后将五项指标写入统一记录,形成趋势。判断标准可以量化为:仿真速度波动超过 ±5%、峰值内存超过 ±10%、通过率低于 100% 时触发告警。这样,性能回归才从“凭感觉”变成“看数据”,后续的加速手段也才有明确的验收依据。