Skip to content
/ prof Public

CLI to make profiling Rust programs easier

Notifications You must be signed in to change notification settings

jackos/prof

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Prof

This is in a very early prototyping stage and is Linux only right now, unless you're running in a docker container with valgrind installed.

This aims to wrap profiling tools from the C/C++ ecosystem in an easy-to-use CLI that will eventually be cross-platform, providing a human-readable output as well as json that can be piped to other tools such as UI's.

Quickstart

Requirement

valgrind

If not installed the program will print the above link.

There are two versions:

Cargo

Runs on your Cargo targets

Install

cargo install cargo-prof

YAML output with bytes as text (human-readable)

cargo prof heap
allocated_total: 2KB 119B
frees: 11
allocations: 11
allocated_at_exit: 0B
blocks_at_exit: 0

JSON outputs with total bytes

cargo prof heap -j
{"allocated_total":2167,"frees":11,"allocations":11,"allocated_at_exit":0,"blocks_at_exit":0}

Standalone

Runs on any binary

Install

cargo install prof

Profile ripgrep if rg is on your path

prof leak --bin rg

Pass ripgrep some arguments to stress it and see if any memory leaks

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

Give grep a try as well and notice some data is leaked, even on a single file:

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

Other Commands

Other than leak and heap there is also cache for cache misses from cachegrind as percentages:

cargo prof cache
l1i: 0.36
l1d: 3.0
lli: 0.34
lld: 2.6
llt: 1.0
  • l1i: percentage of level 1 cache instruction misses
  • l1d: percentage of level 1 cache data misses
  • lli: percentage of last level cache instruction misses (e.g. L3)
  • lld: percentage of last level cache data misses (e.g. L3)
  • llt: percentage of last level total cache misses

You can see a visual diagram of your cache levels with the command: lstopo

For more information on these numbers mean see official docs:

https://valgrind.org/docs/manual/cg-manual.html

Or for a good description on what a cache miss is, check out this great talk from Andrew Kelley the creator of Zig: https://vimeo.com/handmadeseattle/practical-data-oriented-design#t=280s

About

CLI to make profiling Rust programs easier

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages