Skip to content

Commit 6c81153

Browse files
olwangclaude
andcommitted
bench(vm-jit): add SortedSet/string-text/concurrency/deep-copy kernels
Round out the slow-path baseline with the four remaining gaps: - sorted_set_ops — ordered insert+contains (the one missing collection) - string_text_processing — split/pad_left/starts_with intrinsic group - task_group_spawn — structured concurrency spawn + async-let join - deep_copy_list — per-iteration List copy (Rc/clone traffic) Two separable runtime bugs surfaced and are flagged (README findings #3, #4; plan §0.2): - hash-Set is ~750x slower than an ordered set at the same insert+contains workload (set 1680x vs sorted_set_ops 2.2x reg/rust) — isolates the cost to the hash-Set impl, not dispatch. - task_group_spawn scales ~quadratically in round count under every interpreted mode (eval == vm == jit: 0.34/9.9/725 ms at 100/1k/10k), a runtime bug (unreclaimed task frames), not a JIT one. Pinned to size 2000 and the runner gained a per-mode --timeout guard so a pathological case degrades to n/a instead of hanging the whole suite. Refresh baseline-20260620.json (now 37 cases) and the README findings. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 6de0193 commit 6c81153

9 files changed

Lines changed: 291 additions & 68 deletions

File tree

benchmarks/vm-jit/README.md

Lines changed: 58 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,13 @@ From the repo root, inside the dev container:
1717

1818
```sh
1919
docker compose run --rm dev ./benchmarks/vm-jit/run-baseline.sh
20-
# options: --iterations N --warmup N --out PATH
20+
# options: --iterations N --warmup N --timeout SECS --out PATH
2121
```
2222

23+
`--timeout` (default 180 s) caps each mode per case: a pathological kernel — e.g.
24+
a super-linear runtime path like `task_group_spawn` at large sizes — degrades to
25+
an `n/a` cell instead of hanging the whole suite. `--timeout 0` disables it.
26+
2327
Each case runs through four modes and reports mean ms + tier ratios:
2428

2529
| column | mode | meaning |
@@ -69,6 +73,7 @@ parsing doesn't taint per-function eligibility.
6973
| Linear recursion (depth) |`linear_recursion` | sustained frame push/pop depth |
7074
| Float arithmetic |`float_loop_sum` | Float family + Int↔Float / Float→String |
7175
| String build/inspect |`string_build_scan` | concat alloc, slice, format |
76+
| String text-processing |`string_text_processing` | `split`/`pad_left`/`starts_with` intrinsics |
7277
| String-keyed map | `map_string_keys` | string hashing |
7378
| User sum-type make/match |`variant_match_loop` | `MakeVariant`/`MatchVariant` |
7479
| Option match | `match_option_loop` | option destructure |
@@ -82,11 +87,14 @@ parsing doesn't taint per-function eligibility.
8287
| Sorted map insert | `sorted_map_insert` | ordered insert |
8388
| Sorted map scan | `sorted_map_scan` | keys + get scan |
8489
| Set membership |`set_insert_contains` | Set insert/contains |
90+
| Sorted-set membership |`sorted_set_ops` | ordered insert + `contains` |
8591
| Deque FIFO | `deque_queue` | push_back/pop_front |
8692
| Bytes |`bytes_scan` | Bytes construct/slice/len |
93+
| Deep value copy |`deep_copy_list` | per-iter List copy (Rc/clone traffic) |
8794
| Stored `owned Fn` dynamic call |`dynamic_closure_call` | indirect closure dispatch |
8895
| Json | `json_parse_access` | parse + field access |
8996
| Async call/await | `async_call_loop` | park/resume frame state |
97+
| Structured concurrency |`task_group_spawn` | `task_group` spawn + async-let join |
9098
| Realistic mixed | `selfhost_manifest_inspector`, `selfhost_mailbox_bench` | end-to-end blends |
9199

92100
### Known not covered (intentionally)
@@ -107,11 +115,11 @@ speedup, **<1 = faster than the plain VM**).
107115

108116
| kernel | reg_vm_ms | native_ms | rust_ms | nat/reg |
109117
|---|--:|--:|--:|--:|
110-
| `native_scalar_loop` | 153.5 | 3.18 | 2.31 | **0.02** |
111-
| `native_read_heap` | 115.6 | 6.58 | 0.58 | **0.06** |
112-
| `native_call_chain` | 202.0 | 5.41 | 5.58 | **0.03** |
113-
| `int_divmod_loop` | 168.9 | 4.23 | 1.90 | **0.03** |
114-
| `bool_logic_loop` | 326.7 | 6.60 | 2.99 | **0.02** |
118+
| `native_scalar_loop` | 153.5 | 3.20 | 2.41 | **0.02** |
119+
| `native_read_heap` | 115.5 | 6.77 | 0.61 | **0.06** |
120+
| `native_call_chain` | 196.3 | 5.33 | 5.56 | **0.03** |
121+
| `int_divmod_loop` | 179.3 | 4.20 | 1.96 | **0.02** |
122+
| `bool_logic_loop` | 347.2 | 6.70 | 3.21 | **0.02** |
115123

116124
So the problem is **not** codegen quality — it's **eligibility/coverage**.
117125
The moment a function does anything outside the pure-scalar/read-heap subset
@@ -120,33 +128,53 @@ speedup, **<1 = faster than the plain VM**).
120128
eligibility (Phase 3) is likely the highest-ROI lever**, not just dispatch.
121129

122130
2. **On the real (ineligible) kernels both JIT tiers do ~nothing**`jit/reg`
123-
and `nat/reg` hover at ~1.00, and frequently **>1.0 (native makes it
124-
slower)**: `list_sort` 1.31, `map_int` 1.19, `closure_alloc` 1.13,
125-
`recursion_fib` 1.09 — the tier translates part of the function, bails, and
126-
eats the overhead. Tier-0 similarly regresses `json` (1.48), `dynamic_closure`
127-
(1.66), `float` (1.27). A cheap early win: **don't attempt native on
128-
functions that will predictably bail.**
129-
130-
3. **`set_insert_contains` is pathological: reg/rust ≈ 1680×** (1774 ms vs
131-
1.06 ms), vs the comparable `map_int` at 4.5×. Almost certainly a Set
132-
implementation bug, not dispatch cost — flagged for its own investigation,
133-
separate from the tier work.
134-
135-
4. **Heap-variant & combinator paths are 290–655×** (`option_result_chain` 655×,
136-
`match_option_loop` 331×, `variant_match_loop` 288×, `nested_struct_field`
137-
380×) — make/match/allocate of Option/Result/sum/struct values dominates.
138-
139-
5. **`linear_recursion` is the slowest non-Set kernel at 314×** (4.6 s) — deep
140-
frame push/pop depth is expensive; the one kernel where tier-0 actually helps
141-
a little (0.88).
142-
143-
6. **String/Map/Json/Bytes kernels are closest to Rust** (1.5–9×) because their
144-
work already lives in native runtime helpers — least to gain from VM-tier work.
131+
and `nat/reg` hover at ~1.00, and frequently **>1.0 (the tier makes it
132+
slower)**: tier-0 regresses `string_text_processing` **1.80×** (the worst in
133+
the suite), `selfhost_mailbox` 1.21; native regresses `float` 1.23,
134+
`closure_alloc` 1.16, `list_closure` 1.09 — the tier translates part of the
135+
function, bails, and eats the overhead. (The exact offenders shift run to run;
136+
the pattern — tiers *regress* ineligible code — is stable.) A cheap early win:
137+
**don't attempt the JIT on functions that will predictably bail.**
138+
139+
3. **`set_insert_contains` is pathological: reg/rust ≈ 1680×** (1796 ms vs
140+
1.07 ms) — and the new `sorted_set_ops` kernel makes it a smoking gun: the
141+
*same* insert+contains workload on an **ordered** set is **2.2×** reg/rust
142+
(1.30 ms). So an ordered membership structure is ~750× faster than the hash
143+
`Set` at the same job. This isolates the cost to the **hash-`Set`
144+
implementation specifically** (almost certainly an O(n) or rehash-thrash bug),
145+
not to dispatch or to set semantics generally. Its own, likely cheap, fix.
146+
147+
4. **Structured concurrency is both slow and super-linear.** `task_group_spawn`
148+
is **337× reg/rust** even at the small size it now runs (2 000 rounds), and
149+
worse, it scales **≈ quadratically**: jit-internal measured 0.34 ms / 9.9 ms /
150+
725 ms at 100 / 1 000 / 10 000 rounds (and identically under plain `eval`, so
151+
it is a **runtime** bug, not a JIT one — completed `task_group` frames look
152+
unreclaimed). The original 100 000-round size was uncapped and hung the suite;
153+
the kernel is pinned to 2 000 and the runner now has a per-mode `--timeout`
154+
guard so a pathological case degrades to `n/a` instead of hanging. Flag for
155+
its own investigation alongside the Set bug.
156+
157+
5. **Heap-variant & combinator paths are 340–660×** (`option_result_chain` 662×,
158+
`match_option_loop` 362×, `variant_match_loop` 342×, `nested_struct_field`
159+
374×) — make/match/allocate of Option/Result/sum/struct values dominates.
160+
161+
6. **`linear_recursion` is the slowest non-pathological kernel at ~294×** (4.1 s)
162+
— deep frame push/pop depth is expensive.
163+
164+
7. **Deep value copy (Rc/clone) is a ~22× tax** (`deep_copy_list` 21.7×) — real
165+
but well below the variant/struct make/match tier, so Phase 4 (value-rep)
166+
stays low priority: clone traffic is not where the big wins are.
167+
168+
8. **String/Map/Json/Bytes/SortedSet kernels are closest to Rust** (1.5–9×)
169+
because their work already lives in native runtime helpers — least to gain
170+
from VM-tier work.
145171

146172
Implications for the plan: (a) Phase 3 (widen native eligibility) is re-weighted
147173
**up** — native is already near-Rust where it runs; (b) add a "predict-and-skip
148-
bail" guard so the tiers stop *regressing* ineligible code; (c) the Set anomaly
149-
(#3) is a separate, likely cheap, high-impact bug fix.
174+
bail" guard so the tiers stop *regressing* ineligible code (#2); (c) the hash-Set
175+
anomaly (#3) and the quadratic `task_group` runtime (#4) are separate, likely
176+
cheap, high-impact bug fixes that do not depend on the tier work; (d) Rc/clone
177+
traffic (#7) confirms Phase 4 can stay deferred.
150178

151179
## Adding a kernel
152180

benchmarks/vm-jit/baseline/baseline-20260620.json

Lines changed: 37 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,38 +2,42 @@
22
"iterations": 5,
33
"warmup": 1,
44
"cases": [
5-
{"category":"native-scalar","case":"native_scalar_loop.rss","size":"2000000","reg_vm_ms":153.457683,"jit_ms":153.111989,"native_ms":3.184386,"rust_ms":2.314222},
6-
{"category":"native-read-heap","case":"native_read_heap.rss","size":"2000000","reg_vm_ms":115.55809,"jit_ms":114.279249,"native_ms":6.577557,"rust_ms":0.583562},
7-
{"category":"native-call","case":"native_call_chain.rss","size":"1500000","reg_vm_ms":201.961433,"jit_ms":206.206385,"native_ms":5.410725,"rust_ms":5.574784},
8-
{"category":"int-divmod","case":"int_divmod_loop.rss","size":"2000000","reg_vm_ms":168.89069,"jit_ms":179.23963,"native_ms":4.232961,"rust_ms":1.899341},
9-
{"category":"bool-logic","case":"bool_logic_loop.rss","size":"2000000","reg_vm_ms":326.721717,"jit_ms":336.44246,"native_ms":6.596299,"rust_ms":2.987159},
10-
{"category":"int-arith","case":"pure_loop_sum.rss","size":"2000000","reg_vm_ms":247.106757,"jit_ms":257.33228,"native_ms":247.356443,"rust_ms":3.835658},
11-
{"category":"struct-field","case":"struct_field_rw.rss","size":"200000","reg_vm_ms":44.128567,"jit_ms":43.695347,"native_ms":42.81113,"rust_ms":0.166535},
12-
{"category":"struct-nested","case":"nested_struct_field.rss","size":"300000","reg_vm_ms":93.073526,"jit_ms":94.55333,"native_ms":94.570614,"rust_ms":0.244677},
13-
{"category":"call-static","case":"function_call_hot_loop.rss","size":"200000","reg_vm_ms":37.099722,"jit_ms":37.16694,"native_ms":36.640618,"rust_ms":0.561213},
14-
{"category":"recursion-tree","case":"recursion_fib.rss","size":"30","reg_vm_ms":210.577398,"jit_ms":216.230689,"native_ms":228.890624,"rust_ms":2.969392},
15-
{"category":"recursion-linear","case":"linear_recursion.rss","size":"50000","reg_vm_ms":4647.048691,"jit_ms":4097.047955,"native_ms":4151.038991,"rust_ms":14.818337},
16-
{"category":"float","case":"float_loop_sum.rss","size":"1000000","reg_vm_ms":75.306713,"jit_ms":95.797992,"native_ms":76.451107,"rust_ms":1.526888},
17-
{"category":"string","case":"string_build_scan.rss","size":"200000","reg_vm_ms":36.914004,"jit_ms":37.777445,"native_ms":37.132889,"rust_ms":13.220889},
18-
{"category":"string-map","case":"map_string_keys.rss","size":"16000","reg_vm_ms":17.810704,"jit_ms":12.4346,"native_ms":6.881151,"rust_ms":2.92115},
19-
{"category":"variant-user","case":"variant_match_loop.rss","size":"300000","reg_vm_ms":108.672445,"jit_ms":125.023662,"native_ms":111.837014,"rust_ms":0.376861},
20-
{"category":"variant-option","case":"match_option_loop.rss","size":"200000","reg_vm_ms":31.245447,"jit_ms":30.868393,"native_ms":30.649216,"rust_ms":0.094525},
21-
{"category":"variant-combinator","case":"option_result_chain.rss","size":"60000","reg_vm_ms":47.72894,"jit_ms":46.930591,"native_ms":52.329538,"rust_ms":0.072825},
22-
{"category":"list-scan","case":"list_index_scan.rss","size":"19000","reg_vm_ms":1.973841,"jit_ms":1.656981,"native_ms":1.591647,"rust_ms":0.019266},
23-
{"category":"list-closure","case":"list_closure_pipeline.rss","size":"12000","reg_vm_ms":4.225353,"jit_ms":3.598439,"native_ms":3.772532,"rust_ms":0.041908},
24-
{"category":"closure-alloc","case":"closure_alloc_loop.rss","size":"300000","reg_vm_ms":33.552675,"jit_ms":33.422957,"native_ms":38.049689,"rust_ms":0.128301},
25-
{"category":"list-pipeline","case":"pipeline_chain.rss","size":"16000","reg_vm_ms":3.383271,"jit_ms":3.309203,"native_ms":3.716182,"rust_ms":0.055567},
26-
{"category":"list-sort","case":"list_sort.rss","size":"4000","reg_vm_ms":18.553223,"jit_ms":18.217876,"native_ms":24.354669,"rust_ms":0.434442},
27-
{"category":"map-int","case":"map_insert_lookup.rss","size":"17000","reg_vm_ms":2.695618,"jit_ms":2.662094,"native_ms":3.200924,"rust_ms":0.593669},
28-
{"category":"sorted-map-insert","case":"sorted_map_insert.rss","size":"8000","reg_vm_ms":2.434344,"jit_ms":2.337164,"native_ms":2.433319,"rust_ms":0.565904},
29-
{"category":"sorted-map-scan","case":"sorted_map_scan.rss","size":"12000","reg_vm_ms":3.637075,"jit_ms":3.695273,"native_ms":3.674432,"rust_ms":0.918024},
30-
{"category":"set","case":"set_insert_contains.rss","size":"30000","reg_vm_ms":1773.996818,"jit_ms":1771.040505,"native_ms":1763.028911,"rust_ms":1.055736},
31-
{"category":"deque","case":"deque_queue.rss","size":"50000","reg_vm_ms":4.766012,"jit_ms":4.816395,"native_ms":4.840669,"rust_ms":0.118906},
32-
{"category":"bytes","case":"bytes_scan.rss","size":"200000","reg_vm_ms":20.87134,"jit_ms":21.51582,"native_ms":20.855232,"rust_ms":2.205859},
33-
{"category":"closure-dynamic","case":"dynamic_closure_call.rss","size":"200000","reg_vm_ms":41.054785,"jit_ms":67.972256,"native_ms":41.517968,"rust_ms":0.36911},
34-
{"category":"json","case":"json_parse_access.rss","size":"50000","reg_vm_ms":51.280614,"jit_ms":75.74428,"native_ms":50.29214,"rust_ms":34.17042},
35-
{"category":"async","case":"async_call_loop.rss","size":"200000","reg_vm_ms":36.875962,"jit_ms":36.746431,"native_ms":37.798412,"rust_ms":null},
36-
{"category":"selfhost-manifest","case":"selfhost_manifest_inspector.rss","size":"benchmarks/micro/fixtures/package-medium/rsspkg.toml","reg_vm_ms":0.097848,"jit_ms":0.046441,"native_ms":0.04854,"rust_ms":0.051507},
37-
{"category":"selfhost-mailbox","case":"selfhost_mailbox_bench.rss","size":"60000","reg_vm_ms":112.603209,"jit_ms":80.854286,"native_ms":81.589531,"rust_ms":0.437867}
5+
{"category":"native-scalar","case":"native_scalar_loop.rss","size":"2000000","reg_vm_ms":153.450249,"jit_ms":153.371398,"native_ms":3.201323,"rust_ms":2.412036},
6+
{"category":"native-read-heap","case":"native_read_heap.rss","size":"2000000","reg_vm_ms":115.515553,"jit_ms":118.760618,"native_ms":6.772098,"rust_ms":0.612261},
7+
{"category":"native-call","case":"native_call_chain.rss","size":"1500000","reg_vm_ms":196.302776,"jit_ms":197.774866,"native_ms":5.327675,"rust_ms":5.555101},
8+
{"category":"int-divmod","case":"int_divmod_loop.rss","size":"2000000","reg_vm_ms":179.280179,"jit_ms":166.543577,"native_ms":4.197145,"rust_ms":1.958134},
9+
{"category":"bool-logic","case":"bool_logic_loop.rss","size":"2000000","reg_vm_ms":347.169502,"jit_ms":338.2524,"native_ms":6.694568,"rust_ms":3.212792},
10+
{"category":"int-arith","case":"pure_loop_sum.rss","size":"2000000","reg_vm_ms":240.724204,"jit_ms":241.646979,"native_ms":245.257864,"rust_ms":3.860776},
11+
{"category":"struct-field","case":"struct_field_rw.rss","size":"200000","reg_vm_ms":43.875971,"jit_ms":43.066937,"native_ms":43.761612,"rust_ms":0.165308},
12+
{"category":"struct-nested","case":"nested_struct_field.rss","size":"300000","reg_vm_ms":92.842627,"jit_ms":95.59277,"native_ms":97.32352,"rust_ms":0.24795},
13+
{"category":"call-static","case":"function_call_hot_loop.rss","size":"200000","reg_vm_ms":37.870419,"jit_ms":36.868427,"native_ms":38.519386,"rust_ms":0.545433},
14+
{"category":"recursion-tree","case":"recursion_fib.rss","size":"30","reg_vm_ms":224.940183,"jit_ms":213.232579,"native_ms":211.518604,"rust_ms":2.820809},
15+
{"category":"recursion-linear","case":"linear_recursion.rss","size":"50000","reg_vm_ms":4156.306189,"jit_ms":4099.619487,"native_ms":4147.873087,"rust_ms":14.13297},
16+
{"category":"float","case":"float_loop_sum.rss","size":"1000000","reg_vm_ms":72.741296,"jit_ms":73.878812,"native_ms":89.474229,"rust_ms":1.498632},
17+
{"category":"string","case":"string_build_scan.rss","size":"200000","reg_vm_ms":37.227373,"jit_ms":36.949423,"native_ms":36.891548,"rust_ms":14.551392},
18+
{"category":"string-text","case":"string_text_processing.rss","size":"100000","reg_vm_ms":44.948627,"jit_ms":80.683534,"native_ms":47.285951,"rust_ms":28.514427},
19+
{"category":"string-map","case":"map_string_keys.rss","size":"16000","reg_vm_ms":7.651754,"jit_ms":7.253979,"native_ms":6.903029,"rust_ms":3.07649},
20+
{"category":"variant-user","case":"variant_match_loop.rss","size":"300000","reg_vm_ms":125.618428,"jit_ms":108.532653,"native_ms":110.234594,"rust_ms":0.367141},
21+
{"category":"variant-option","case":"match_option_loop.rss","size":"200000","reg_vm_ms":30.798301,"jit_ms":29.998618,"native_ms":31.626625,"rust_ms":0.085174},
22+
{"category":"variant-combinator","case":"option_result_chain.rss","size":"60000","reg_vm_ms":48.3353,"jit_ms":45.721135,"native_ms":51.190782,"rust_ms":0.073008},
23+
{"category":"list-scan","case":"list_index_scan.rss","size":"19000","reg_vm_ms":1.62429,"jit_ms":1.609049,"native_ms":1.583207,"rust_ms":0.017175},
24+
{"category":"list-closure","case":"list_closure_pipeline.rss","size":"12000","reg_vm_ms":3.47659,"jit_ms":3.600923,"native_ms":3.777506,"rust_ms":0.038183},
25+
{"category":"closure-alloc","case":"closure_alloc_loop.rss","size":"300000","reg_vm_ms":34.232657,"jit_ms":34.585007,"native_ms":39.661796,"rust_ms":0.124166},
26+
{"category":"list-pipeline","case":"pipeline_chain.rss","size":"16000","reg_vm_ms":3.468223,"jit_ms":3.383273,"native_ms":3.550698,"rust_ms":0.054074},
27+
{"category":"list-sort","case":"list_sort.rss","size":"4000","reg_vm_ms":18.384282,"jit_ms":17.547816,"native_ms":17.495865,"rust_ms":0.482924},
28+
{"category":"map-int","case":"map_insert_lookup.rss","size":"17000","reg_vm_ms":2.705407,"jit_ms":2.761598,"native_ms":2.62059,"rust_ms":0.573258},
29+
{"category":"sorted-map-insert","case":"sorted_map_insert.rss","size":"8000","reg_vm_ms":2.427648,"jit_ms":2.422907,"native_ms":2.405448,"rust_ms":0.567841},
30+
{"category":"sorted-map-scan","case":"sorted_map_scan.rss","size":"12000","reg_vm_ms":3.707281,"jit_ms":3.768256,"native_ms":3.700639,"rust_ms":0.926999},
31+
{"category":"set","case":"set_insert_contains.rss","size":"30000","reg_vm_ms":1796.190578,"jit_ms":1745.084837,"native_ms":1732.635993,"rust_ms":1.067999},
32+
{"category":"sorted-set","case":"sorted_set_ops.rss","size":"8000","reg_vm_ms":1.297166,"jit_ms":1.243474,"native_ms":1.288466,"rust_ms":0.582866},
33+
{"category":"deque","case":"deque_queue.rss","size":"50000","reg_vm_ms":4.658297,"jit_ms":4.760022,"native_ms":4.720656,"rust_ms":0.109524},
34+
{"category":"bytes","case":"bytes_scan.rss","size":"200000","reg_vm_ms":20.877156,"jit_ms":21.167498,"native_ms":20.374739,"rust_ms":2.347498},
35+
{"category":"deep-copy","case":"deep_copy_list.rss","size":"100000","reg_vm_ms":68.505373,"jit_ms":69.119698,"native_ms":69.659689,"rust_ms":3.151415},
36+
{"category":"closure-dynamic","case":"dynamic_closure_call.rss","size":"200000","reg_vm_ms":37.551014,"jit_ms":37.879705,"native_ms":39.199713,"rust_ms":0.360008},
37+
{"category":"json","case":"json_parse_access.rss","size":"50000","reg_vm_ms":50.076174,"jit_ms":50.481908,"native_ms":49.539274,"rust_ms":31.489825},
38+
{"category":"async","case":"async_call_loop.rss","size":"200000","reg_vm_ms":36.381123,"jit_ms":36.349031,"native_ms":37.444839,"rust_ms":null},
39+
{"category":"async-taskgroup","case":"task_group_spawn.rss","size":"2000","reg_vm_ms":31.691751,"jit_ms":31.264826,"native_ms":30.398209,"rust_ms":0.0941},
40+
{"category":"selfhost-manifest","case":"selfhost_manifest_inspector.rss","size":"benchmarks/micro/fixtures/package-medium/rsspkg.toml","reg_vm_ms":0.046441,"jit_ms":0.043958,"native_ms":0.049116,"rust_ms":0.045941},
41+
{"category":"selfhost-mailbox","case":"selfhost_mailbox_bench.rss","size":"60000","reg_vm_ms":79.176401,"jit_ms":96.132959,"native_ms":85.825131,"rust_ms":0.433083}
3842
]
3943
}

0 commit comments

Comments
 (0)