Some checks failed
API and SemVer surface / api-surface (push) Failing after 1m8s
Native code generation / deterministic (push) Failing after 2m6s
Concurrency and resource soak audit / soak (push) Failing after 12m13s
Documentation / documentation (push) Failing after 1m36s
Imaging and meshing gate / native (push) Failing after 3m2s
JPEG 2000 feature / linux (push) Successful in 2m48s
performance evidence / audit (push) Failing after 13m49s
Release platform and feature matrix / audit (push) Successful in 44s
Native Rust workspace compile / compile (push) Failing after 55s
Skia feature / linux (push) Successful in 31m13s
Dependency and supply-chain audit / audit (push) Failing after 9m13s
Release platform and feature matrix / matrix (false, linux-stable-minimal, x86_64-unknown-linux-gnu, stable) (push) Failing after 9m49s
Release platform and feature matrix / matrix (false, windows-stable-portable, x86_64-pc-windows-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (true, linux-msrv-portable, x86_64-unknown-linux-gnu, 1.96.0) (push) Has been cancelled
Release platform and feature matrix / matrix (true, linux-stable-default, x86_64-unknown-linux-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (true, linux-stable-features, x86_64-unknown-linux-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (true, linux-stable-release-surface, x86_64-unknown-linux-gnu, stable) (push) Has been cancelled
Release platform and feature matrix / matrix (false, macos-stable-portable, x86_64-apple-darwin, stable) (push) Has been cancelled
42 lines
2.5 KiB
Markdown
42 lines
2.5 KiB
Markdown
# Performance comparison report
|
|
|
|
Accepted evidence captured 2026-08-12 on the Linux x86-64 host documented in
|
|
`README.md`. Ratios are Rust divided by the pinned C# reference; lower is
|
|
better. Bytes are allocated bytes per operation. Full cold and seven-sample
|
|
warm measurements, throughput, allocation count support, retained heap, hashes,
|
|
and toolchains are in `results/`.
|
|
|
|
| Workload | Rust latency | C# latency | Ratio | Rust bytes | C# bytes | Result |
|
|
|---|---:|---:|---:|---:|---:|---|
|
|
| UUID/math | 107 ns | 105 ns | 1.02x | 36 | 40 | pass |
|
|
| LLSD XML | 23.36 us | 38.74 us | 0.60x | 10,939 | 28,600 | pass |
|
|
| LLSD JSON | 5.23 us | 21.72 us | 0.24x | 7,447 | 3,680 | reviewed pass |
|
|
| LLSD binary | 2.69 us | 11.07 us | 0.24x | 6,749 | 7,960 | pass |
|
|
| LLSD notation | 7.01 us | 18.87 us | 0.37x | 8,489 | 10,096 | pass |
|
|
| LLSD protobuf | 7.34 us | 30.97 us | 0.24x | 8,324 | 26,120 | pass |
|
|
| Packet codec | 209 ns | 176 ns | 1.19x | 124 | 264 | pass |
|
|
| Asset decode | 288 ns | 2.98 us | 0.10x | 1,246 | 4,512 | pass |
|
|
| Image decode | 42.67 us | 48.27 us | 0.88x | 65,536 | 131,612 | pass |
|
|
| Mesh decode | 413.29 us | 378.54 us | 1.09x | 507,740 | 564,593 | pass |
|
|
| Inventory update | 972 ns | 758 ns | 1.28x | 373 | 357 | pass |
|
|
| Object update | 27 ns | 46 ns | 0.59x | 16 | 11 | pass |
|
|
| Rendering | 5.22 us | 1.01 us | 5.15x | 9,480 | 3,048 | reviewed pass |
|
|
| Client throughput | 6.23 us | 3.80 us | 1.64x | 11,795 | 12,054 | reviewed pass |
|
|
|
|
The initial profile exposed two actionable regressions. Root inventory updates
|
|
rebuilt the entire hierarchy and link index on every record; the new guarded
|
|
root path updates only the affected node/link and changed the comparison from
|
|
about 22.6x latency and 10.2x allocation to 1.28x and 1.05x. TGA decoding copied
|
|
the input stream and dispatched every ordinary pixel through the fully generic
|
|
orientation/palette path; the checked borrowed-input and common-layout path
|
|
changed it from about 3.4x latency and 2.0x allocation to 0.88x and 0.50x.
|
|
|
|
LLSD JSON, rendering, and client throughput are the reviewed differences. JSON
|
|
trades 2.02x allocated bytes for 4.15x lower latency. Rendering cannot be
|
|
compared as equal work: the pinned C# method is a placeholder one-face cube,
|
|
while Rust returns the required complete checked mesh. Client throughput is
|
|
1.64x slower while allocating fewer bytes because Rust preserves checked
|
|
results and bounded owned maps. The executable limits and rationales are in
|
|
`release-criteria.json`; every other workload passes the default criteria or
|
|
the documented sub-microsecond noise rule.
|