A WebAssembly benchmarking suite for precise performance measurement
Project description
WASURE - WebAssembly SUite for Runtime Evaluation
⚠️ This is a work in progress!
WASURE is a command-line toolkit that helps you benchmark WebAssembly runtimes with clarity. It lets you run benchmarks across multiple engines, manage runtime environments, and generate meaningful visualizations and exports for analysis.
🚀 Features
- Run and manage WebAssembly benchmarks across various runtimes
- Install, update, and manage runtimes with simple commands
- Export results to CSV for analysis or create plots for quick visualization
- Designed for clarity, reproducibility, and extensibility
🛠 Getting Started
-
Clone the repository:
git clone https://github.com/r-carissimi/wasure.git cd wasure/wasure
-
Install dependencies:
pip install -r ../requirements.txt
📖 How to Use WASURE
WASURE is structured as a command-line tool with modular subcommands to list, run, compare, and visualize WebAssembly benchmarks. Each subcommand has its own options, allowing you to start simple and scale up your experiments as needed.
python3 wasure.py [OPTIONS] COMMAND
Use --log-level DEBUG to troubleshoot issues and --help under any subcommand for more information.
🔍 Listing Available Benchmarks
See what benchmarks are available:
python3 wasure.py benchmarks list
⚙️ Managing Runtimes
Install, update, and manage supported runtimes:
# View available runtimes
python3 wasure.py runtimes available
# Install a runtime
python3 wasure.py runtimes install wasmtime
# Update or remove runtimes
python3 wasure.py runtimes update wasmtime
python3 wasure.py runtimes remove wasmtime
# List installed runtimes and their versions
python3 wasure.py runtimes list
python3 wasure.py runtimes version
🏃 Running Benchmarks
Run benchmarks with your chosen runtimes:
# Run a single benchmark on one runtime
python3 wasure.py run -b helloworld -r wasmtime
# Run multiple benchmarks on multiple runtimes
python3 wasure.py run -b pystone dummy dhrystone/dhrystone10M -r wasmtime wasmedge wasmer --repeat 3
# Run a raw WebAssembly file directly
python3 wasure.py run -b py2wasm/pystone/pystone.wasm -r wasmtime
Useful Flags
--repeat N: Repeat each benchmark N times--no-store-output: Don’t save output, just timings--results-folder <path>: Define custom output directory
📊 Visualizing and Exporting Results
Plot or export results with:
# Plot benchmark output
python3 wasure.py plot results/2025-05-06_10-56-21.json
# Export results to CSV
python3 wasure.py export results/2025-05-06_10-56-21.json
✅ Checking Runtimes Support
The check command allows you to verify if specific benchmarks run successfully on selected runtimes. It is particularly useful when combined with the wasm-features or wasi-proposals benchmark groups. These groups enable you to track which runtime has implemented specific features or proposals.
# Check the wasm features support on all runtimes
python3 wasure.py check wasm-features
# Check the wasi proposals implementation on wasmtime and wasmedge
python3 wasure.py check wasi-proposals -r wasmtime wasmedge
💡 Run WASI benchmarks on runtimes that do not support WASI
Refer to the Replay Merger project for instructions on how to run WASI benchmarks on runtimes that do not support WASI.
➕ Adding New Benchmarks
Refer to the Benchmarks Management Documentation for detailed instructions on adding new benchmarks.
⚙️ Adding or Editing a Runtime
Refer to the Runtimes Management Documentation for detailed instructions on adding or editing runtimes.
⚠️ Known Limitations
- Platform Support: Linux and macOS are supported. Windows is currently not supported.
- Path Restrictions: Installers relying on
npm(e.g., v8, jsc, spidermonkey) may fail if the runtimes path contains spaces. - Non-ASCII Characters: JSC (JavaScriptCore) does not support payload paths with non-ASCII characters.
🤝 Contributing
Contributions are welcome! Feel free to open issues or submit pull requests to improve the project. Please ensure your code follows the PEP 8 style guide for Python to maintain consistency across the project.
📜 License
This project is licensed under the GNU General Public License v3.0.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wasure-0.5.tar.gz.
File metadata
- Download URL: wasure-0.5.tar.gz
- Upload date:
- Size: 88.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
84f9ef0af22d51181b0249549eb13546a220cb51180b88d17daa4164d0fec4de
|
|
| MD5 |
82444eb9de6df2523cf5b445e4f8c943
|
|
| BLAKE2b-256 |
9884fbdeeb0bc9eb3ba514ddc33acfd516fde82c430ccd7044f44054c2c1c606
|
File details
Details for the file wasure-0.5-py3-none-any.whl.
File metadata
- Download URL: wasure-0.5-py3-none-any.whl
- Upload date:
- Size: 89.8 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
00a3a1a0ae2a5c30fe06ec85f8916f68ad010b628575f82eb1b0ea907e20f966
|
|
| MD5 |
3503710367b4df43bed98a311cdf9b22
|
|
| BLAKE2b-256 |
a80ee9b250cdf8d3d188ac11bf3649bf2f6018491877629ff017724b1aa8ca7b
|