#性能分析 #cargo #profile #子命令

bin+lib cargo-prof

让 Rust 程序性能分析更轻松的工具

8 个版本

0.1.9 2022 年 8 月 14 日
0.1.8 2022 年 8 月 14 日

#498Cargo 插件

26 个月下载

MIT 许可证

27KB
456

性能分析

目前处于非常早期的原型阶段,且仅限于 Linux 系统,除非你在安装了 valgrind 的 docker 容器中运行。

目标是封装 C/C++ 生态系统中的性能分析工具,提供一个易于使用的 CLI,最终将是跨平台的,并提供可读性好的输出以及 json 格式,可以传递给其他工具,如 UI。

快速入门

需求

valgrind

如果没有安装,程序将打印上述链接。

有两个版本

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

其他命令

除了 leakheap,还有用于从 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