# Lotus Miner: Benchmarks
Lotus comes with a benchmarking tool that can be used to test how long each resource-intensive mining operation takes. This guide describes how to install the benchmarking tool, and some basic operations.
# Installation
You must have the Lotus repository on your computer. If you do not have an existing copy of the repository, clone it from GitHub (opens new window):
git clone https://github.com/filecoin-project/lotus.git ~/lotus > Cloning into '/root/lotus'... > remote: Enumerating objects: 93, done. > ... > Resolving deltas: 100% (51531/51531), done.
The
lotus
binary must be built and within the~/lotus
repository folder. If you just cloned the repository or have misplaced thelotus
binary, build the project:cd ~/lotus make clean all && make install > rm -rf build/.filecoin-install build/.update-modules lotus lotus-miner lotus-worker lotus-shed lotus-gateway lotus-seed lotus-pond lotus-townhall lotus-fountain lotus-chainwatch lotus-bench lotus-stats lotus-pcr lotus-health lotus-wallet testground > make -C extern/filecoin-ffi/ clean > ... > install -C ./lotus /usr/local/bin/lotus > install -C ./lotus-miner /usr/local/bin/lotus-miner > install -C ./lotus-worker /usr/local/bin/lotus-worker
Call
make lotus-bench
to build the Lotus benchmark binary:make lotus-bench > rm -f lotus-bench > go build -o lotus-bench ./cmd/lotus-bench > ... > go run github.com/GeertJohan/go.rice/rice append --exec lotus-bench -i ./build
This will produce a
lotus-bench
binary in the current folder.You can now run
lotus-bench
against your system.
# Usage
Use the self-documenting feature of the tool to explore the different commands.
./lotus-bench --help
> NAME:
> lotus-bench - Benchmark performance of lotus on your hardware
>
> USAGE:
> lotus-bench [global options] command [command options] [arguments...]
>
> VERSION:
> 1.2.0
>
> COMMANDS:
> prove Benchmark a proof computation
> sealing
> import benchmark chain import and validation
> help, h Shows a list of commands or help for one command
>
> GLOBAL OPTIONS:
> --help, -h show help (default: false)
> --version, -v print the version (default: false)
# Commands
# Prove
Benchmark a proof computation using lotus-bench prove [command options] [arguments...]
. For example:
./lotus-bench prove
Available options:
Options | Description |
---|---|
--no-gpu | Disable gpu usage for the benchmark run (default: false). |
--miner-addr value | Pass miner address (only necessary if using existing sectorbuilder) (default: "t01000"). |
--help, -h | Show help (default: false). |
# Sealing
Benchmark a sealing computation using lotus-bench sealing [command options] [arguments...]
. For example:
./lotus-bench sealing
> 2020-11-23T18:05:22.028Z INFO lotus-bench lotus-bench/main.go:78 Starting lotus-bench
> ...
> ----
> results (v28) (536870912)
> seal: addPiece: 21.783625761s (23.5 MiB/s)
> seal: preCommit phase 1: 4m45.456592593s (1.794 MiB/s)
> seal: preCommit phase 2: 5m39.64126859s (1.507 MiB/s)
> seal: commit phase 1: 48.158372ms (10.38 GiB/s)
> seal: commit phase 2: 2m10.561079144s (3.922 MiB/s)
> seal: verify: 6.236412ms
> unseal: 3m52.85376877s (2.199 MiB/s)
>
> generate candidates: 231.814µs (2.106 TiB/s)
> compute winning post proof (cold): 23.405645045s
> compute winning post proof (hot): 22.507299071s
> verify winning post proof (cold): 257.502167ms
> verify winning post proof (hot): 7.473581ms
>
> compute window post proof (cold): 7.132316755s
> compute window post proof (hot): 6.893502363s
> verify window post proof (cold): 57.524992ms
> verify window post proof (hot): 5.629919ms
Available options:
Option | Description |
---|---|
--storage-dir value | Path to the storage directory that will store sectors long term (default: "~/.lotus-bench"). |
--sector-size value | Size of the sectors in bytes, i.e. 32GiB (default: "512MiB"). |
--no-gpu | Disable gpu usage for the benchmark run (default: false). |
--miner-addr value | Pass miner address (only necessary if using existing sectorbuilder) (default: "t01000") |
--benchmark-existing-sectorbuilder value | pass a directory to run post timings on an existing sectorbuilder |
--json-out | output results in json format (default: false) |
--skip-commit2 | skip the commit2 (snark) portion of the benchmark (default: false) |
--skip-unseal | skip the unseal portion of the benchmark (default: false) |
--save-commit2-input value | Save commit2 input to a file |
--num-sectors value | (default: 1) |
--parallel value | (default: 1) |
--help, -h | show help (default: false) |
# Import
Benchmark chain import and validation using lotus-bench import command [command options] [arguments...]
. For example:
./lotus-bench import analyze import.car
Available commands:
Command | Description |
---|---|
analyze | Analyze a .car file. |
help | Show the help information. |
Available options:
Option | Description |
---|---|
--start-tipset value | start validation at the given tipset key; in format cid1,cid2,cid3... |
--end-tipset value | halt validation at the given tipset key; in format cid1,cid2,cid3... |
--genesis-tipset value | genesis tipset key; in format cid1,cid2,cid3... |
--start-height value | start validation at given height; beware that chain traversal by height is very slow (default: 0) |
--end-height value | halt validation after given height; beware that chain traversal by height is very slow (default: 0) |
--batch-seal-verify-threads value | set the parallelism factor for batch seal verification (default: 4) |
--repodir value | set the repo directory for the lotus bench run (defaults to /tmp) |
--syscall-cache value | read and write syscall results from datastore |
--export-traces | should we export execution traces (default: true) |
--no-import | should we import the chain? if set to true chain has to be previously imported (default: false) |
--global-profile | (default: true) |
--only-import | (default: false) |
--use-pebble | (default: false) |
--use-native-badger | (default: false) |
--car value | path to CAR file; required for import; on validation, either a CAR path or the --head flag are required |
--head value | tipset key of the head, useful when benchmarking validation on an existing chain store, where a CAR is not available; if both --car and --head are provided, --head takes precedence over the CAR root; the format is cid1,cid2,cid3... |
--help, -h | show help (default: false) |
--version, -v | print the version (default: false) |