8 个版本
0.1.9 | 2022 年 8 月 14 日 |
---|---|
0.1.8 | 2022 年 8 月 14 日 |
#498 在 Cargo 插件
26 个月下载
27KB
456 行
性能分析
目前处于非常早期的原型阶段,且仅限于 Linux 系统,除非你在安装了 valgrind
的 docker 容器中运行。
目标是封装 C/C++ 生态系统中的性能分析工具,提供一个易于使用的 CLI,最终将是跨平台的,并提供可读性好的输出以及 json
格式,可以传递给其他工具,如 UI。
快速入门
需求
如果没有安装,程序将打印上述链接。
有两个版本
Cargo
运行在你的 Cargo 目标上
安装
cargo install cargo-prof
以字节为文本的 YAML 输出(可读)
cargo prof heap
allocated_total: 2KB 119B
frees: 11
allocations: 11
allocated_at_exit: 0B
blocks_at_exit: 0
以总字节为输出的 JSON
cargo prof heap -j
{"allocated_total":2167,"frees":11,"allocations":11,"allocated_at_exit":0,"blocks_at_exit":0}
独立
运行在任何二进制文件上
安装
cargo install prof
如果 rg
在你的 path
中,则分析 ripgrep
prof leak --bin rg
给 ripgrep
传递一些参数以对其进行压力测试,并查看是否有内存泄漏
prof leak --bin rg -- a -uuu
definitely_lost: 0B
indirectly_lost: 0B
possibly_lost: 528B
still_reachable: 369KB 218B
supressed: 0B
definitely_lost_blocks: 0
indrectly_lost_blocks: 0
possibly_lost_blocks: 9
still_reachable_blocks: 89
supressed_blocks: 0
也尝试使用 grep
,并注意即使是在单个文件上,也有数据泄漏
prof leak --bin grep -- a Cargo.toml
definitely_lost: 272B
indirectly_lost: 352B
possibly_lost: 128B
still_reachable: 109KB 490B
supressed: 0B
definitely_lost_blocks: 272
indrectly_lost_blocks: 11
possibly_lost_blocks: 1
still_reachable_blocks: 15
supressed_blocks: 0
其他命令
除了 leak
和 heap
,还有用于从 cachegrind
缓存缺失的 cache
命令,以百分比表示
cargo prof cache
l1i: 0.36
l1d: 3.0
lli: 0.34
lld: 2.6
llt: 1.0
- l1i:一级缓存指令缺失的百分比
- l1d:一级缓存数据缺失的百分比
- lli:最后一级缓存指令缺失的百分比(例如 L3)
- lld:最后一级缓存数据缺失的百分比(例如 L3)
- llt:最后一级总缓存缺失的百分比
您可以使用命令 lstopo
查看您的缓存级别的可视化图表
有关这些数字的含义的更多信息,请参阅官方文档
https://valgrind.org/docs/manual/cg-manual.html
或者,查看 Zig 的创建者 Andrew Kelley 的关于缓存缺失的出色演讲:https://vimeo.com/handmadeseattle/practical-data-oriented-design#t=280s
依赖关系
~15MB
~263K SLoC