#profiler #sampling #symbols #profiling #performance

bin+lib vignette

作为库的采样分析器。特别适用于需要稍后恢复符号的软件打包。

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2020 年 9 月 4 日

#1442 in 开发工具

MIT/Apache

315KB
1.5K SLoC

Vignette

(仍需发布到 crates.io。还需要更好的文档。)

Vignette 是一个作为库的采样分析器。

sample profile screenshot

主要用途是在发布配置中将它链接到您的应用程序。虽然大多数采样分析器都需要在正在分析的二进制文件中包含调试符号,但 vignette 没有这样的要求。它专门设计用于捕获未符号化的分析数据,这些数据可以在外部解决,通常在另一台机器上。

这对于在不受开发者控制的机器上运行的桌面应用程序非常有用。应用程序可以在某些点分析自己并将分析数据上传到遥测服务器。

状态

Linux 分析过程已实现端到端。我知道如何在 Windows 和 Mac 上实现它,但尚未着手编写后端。

示例工作流程

集成 vignette

将 vignette 链接到您的应用程序。对于非 Rust 应用程序,还需要编写 C FFI 接口(欢迎贡献!)。

然后在您的程序中您想要捕获分析数据的位置使用 Profiler 结构。请参阅 examples/sample_once.rs 了解如何进行此操作。

这是一个更大的示例,是 Rayon 的生命游戏分支

构建

在构建过程中,生成的调试信息被保存在服务器上,然后从发布二进制文件中删除。

Vignette 目前仅支持使用 breakpad .sym 格式,但它使用符号 crate,理论上可以支持其他输入格式。

使用包装 dump_syms (来自 Breakpad) 的 src/bin/generate_symbols.rs 二进制文件对您的二进制文件进行操作,或直接在所有库上运行 dump_syms 以生成 sym 文件。

发布

将分析数据写入某处,并以某种方式上传或请求用户。

解析符号

使用之前生成的 breakpad 符号和分析数据,解析样本中的指令指针到函数和文件名。src/bin/resolve.rs 可以执行此操作。

这将生成一个解析后的 json 文件。一个示例是 profiles/rayon-life.resolved.vignette。

查看分析数据

目前,vignette只输出Speedscope可理解的格式。Speedscope。src/bin/speedscope.rs二进制文件将解析后的配置文件转换为speedscope文件。这可以加载到网站上。一个示例是profiles/rayon-life.speed。

许可证

根据以下任一许可证授权:

任由您选择。

贡献

欢迎贡献!

根据Apache-2.0许可证定义,您有意提交给作品中的任何贡献都应按上述方式双重许可,没有任何附加条款或条件。

依赖关系

~14MB
~266K SLoC