Skip to content

Commit

Permalink
-s
Browse files Browse the repository at this point in the history
shuf: update BENCHMARKING.md
  • Loading branch information
Garfield96 committed Jun 17, 2022
1 parent 19a43bf commit 8ebd602
Showing 1 changed file with 28 additions and 5 deletions.
33 changes: 28 additions & 5 deletions src/uu/shuf/BENCHMARKING.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,46 @@
benchmark: with and without repetition.

When benchmarking changes, make sure to always build with the `--release` flag.
You can compare with another branch by compiling on that branch and than
You can compare with another branch by compiling on that branch and then
renaming the executable from `shuf` to `shuf.old`.

## Generate sample data

Sample input can be generated using `/dev/random`:

```shell
cat /dev/random | base64 | fold | head -n 50000000 > input.txt
```

To avoid distortions from IO, it is recommended to store input data in tmpfs.

## Without repetition

By default, `shuf` samples without repetition. To benchmark only the
randomization and not IO, we can pass the `-i` flag with a range of numbers to
randomly sample from. An example of a command that works well for testing:
By default, `shuf` samples without repetition.

To benchmark only the randomization and not IO, we can pass the `-i` flag with
a range of numbers to randomly sample from. An example of a command that works
well for testing:

```shell
hyperfine --warmup 10 "target/release/shuf -i 0-10000000"
```

To measure the time taken by shuffling an input file, the following command can
be used::

```shell
hyperfine --warmup 10 "target/release/shuf input.txt > /dev/null"
```

It is important to discard the output by redirecting it to `/dev/null`, since
otherwise, a substantial amount of time is added to write the output to the
filesystem.

## With repetition

When repetition is allowed, `shuf` works very differently under the hood, so it
should be benchmarked separately. In this case we have to pass the `-n` flag or
should be benchmarked separately. In this case, we have to pass the `-n` flag or
the command will run forever. An example of a hyperfine command is

```shell
Expand Down

0 comments on commit 8ebd602

Please sign in to comment.