Add `samply` and `flamegraph` to spell ignore lists.
1.9 KiB
Benchmarking rm
Run cargo build --release
before benchmarking after you make a change!
Simple recursive rm
- Get a large tree, for example linux kernel source tree.
- We'll need to pass a
--prepare
argument, sincerm
deletes the dir each time. - Benchmark simple recursive rm with hyperfine:
hyperfine --prepare "cp -r tree tree-tmp" "target/release/coreutils rm -r tree-tmp"
.
Comparing with GNU rm
Hyperfine accepts multiple commands to run and will compare them. To compare performance with GNU rm
duplicate the string you passed to hyperfine but remove the target/release/coreutils
bit from it.
Example: hyperfine --prepare "cp -r tree tree-tmp" "target/release/coreutils rm -rf tree-tmp"
becomes
hyperfine --prepare "cp -r tree tree-tmp" "target/release/coreutils rm -rf tree-tmp" "rm -rf tree-tmp"
(This assumes GNU rm is installed as rm
)
This can also be used to compare with version of rm built before your changes to ensure your change does not regress this.
Here is a bash
script for doing this comparison:
#!/bin/bash
cargo build --no-default-features --features rm --release
test_dir="$1"
hyperfine --prepare "cp -r $test_dir tmp_d" "rm -rf tmp_d" "target/release/coreutils rm -rf tmp_d"
Checking system call count
- Another thing to look at would be system calls count using strace (on linux) or equivalent on other operating systems.
- Example:
strace -c target/release/coreutils rm -rf tree
Flamegraph
samply
samply is one option for simply creating flamegraphs. It uses the Firefox profiler as a UI.
To install:
cargo install samply
To run:
samply record target/release/coreutils rm -rf ../linux
Cargo Flamegraph
With Cargo Flamegraph you can easily make a flamegraph of rm
:
cargo flamegraph --cmd coreutils -- rm [additional parameters]