#profiling #profile #子命令

bin+lib prof

使Rust程序分析更简单的工具

10个版本

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

#1407 in 解析实现

31每月下载次数
cargo-prof中使用

MIT许可证

19KB
381 代码行

Prof

目前处于非常早期的原型阶段,目前仅限于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之外,还有cache用于来自cachegrind的缓存缺失,以百分比表示

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

依赖项

~10–14MB
~246K SLoC