VS Code Extensions
Smarterasemi Profiler

Smarterasemi Profiler

by smartera-test

Import a run folder (with a .log file) and view NPU profiling: summary, NPU cards, timeline, and Perfetto trace. Includes integrated parser for log analysis.

Downloads

3

Rating

— (0)

Version

1.0.1

Last updated

Aug 03, 2026

Smarterasemi Profiler 是一个用于分析运行日志的 VS Code 扩展。导入包含性能日志的运行目录后,可以在 VS Code 中查看 NPU 汇总指标、各 NPU 状态、执行时间线、聚合数据表以及完整的 Perfetto Trace。

日志解析器已集成到扩展中,使用扩展时不需要安装 Python。

功能

  • 导入模拟器运行目录并自动解析性能日志
  • 展示 NPU 数量、执行周期、负载率和各类指令统计
  • 查看 NPU Cards、执行时间线和聚合数据表
  • 按需打开 Perfetto Trace Timeline,避免首次加载时占用过多资源
  • 使用 spike.log 为 Trace 事件补充 PC 信息
  • 通过调试信息 ELF 和 addr2line 从 PC 跳转到源码
  • 支持单 die 和多 die 运行数据
  • 生成可供其他工具使用的 JSON 结果

环境要求

使用扩展

  • VS Code 1.90 或更高版本
  • 仅在需要 PC 源码定位时,才需要 RISC-V addr2line 和带调试信息的 ELF

快速开始

  1. 准备一个包含模拟器性能日志的运行目录。
  2. 在 VS Code 命令面板中运行 Smarterasemi Profiling: Import Run Folder;也可以在 Explorer 中右键目录并选择该命令。
  3. 扩展解析完成后会打开 Dashboard。
  4. 点击 打开 Trace Timeline 查看完整 Perfetto 时间线。
  5. 如果 Trace 事件包含 PC,点击 PC 可配置 ELF 并跳转到对应源码。

输入目录

最小输入只需要一个性能日志:

run-folder/
└── test.log

需要 PC 标注和源码定位时,可以同时提供 spike.log:

run-folder/
├── test.log       # 模拟器性能日志
├── spike.log      # 可选,用于为 Trace 事件补充 PC
└── firmware.elf   # 可选,带调试信息的 RISC-V ELF

导入目录时,扩展会在目录顶层查找 .log 文件,并优先选择 test.log。如果存在多个其他 .log 文件,则按文件名排序后选择第一个,并在解析结果中给出警告。CLI 用户可以通过 --log 明确指定日志。

spike.log 必须与选中的性能日志位于同一目录,才能被扩展自动发现。ELF 可以位于其他位置,首次点击 PC 时再选择即可。

输出文件

默认情况下,扩展会在导入的运行目录中生成:

profiling-result.json
profiling-result.trace.json
  • profiling-result.json:Dashboard 使用的汇总指标、NPU 实例和事件数据。
  • profiling-result.trace.json:Perfetto Trace 数据。

将 smarterasemiProfiler.writeOutputToRunFolder 关闭后,这两个文件会写入系统临时目录。ELF 映射配置仍保存在运行目录中。

设置

设置 默认值 说明
smarterasemiProfiler.writeOutputToRunFolder true 是否将结果 JSON 写入导入的运行目录;关闭后写入系统临时目录。
smarterasemiProfiler.addr2linePath "" addr2line 可执行文件路径;留空时从常见的 RISC-V 工具链目录和 PATH 中自动查找。

PC 源码定位与 ELF 映射

源码定位需要以下数据:

  • spike.log 中存在可匹配的 PC
  • 每个 die 对应一个包含调试信息的 RISC-V ELF
  • 可用的 addr2line,建议使用与 ELF 匹配的 riscv64-unknown-elf-addr2line

点击 PC 且当前没有映射时,扩展会打开 ELF 映射编辑器。多 die 运行会在同一张表中显示所有 die,可以逐项选择、按路径模式填充或将一个 ELF 应用到全部 die。自动发现的候选 ELF 只会预填,保存前仍需确认。

导入运行目录后,也可以随时运行 Smarterasemi Profiling: Configure ELF Mapping 手动打开编辑器。

映射保存在运行目录下的 profiling-elf-config.json:

{
  "version": 1,
  "elf_config": [
    {
      "die_id": 0,
      "elf_path": "D:/firmware/case_die0.elf",
      "load_addr": "0x4000000000",
      "elf_image_base": "0x20000000"
    }
  ]
}
  • die_id 对应 Trace 事件的 pid / logical core。只有共享的单 die 回退配置可以省略该字段。
  • elf_path 是调试信息 ELF 的路径。
  • load_addr 用于覆盖运行日志中的加载地址,通常不需要填写。
  • elf_image_base 将原始二进制偏移 0 映射到 ELF VMA。完整的 objcopy -O binary 镜像通常可以从 ELF PT_LOAD 自动推导;经过 section 过滤的镜像可能需要显式设置。

PC、加载地址和 ELF 地址在内部均使用 BigInt 计算,在 JSON 边界使用十六进制字符串。

本地开发

项目包含扩展后端和 React Dashboard 两个构建部分。首次检出后需要分别安装依赖:

npm ci
npm --prefix ui ci
npm --prefix ui run build
npm run build

构建产物分别位于:

  • dist/:扩展主进程和解析 Worker
  • ui-dist/:Dashboard 前端

构建完成后,在 VS Code 中按 F5 启动 Extension Development Host,然后运行 Smarterasemi Profiling: Import Run Folder。

修改 Dashboard 后需要重新运行 npm --prefix ui run build;修改扩展后端时可以运行:

npm run watch

测试与检查

npm test
npm run typecheck

打包 VSIX:

npx @vscode/vsce package

命令行解析

解析器也可以脱离 VS Code 使用:

npm run parse -- --run-dir <run-folder>

可用参数:

参数 必填 说明
--run-dir <path> 是 运行目录。
--log <path> 否 明确指定性能日志。
--spike-log <path> 否 明确指定用于 PC 标注的 Spike 日志。
--out <path> 否 指定 profiling-result.json 输出路径。
--trace <path> 否 指定 Trace JSON 输出路径。

示例:

npm run parse -- \
  --run-dir ./trace/demo \
  --log ./trace/demo/test.log \
  --spike-log ./trace/demo/spike.log \
  --out ./out/result.json \
  --trace ./out/result.trace.json

常见问题

提示 no .log file found

确认导入的是运行目录本身,并且性能日志位于该目录顶层。扩展不会递归查找子目录中的日志。

PC 没有显示源码位置

依次确认:

  1. 性能日志旁存在正确的 spike.log。
  2. 已为对应 die 配置正确的 ELF。
  3. ELF 包含 DWARF 调试信息。
  4. smarterasemiProfiler.addr2linePath 指向与 ELF 架构匹配的 RISC-V addr2line。
  5. 日志中的加载地址和 elf_image_base 配置正确。

Dashboard 打不开或开发环境显示空白

先构建 React Dashboard,再重新启动 Extension Development Host:

npm --prefix ui run build
npm run build

Related extensions