Skip to content
Merged
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
5 changes: 5 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,8 @@ harness = false
[[bench]]
name = "simd"
harness = false

[[bench]]
name = "packed"
harness = false
required-features = ["experimental-packed"]
20 changes: 20 additions & 0 deletions bench-results/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,15 @@ bench-results/
topic.json
properties.json
remoting-header.json
packed-evidence/
YYYYMMDD-HHMMSS/
summary.md
packed-test.txt
packed-miri.txt
packed-asan.txt
fuzz-packed-from-bytes.txt
fuzz-packed-push-str.txt
packed-bench.txt
summaries/
summary-v1.1-v1.2.md
summary-v1.2-v2-packed.md
Expand Down Expand Up @@ -51,3 +60,14 @@ On Windows PowerShell:
```powershell
scripts/bench-all.ps1 current
```

For the experimental packed representation evidence gate:

```powershell
scripts/verify-packed.ps1 -RunMiri -RunSanitizer -RunFuzz -RunBench
```

The packed evidence script always runs `cargo test --features experimental-packed`.
The Miri, sanitizer, fuzz, and packed benchmark gates are opt-in because they
require nightly components, optional cargo subcommands, target support, or more
runtime than the default test suite.
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
warning: linker stdout: 姝e湪鍒涘缓搴?C:\Users\ljbmx\Desktop\mxsm\cheetah-string\fuzz\target\x86_64-pc-windows-msvc\release\deps\fuzz_packed_from_bytes.lib 鍜屽璞?C:\Users\ljbmx\Desktop\mxsm\cheetah-string\fuzz\target\x86_64-pc-windows-msvc\release\deps\fuzz_packed_from_bytes.exp
|
= note: `#[warn(linker_messages)]` on by default

warning: `cheetah-string-fuzz` (bin "fuzz_packed_from_bytes") generated 1 warning
Finished `release` profile [optimized + debuginfo] target(s) in 0.04s
warning: linker stdout: 姝e湪鍒涘缓搴?C:\Users\ljbmx\Desktop\mxsm\cheetah-string\fuzz\target\x86_64-pc-windows-msvc\release\deps\fuzz_packed_from_bytes.lib 鍜屽璞?C:\Users\ljbmx\Desktop\mxsm\cheetah-string\fuzz\target\x86_64-pc-windows-msvc\release\deps\fuzz_packed_from_bytes.exp
|
= note: `#[warn(linker_messages)]` on by default

warning: `cheetah-string-fuzz` (bin "fuzz_packed_from_bytes") generated 1 warning
Finished `release` profile [optimized + debuginfo] target(s) in 0.01s
Running `fuzz\target\x86_64-pc-windows-msvc\release\fuzz_packed_from_bytes.exe -artifact_prefix=C:\Users\ljbmx\Desktop\mxsm\cheetah-string\fuzz\artifacts\fuzz_packed_from_bytes\ -runs=100 C:\Users\ljbmx\Desktop\mxsm\cheetah-string\fuzz\corpus\fuzz_packed_from_bytes`
INFO: Running with entropic power schedule (0xFF, 100).
INFO: Seed: 493125877
INFO: Loaded 1 modules (290 inline 8-bit counters): 290 [00007FF659A85EC8, 00007FF659A85FEA),
INFO: Loaded 1 PC tables (290 PCs): 290 [00007FF659A66BD8,00007FF659A67DF8),
INFO: 0 files found in C:\Users\ljbmx\Desktop\mxsm\cheetah-string\fuzz\corpus\fuzz_packed_from_bytes
INFO: -max_len is not provided; libFuzzer will not generate inputs larger than 4096 bytes
INFO: A corpus is not provided, starting from an empty corpus
#2 INITED cov: 26 ft: 26 corp: 1/1b exec/s: 0 rss: 41Mb
#4 NEW cov: 27 ft: 27 corp: 2/3b lim: 4 exec/s: 0 rss: 41Mb L: 2/2 MS: 2 ChangeBit-InsertByte-
#28 REDUCE cov: 27 ft: 27 corp: 2/2b lim: 4 exec/s: 0 rss: 41Mb L: 1/1 MS: 4 CrossOver-CopyPart-ChangeBinInt-EraseBytes-
#100 DONE cov: 27 ft: 27 corp: 2/2b lim: 4 exec/s: 0 rss: 41Mb
Done 100 runs in 0 second(s)
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
warning: linker stdout: 姝e湪鍒涘缓搴?C:\Users\ljbmx\Desktop\mxsm\cheetah-string\fuzz\target\x86_64-pc-windows-msvc\release\deps\fuzz_packed_push_str.lib 鍜屽璞?C:\Users\ljbmx\Desktop\mxsm\cheetah-string\fuzz\target\x86_64-pc-windows-msvc\release\deps\fuzz_packed_push_str.exp
|
= note: `#[warn(linker_messages)]` on by default

warning: `cheetah-string-fuzz` (bin "fuzz_packed_push_str") generated 1 warning
Finished `release` profile [optimized + debuginfo] target(s) in 0.03s
warning: linker stdout: 姝e湪鍒涘缓搴?C:\Users\ljbmx\Desktop\mxsm\cheetah-string\fuzz\target\x86_64-pc-windows-msvc\release\deps\fuzz_packed_push_str.lib 鍜屽璞?C:\Users\ljbmx\Desktop\mxsm\cheetah-string\fuzz\target\x86_64-pc-windows-msvc\release\deps\fuzz_packed_push_str.exp
|
= note: `#[warn(linker_messages)]` on by default

warning: `cheetah-string-fuzz` (bin "fuzz_packed_push_str") generated 1 warning
Finished `release` profile [optimized + debuginfo] target(s) in 0.01s
Running `fuzz\target\x86_64-pc-windows-msvc\release\fuzz_packed_push_str.exe -artifact_prefix=C:\Users\ljbmx\Desktop\mxsm\cheetah-string\fuzz\artifacts\fuzz_packed_push_str\ -runs=100 C:\Users\ljbmx\Desktop\mxsm\cheetah-string\fuzz\corpus\fuzz_packed_push_str`
INFO: Running with entropic power schedule (0xFF, 100).
INFO: Seed: 503145824
INFO: Loaded 1 modules (359 inline 8-bit counters): 359 [00007FF6904D7088, 00007FF6904D71EF),
INFO: Loaded 1 PC tables (359 PCs): 359 [00007FF6904B6BD8,00007FF6904B8248),
INFO: 0 files found in C:\Users\ljbmx\Desktop\mxsm\cheetah-string\fuzz\corpus\fuzz_packed_push_str
INFO: -max_len is not provided; libFuzzer will not generate inputs larger than 4096 bytes
INFO: A corpus is not provided, starting from an empty corpus
#2 INITED cov: 37 ft: 37 corp: 1/1b exec/s: 0 rss: 41Mb
#6 NEW cov: 41 ft: 41 corp: 2/3b lim: 4 exec/s: 0 rss: 41Mb L: 2/2 MS: 4 CrossOver-ChangeByte-CrossOver-CopyPart-
#20 NEW cov: 42 ft: 42 corp: 3/6b lim: 4 exec/s: 0 rss: 41Mb L: 3/3 MS: 4 ChangeBit-InsertByte-CopyPart-ChangeByte-
#31 REDUCE cov: 42 ft: 42 corp: 3/5b lim: 4 exec/s: 0 rss: 41Mb L: 2/2 MS: 1 EraseBytes-
#34 NEW cov: 43 ft: 43 corp: 4/7b lim: 4 exec/s: 0 rss: 41Mb L: 2/2 MS: 3 ShuffleBytes-InsertByte-ChangeByte-
#100 DONE cov: 43 ft: 43 corp: 4/7b lim: 4 exec/s: 0 rss: 41Mb
Done 100 runs in 0 second(s)
93 changes: 93 additions & 0 deletions bench-results/packed-evidence/20260624-130416/packed-asan.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@

running 1 test
test packed::tests::packed_size_is_three_words ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 5 filtered out; finished in 0.01s


running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 33 filtered out; finished in 0.00s


running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 41 filtered out; finished in 0.00s


running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s


running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 8 filtered out; finished in 0.00s


running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 1 filtered out; finished in 0.00s


running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 8 filtered out; finished in 0.00s


running 1 test
test packed_layout_is_24_bytes ... ok

test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 5 filtered out; finished in 0.00s


running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 9 filtered out; finished in 0.00s


running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 5 filtered out; finished in 0.00s


running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s


running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s


running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 4 filtered out; finished in 0.00s


running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 22 filtered out; finished in 0.00s


running 0 tests

test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 5 filtered out; finished in 0.00s

Finished `test` profile [unoptimized + debuginfo] target(s) in 0.15s
Running unittests src\lib.rs (target\debug\deps\cheetah_string-ef19ecdb4ae50af0.exe)
Running tests\api_extensions.rs (target\debug\deps\api_extensions-265ea9d412c4d589.exe)
Running tests\basic.rs (target\debug\deps\basic-5a9db4b2e7a37375.exe)
Running tests\bytes.rs (target\debug\deps\bytes-28bff98899307ff2.exe)
Running tests\comprehensive_tests.rs (target\debug\deps\comprehensive_tests-9762dbcc65ca96cf.exe)
Running tests\layout_snapshot.rs (target\debug\deps\layout_snapshot-178567cc15cd9278.exe)
Running tests\mutation.rs (target\debug\deps\mutation-261bb87b5dc079ef.exe)
Running tests\packed.rs (target\debug\deps\packed-4719a7e1f01d1234.exe)
Running tests\patterns.rs (target\debug\deps\patterns-4bb1c92062e3a356.exe)
Running tests\search.rs (target\debug\deps\search-70c948bc42af4b07.exe)
Running tests\serde.rs (target\debug\deps\serde-64c9281c5b632aae.exe)
Running tests\simd.rs (target\debug\deps\simd-9ebcc041882bf452.exe)
Running tests\split_edge_cases.rs (target\debug\deps\split_edge_cases-c696d0bfbb0ebff4.exe)
Running tests\sso.rs (target\debug\deps\sso-fe28e8b20a68cdd8.exe)
Running tests\type_split.rs (target\debug\deps\type_split-936df32e17a021ec.exe)
135 changes: 135 additions & 0 deletions bench-results/packed-evidence/20260624-130416/packed-bench.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
packed_construction/CheetahString short
time: [9.6566 ns 9.7726 ns 9.9076 ns]
change: [-1.9188% +1.3898% +4.6098%] (p = 0.41 > 0.05)
No change in performance detected.
Found 13 outliers among 100 measurements (13.00%)
12 (12.00%) high mild
1 (1.00%) high severe
packed_construction/PackedCheetahString short
time: [24.627 ns 25.266 ns 25.947 ns]
change: [+8.8753% +11.638% +14.563%] (p = 0.00 < 0.05)
Performance has regressed.
Found 9 outliers among 100 measurements (9.00%)
4 (4.00%) high mild
5 (5.00%) high severe
packed_construction/CheetahString long
time: [33.496 ns 33.947 ns 34.421 ns]
change: [+2.2096% +4.7316% +7.0119%] (p = 0.00 < 0.05)
Performance has regressed.
Found 11 outliers among 100 measurements (11.00%)
9 (9.00%) high mild
2 (2.00%) high severe
packed_construction/PackedCheetahString long
time: [21.843 ns 22.464 ns 23.123 ns]
change: [+5.9260% +8.5757% +11.188%] (p = 0.00 < 0.05)
Performance has regressed.
Found 8 outliers among 100 measurements (8.00%)
7 (7.00%) high mild
1 (1.00%) high severe

packed_push_str/CheetahString inline append
time: [21.574 ns 21.770 ns 21.967 ns]
change: [+2.5228% +3.8924% +5.0881%] (p = 0.00 < 0.05)
Performance has regressed.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild
packed_push_str/PackedCheetahString inline append
time: [12.594 ns 12.698 ns 12.819 ns]
change: [+0.5722% +1.7418% +2.8416%] (p = 0.00 < 0.05)
Change within noise threshold.
packed_push_str/CheetahString promote to heap
time: [52.082 ns 52.768 ns 53.515 ns]
change: [-1.7095% +0.3918% +2.4332%] (p = 0.71 > 0.05)
No change in performance detected.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild
packed_push_str/PackedCheetahString promote to heap
time: [68.553 ns 70.513 ns 72.384 ns]
change: [-3.8334% -1.0159% +1.7525%] (p = 0.48 > 0.05)
No change in performance detected.
Found 3 outliers among 100 measurements (3.00%)
3 (3.00%) high mild

packed_mq_topic_insert/CheetahString short topics
time: [33.419 碌s 34.183 碌s 35.004 碌s]
thrpt: [28.568 Melem/s 29.255 Melem/s 29.923 Melem/s]
change:
time: [-0.1583% +2.5345% +5.4747%] (p = 0.08 > 0.05)
thrpt: [-5.1905% -2.4719% +0.1586%]
No change in performance detected.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild
packed_mq_topic_insert/PackedCheetahString short topics
time: [52.003 碌s 53.170 碌s 54.214 碌s]
thrpt: [18.445 Melem/s 18.807 Melem/s 19.230 Melem/s]
change:
time: [+3.6370% +7.3587% +11.110%] (p = 0.00 < 0.05)
thrpt: [-9.9992% -6.8543% -3.5093%]
Performance has regressed.
packed_mq_topic_insert/CheetahString long topics
time: [65.165 碌s 66.119 碌s 67.130 碌s]
thrpt: [14.896 Melem/s 15.124 Melem/s 15.346 Melem/s]
change:
time: [+5.4655% +7.9547% +10.517%] (p = 0.00 < 0.05)
thrpt: [-9.5165% -7.3686% -5.1822%]
Performance has regressed.
packed_mq_topic_insert/PackedCheetahString long topics
time: [50.294 碌s 51.659 碌s 52.852 碌s]
thrpt: [18.921 Melem/s 19.358 Melem/s 19.883 Melem/s]
change:
time: [-16.933% -14.191% -11.417%] (p = 0.00 < 0.05)
thrpt: [+12.889% +16.538% +20.384%]
Performance has improved.

Compiling cheetah-string v2.0.0 (C:\Users\ljbmx\Desktop\mxsm\cheetah-string)
Finished `bench` profile [optimized] target(s) in 1.72s
Running benches\packed.rs (target\release\deps\packed-5044d38116574fc7.exe)
Gnuplot not found, using plotters backend
Benchmarking packed_construction/CheetahString short
Benchmarking packed_construction/CheetahString short: Warming up for 3.0000 s
Benchmarking packed_construction/CheetahString short: Collecting 100 samples in estimated 5.0000 s (533M iterations)
Benchmarking packed_construction/CheetahString short: Analyzing
Benchmarking packed_construction/PackedCheetahString short
Benchmarking packed_construction/PackedCheetahString short: Warming up for 3.0000 s
Benchmarking packed_construction/PackedCheetahString short: Collecting 100 samples in estimated 5.0001 s (203M iterations)
Benchmarking packed_construction/PackedCheetahString short: Analyzing
Benchmarking packed_construction/CheetahString long
Benchmarking packed_construction/CheetahString long: Warming up for 3.0000 s
Benchmarking packed_construction/CheetahString long: Collecting 100 samples in estimated 5.0000 s (147M iterations)
Benchmarking packed_construction/CheetahString long: Analyzing
Benchmarking packed_construction/PackedCheetahString long
Benchmarking packed_construction/PackedCheetahString long: Warming up for 3.0000 s
Benchmarking packed_construction/PackedCheetahString long: Collecting 100 samples in estimated 5.0000 s (223M iterations)
Benchmarking packed_construction/PackedCheetahString long: Analyzing
Benchmarking packed_push_str/CheetahString inline append
Benchmarking packed_push_str/CheetahString inline append: Warming up for 3.0000 s
Benchmarking packed_push_str/CheetahString inline append: Collecting 100 samples in estimated 5.0001 s (233M iterations)
Benchmarking packed_push_str/CheetahString inline append: Analyzing
Benchmarking packed_push_str/PackedCheetahString inline append
Benchmarking packed_push_str/PackedCheetahString inline append: Warming up for 3.0000 s
Benchmarking packed_push_str/PackedCheetahString inline append: Collecting 100 samples in estimated 5.0000 s (393M iterations)
Benchmarking packed_push_str/PackedCheetahString inline append: Analyzing
Benchmarking packed_push_str/CheetahString promote to heap
Benchmarking packed_push_str/CheetahString promote to heap: Warming up for 3.0000 s
Benchmarking packed_push_str/CheetahString promote to heap: Collecting 100 samples in estimated 5.0002 s (93M iterations)
Benchmarking packed_push_str/CheetahString promote to heap: Analyzing
Benchmarking packed_push_str/PackedCheetahString promote to heap
Benchmarking packed_push_str/PackedCheetahString promote to heap: Warming up for 3.0000 s
Benchmarking packed_push_str/PackedCheetahString promote to heap: Collecting 100 samples in estimated 5.0000 s (76M iterations)
Benchmarking packed_push_str/PackedCheetahString promote to heap: Analyzing
Benchmarking packed_mq_topic_insert/CheetahString short topics
Benchmarking packed_mq_topic_insert/CheetahString short topics: Warming up for 3.0000 s
Benchmarking packed_mq_topic_insert/CheetahString short topics: Collecting 100 samples in estimated 5.0949 s (146k iterations)
Benchmarking packed_mq_topic_insert/CheetahString short topics: Analyzing
Benchmarking packed_mq_topic_insert/PackedCheetahString short topics
Benchmarking packed_mq_topic_insert/PackedCheetahString short topics: Warming up for 3.0000 s
Benchmarking packed_mq_topic_insert/PackedCheetahString short topics: Collecting 100 samples in estimated 5.0093 s (106k iterations)
Benchmarking packed_mq_topic_insert/PackedCheetahString short topics: Analyzing
Benchmarking packed_mq_topic_insert/CheetahString long topics
Benchmarking packed_mq_topic_insert/CheetahString long topics: Warming up for 3.0000 s
Benchmarking packed_mq_topic_insert/CheetahString long topics: Collecting 100 samples in estimated 5.1416 s (76k iterations)
Benchmarking packed_mq_topic_insert/CheetahString long topics: Analyzing
Benchmarking packed_mq_topic_insert/PackedCheetahString long topics
Benchmarking packed_mq_topic_insert/PackedCheetahString long topics: Warming up for 3.0000 s
Benchmarking packed_mq_topic_insert/PackedCheetahString long topics: Collecting 100 samples in estimated 5.1184 s (96k iterations)
Benchmarking packed_mq_topic_insert/PackedCheetahString long topics: Analyzing
Loading
Loading