Add sorted.py to microbenchmarks (#6086)

* Add microbenchmark for `sorted`

I chose 5 * Iterations to try better show that RustPython
sort implementation scales noticeably worse CPython's
with respect to the number of elements.

* Mention how to run a specific benchmark

* Update python version in bench README

3.13 better reflects the current state of the project vs 3.7.
This commit is contained in:
Jack O'Connor authored and GitHub committed 2025-08-28 09:58:20 +09:00
1 parent c6d1a5784a
commit 763d5d48b5
2 files changed
+26 -9

No files matched your search

+17 -9
View File
@@ -4,19 +4,26 @@ These are some files to determine performance of rustpython.
## Usage
Running `cargo bench` from the root of the repository will start the benchmarks. Once done there will be a graphical
Running `cargo bench` from the root of the repository will start the benchmarks. Once done there will be a graphical
report under `target/criterion/report/index.html` that you can use use to view the results.
To view Python tracebacks during benchmarks, run `RUST_BACKTRACE=1 cargo bench`. You can also bench against a
`cargo bench` supports name matching to run a subset of the benchmarks. To
run only the sorted microbenchmark, you can run:
```shell
cargo bench sorted
```
To view Python tracebacks during benchmarks, run `RUST_BACKTRACE=1 cargo bench`. You can also bench against a
specific installed Python version by running:
```shell
$ PYTHON_SYS_EXECUTABLE=python3.7 cargo bench
PYTHON_SYS_EXECUTABLE=python3.13 cargo bench
```
### Adding a benchmark
Simply adding a file to the `benchmarks/` directory will add it to the set of files benchmarked. Each file is tested
Simply adding a file to the `benchmarks/` directory will add it to the set of files benchmarked. Each file is tested
in two ways:
1. The time to parse the file to AST
@@ -24,8 +31,9 @@ in two ways:
### Adding a micro benchmark
Micro benchmarks are small snippets of code added under the `microbenchmarks/` directory. A microbenchmark file has
Micro benchmarks are small snippets of code added under the `microbenchmarks/` directory. A microbenchmark file has
two sections:
1. Optional setup code
2. The code to be benchmarked
@@ -39,8 +47,8 @@ a_list = [1,2,3]
len(a_list)
```
Only `len(a_list)` will be timed. Setup or benchmarked code can optionally reference a variable called `ITERATIONS`. If
present then the benchmark code will be invoked 5 times with `ITERATIONS` set to a value between 100 and 1,000. For
Only `len(a_list)` will be timed. Setup or benchmarked code can optionally reference a variable called `ITERATIONS`. If
present then the benchmark code will be invoked 5 times with `ITERATIONS` set to a value between 100 and 1,000. For
example:
```python
@@ -49,7 +57,7 @@ obj = [i for i in range(ITERATIONS)]
`ITERATIONS` can appear in both the setup code and the benchmark code.
## MacOS setup
## MacOS setup
On MacOS you will need to add the following to a `.cargo/config` file:
@@ -63,4 +71,4 @@ rustflags = [
## Benchmark source
- https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/nbody-python3-2.html
- <https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/nbody-python3-2.html>
+9
View File
@@ -0,0 +1,9 @@
from random import random, seed
seed(0)
unsorted_list = [random() for _ in range(5 * ITERATIONS)]
# ---
# Setup code only runs once so do not modify in-place
sorted(unsorted_list)