coreutils/src/uu/rm/BENCHMARKING.md
Ben Schofield 4d78ca47b1 Add Spell ignore
Add `samply` and `flamegraph` to spell ignore lists.
2023-08-24 11:15:03 -06:00

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, since rm 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]