Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions docs/bench/core-memory-2026-09-05.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"command": "cargo run --manifest-path engine/core/Cargo.toml --example membench --quiet",
"toolchain": {
"rustc": "rustc 1.97.1 (8bab26f4f 2026-07-14)",
"cargo": "cargo 1.97.1 (c980f4866 2026-06-30)"
},
"git_revision": "b7dd46f",
"origin_main_revision": "2d20ddad228db52fa29ad7d7d06f44e8672164af",
"benchmark_implementation_revision": "0821ddf",
"workload": {
"shape": "99 nodes; 24 steady ticks; 8 rounds of 4-node subtree churn; 16 text ticks; 12 burst ticks",
"text_mode": "atlas",
"texture_mode": "atlas"
},
"receipt": {
"peak_requested_bytes": "29591",
"final_requested_bytes": "10793",
"allocation_count": "11682",
"total_allocated_bytes": "6225569",
"avg_layout_us": "1210",
"max_layout_us": "5163",
"nodes": "99",
"structural_relayouts": "16",
"text_mode": "atlas",
"texture_mode": "atlas",
"drawlist_checksum": "cc6a0b00efdba151"
}
}
39 changes: 39 additions & 0 deletions docs/bench/core-memory-2026-09-05.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# Core Memory Benchmark Baseline

The benchmark harness was based on the latest `origin/main` revision
`2d20ddad228db52fa29ad7d7d06f44e8672164af`; the first receipt was measured at
harness commit `b7dd46f`. The benchmark implementation was introduced
separately at `0821ddf`. `git_revision` identifies the revision where the
receipt was measured, while `origin_main_revision` identifies the source
revision used as the harness base. This receipt was not measured from
`origin/main` itself.

The byte values below are **allocator-independent requested-byte metrics** from
the counting allocator. They are not process RSS, committed pages, or PSP arena
high-water measurements. Timing values are host measurements and are excluded
from deterministic receipt comparisons.

## Reproduction

```text
cargo run --manifest-path engine/core/Cargo.toml --example membench --quiet
```

Toolchain: `rustc 1.97.1 (8bab26f4f 2026-07-14)`, `cargo 1.97.1 (c980f4866 2026-06-30)`.

Workload shape: 99 nodes; 24 steady ticks; 8 rounds of 4-node subtree churn;
16 text ticks; 12 burst ticks. Text and texture modes are both `atlas`.

## Receipt

| Field | Value | Meaning |
| --- | ---: | --- |
| `peak_requested_bytes` | 29591 | Peak requested bytes |
| `final_requested_bytes` | 10793 | Final live requested bytes |
| `allocation_count` | 11682 | Count of measured allocation events |
| `total_allocated_bytes` | 6225569 | Total requested bytes across measured allocation events |
| `avg_layout_us` | 1210 | Host timing, excluded from canonical comparison |
| `max_layout_us` | 5163 | Host timing, excluded from canonical comparison |
| `nodes` | 99 | Workload node count |
| `structural_relayouts` | 16 | Structural relayout count |
| `drawlist_checksum` | `cc6a0b00efdba151` | Deterministic drawlist checksum |
46 changes: 46 additions & 0 deletions docs/bench/core-memory-ppsspp-2026-09-05.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
{
"schema_version": 1,
"status": "PASS",
"selected_app": "stats",
"workload_role": "representative workload for the shared workload profile; not a byte-identical event sequence",
"framework": "solid",
"samples": 3,
"report_path": "dist/bench/ppsspp-bench-2026-09-05T05-07-18-714Z.json",
"checksum": "c88e7bcedc5d42a5",
"commands": {
"baseline": {
"command": "PSP_SDK=\"$PSP_SDK\" BENCH_PPSSPP_TIMEOUT=60 bun tools/bench-ppsspp.ts --apps=stats --samples=3",
"status": "PASS",
"exit_status": 0
},
"memory_scan": {
"command": "PSP_SDK=\"$PSP_SDK\" BENCH_PPSSPP_TIMEOUT=60 bun tools/bench-ppsspp.ts --apps=stats --samples=3 --memory-scan",
"status": "PASS",
"exit_status": 0
}
},
"execution_context": {
"checkout": "bench/core-memory-receipt",
"git_revision_used_for_both_attempts": "3e0b772",
"later_metadata_commits_benchmarked": false
},
"revisions": {
"git_revision": "3e0b772",
"ppsspp_revision": "f929a74"
},
"metrics": {
"arena_bump_bytes": 2654944,
"arena_tail_free_bytes": 15232288,
"avg_tick_us": 516,
"avg_work_us": 4686,
"max_work_us": 62816,
"uncapped_arena_bump_bytes": 2654944,
"min_pass_arena_bytes": 2883584,
"safe_arena_bytes": 3670016
},
"field_definitions": {
"report_path": "Expected generated JSON report path under dist/bench/ (ppsspp-bench-<timestamp>.json); null means no report was generated.",
"checksum": "Checksum of the representative workload drawlist used by the run; null means no benchmark ran. Compare with the Rust profile and report differences explicitly."
},
"caveat": "PPSSPP measurements are emulator evidence, not real PSP hardware proof. Arena high-water is a practical allocator capacity requirement, not a precise live-object heap profile. PSP checksum c88e7bcedc5d42a5 differs from the Rust baseline checksum cc6a0b00efdba151 because the PSP journey is not byte-identical to the synthetic Rust workload."
}
77 changes: 77 additions & 0 deletions docs/bench/core-memory-ppsspp-2026-09-05.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# Core Memory PSP Receipt

Status: **PASS**

Receipt schema version: **1**

Both benchmark commands reached the `stats` PSP app under PPSSPPHeadless.

The PSP target is the **`stats` representative workload**, using the existing
fixed input script and PSP JSONL schema. It corresponds to phases in the Rust
synthetic workload profile; the two journeys are not byte-identical event
sequences. No second demo or Taffy A/B run was added.

## Commands

Both commands ran on revision `3e0b772`. The PPSSPP source revision was
`f929a74`.

```bash
git status --short --branch
```

Baseline:

```bash
PSP_SDK="$PSP_SDK" BENCH_PPSSPP_TIMEOUT=60 bun tools/bench-ppsspp.ts --apps=stats --samples=3
```

Status: **PASS**; exit status: `0`.

Memory scan:

```bash
PSP_SDK="$PSP_SDK" BENCH_PPSSPP_TIMEOUT=60 bun tools/bench-ppsspp.ts --apps=stats --samples=3 --memory-scan
```

Status: **PASS**; exit status: `0`.

## Revisions

| item | value |
|---|---|
| git revision | `3e0b772` |
| PPSSPP revision | `f929a74` |
| selected app | `stats` |
| framework | `solid` |
| samples | `3` |
| report path | `dist/bench/ppsspp-bench-2026-09-05T05-07-18-714Z.json` |
| checksum | `c88e7bcedc5d42a5` |

`report_path` points to the authoritative generated JSON report under
`dist/bench/`. `checksum` is the representative workload drawlist checksum.
The PSP checksum `c88e7bcedc5d42a5` differs from the Rust baseline checksum
`cc6a0b00efdba151`; the workloads are not byte-identical.

## Metrics

| metric | value |
|---|---:|
| arena bump | `2,654,944` bytes (`2.53 MiB`) |
| arena tail free | `15,232,288` bytes |
| avg tick | `516us` |
| avg work | `4,686us` |
| max work | `62,816us` |
| uncapped arena bump | `2,654,944` bytes |
| minimum passing arena | `2,883,584` bytes (`2.75 MiB`) |
| safe arena | `3,670,016` bytes (`3.50 MiB`) |

## Environment

The fixed PSP SDK was loaded from `/Users/quake/.cache/pocket-stack/psp/env.sh`.
`PPSSPPHeadless` was built at `/Users/quake/ppsspp-src/build/PPSSPPHeadless`.

**PPSSPP results, when available, are emulator evidence rather than real PSP
hardware proof.** `arena_bump_bytes` is a practical allocator capacity
requirement and includes size-class fragmentation; it is not a precise
live-object heap profile.
Loading