12 releases
new 0.1.12 | May 9, 2025 |
---|---|
0.1.11 | Mar 7, 2025 |
0.1.9 | Jan 23, 2025 |
0.1.8 | Nov 18, 2024 |
0.1.1 | Feb 9, 2024 |
#312 in Magic Beans
2,688 downloads per month
80KB
1.5K
SLoC
canbench
canbench
is a tool for benchmarking canisters on the Internet Computer.
Background
Canister smart contracts on the Internet Computer consume compute and memory resources.
Since resources are finite, execution of a message (transaction) must remain within specific bounds:
- Instructions: A monotonically increasing counter correlated with compute and memory usage.
- Dirty Pages: The number of memory pages written to.
If a message exceeds these limits, it is aborted.
canbench
gives developers insights into how their code consumes instructions and memory.
Support for reporting dirty pages will be added once the IC exposes that information.
Use Cases
- Analyze instruction, heap, and stable memory usage of canisters
- Detect performance regressions in local or CI environments
- Identify potential performance bottlenecks
Features
-
Relevant metrics
Traditional benchmarking tools rely on repeated runs and averaging time.
On the deterministic Internet Computer, this is neither necessary nor insightful.
canbench
reports instruction count and memory changes directly. -
Regression detection
Persist benchmark results in your repo.
canbench
compares results over time to highlight performance regressions. -
High instruction limits
While regular messages are capped at a few billion instructions,
canbench
supports up to 10 trillion, allowing deep benchmarking. -
Language-agnostic
While currently Rust-focused,
canbench
is designed to support canisters written in any language.
Installation
cargo install canbench
Quickstart (Rust)
See the crate's documentation.
GitHub CI Support
You can integrate canbench
into your GitHub CI pipeline to catch regressions automatically.
You’ll need:
-
Benchmark scripts (see
scripts/
directory) -
A workflow that posts benchmarking results as PR comments (
canbench-post-comment.yml
) -
A job to upload the PR number (see
upload-pr-number
inci.yml
) -
The benchmark job itself (e.g.
benchmark-fibonacci-example
inci.yml
)
Once configured, the job will fail on regressions and pass otherwise. It will also leave a PR comment with detailed results. See this PR example.
Dependencies
~29–46MB
~783K SLoC