Generated on 2025-10-26 18:36:41
How to generate performance report:
cargo bench 2>&1 | tee cargo_bench.log python benchmark_report.py --log-file cargo_bench.log --output-dir=report_output
| Key | Value |
|---|---|
| OS | Darwin 24.5.0 |
| Machine | arm64 |
| Processor | arm |
| CPU Cores (Physical) | 12 |
| CPU Cores (Logical) | 12 |
| Total RAM (GB) | 48.0 |
company
ecommerce_data
person
simple_list
simple_map
simple_struct
system_data
| Datatype | Size | Operation | Fory TPS | JSON TPS | Protobuf TPS | Fastest |
|---|---|---|---|---|---|---|
| company | small | serialize | 10,063,906 | 761,673 | 896,620 | fory |
| company | medium | serialize | 412,507 | 33,835 | 37,590 | fory |
| company | large | serialize | 9,183 | 793 | 880 | fory |
| ecommerce_data | small | serialize | 2,350,729 | 206,262 | 256,970 | fory |
| ecommerce_data | medium | serialize | 59,977 | 4,699 | 5,242 | fory |
| ecommerce_data | large | serialize | 3,727 | 266 | 295 | fory |
| person | small | serialize | 13,632,522 | 1,345,189 | 1,475,035 | fory |
| person | medium | serialize | 3,839,656 | 337,610 | 369,031 | fory |
| person | large | serialize | 907,853 | 79,631 | 91,408 | fory |
| simple_list | small | serialize | 27,726,945 | 4,874,957 | 4,643,172 | fory |
| simple_list | medium | serialize | 4,770,765 | 401,558 | 397,551 | fory |
| simple_list | large | serialize | 606,061 | 41,061 | 44,565 | fory |
| simple_map | small | serialize | 22,862,369 | 3,888,025 | 2,695,999 | fory |
| simple_map | medium | serialize | 2,128,973 | 204,319 | 193,132 | fory |
| simple_map | large | serialize | 177,847 | 18,419 | 18,668 | fory |
| simple_struct | small | serialize | 35,729,598 | 10,167,045 | 8,633,342 | fory |
| simple_struct | medium | serialize | 34,988,279 | 9,737,098 | 6,433,350 | fory |
| simple_struct | large | serialize | 31,801,558 | 4,545,041 | 7,420,049 | fory |
| system_data | small | serialize | 5,382,131 | 468,033 | 569,930 | fory |
| system_data | medium | serialize | 174,240 | 11,896 | 14,753 | fory |
| system_data | large | serialize | 10,671 | 876 | 1,040 | fory |
| Datatype | Size | Operation | Fory TPS | JSON TPS | Protobuf TPS | Fastest |
|---|---|---|---|---|---|---|
| company | small | deserialize | 1,145,593 | 718,597 | 917,431 | fory |
| company | medium | deserialize | 35,195 | 24,474 | 25,057 | fory |
| company | large | deserialize | 836 | 623 | 623 | fory |
| ecommerce_data | small | deserialize | 278,427 | 183,237 | 241,109 | fory |
| ecommerce_data | medium | deserialize | 5,622 | 3,820 | 4,249 | fory |
| ecommerce_data | large | deserialize | 298 | 204 | 217 | fory |
| person | small | deserialize | 1,924,372 | 1,214,388 | 1,675,631 | fory |
| person | medium | deserialize | 371,016 | 265,280 | 266,333 | fory |
| person | large | deserialize | 84,839 | 63,975 | 61,820 | fory |
| simple_list | small | deserialize | 6,129,329 | 3,599,582 | 4,429,286 | fory |
| simple_list | medium | deserialize | 460,745 | 305,409 | 337,336 | fory |
| simple_list | large | deserialize | 54,348 | 33,962 | 38,776 | fory |
| simple_map | small | deserialize | 3,686,364 | 3,090,426 | 3,477,051 | fory |
| simple_map | medium | deserialize | 171,774 | 126,638 | 119,323 | fory |
| simple_map | large | deserialize | 16,501 | 10,920 | 10,853 | fory |
| simple_struct | small | deserialize | 31,476,235 | 12,948,168 | 28,280,543 | fory |
| simple_struct | medium | deserialize | 30,077,902 | 10,431,118 | 23,012,841 | fory |
| simple_struct | large | deserialize | 28,201,585 | 8,955,759 | 23,528,858 | fory |
| system_data | small | deserialize | 644,870 | 421,106 | 549,209 | fory |
| system_data | medium | deserialize | 14,322 | 9,205 | 10,565 | fory |
| system_data | large | deserialize | 961 | 634 | 706 | fory |
| data type | data size | fory | protobuf |
|---|---|---|---|
| simple-struct | small | 21 | 19 |
| simple-struct | medium | 70 | 66 |
| simple-struct | large | 220 | 216 |
| simple-list | small | 36 | 16 |
| simple-list | medium | 802 | 543 |
| simple-list | large | 14512 | 12876 |
| simple-map | small | 33 | 36 |
| simple-map | medium | 795 | 1182 |
| simple-map | large | 17893 | 21746 |
| person | small | 122 | 118 |
| person | medium | 873 | 948 |
| person | large | 7531 | 7865 |
| company | small | 191 | 182 |
| company | medium | 9118 | 9950 |
| company | large | 748105 | 782485 |
| e-commerce-data | small | 750 | 737 |
| e-commerce-data | medium | 53275 | 58025 |
| e-commerce-data | large | 1079358 | 1166878 |
| system-data | small | 311 | 315 |
| system-data | medium | 24301 | 26161 |
| system-data | large | 450031 | 479988 |
Basic command:
cargo flamegraph --bin fory_profiler -- --operation deserialize --serializer fory -t e-commerce-data
Using criterion to generate flamegraph for any benchmark:
cargo bench --bench serialization_bench --features profiling -- simple_struct/fory_serialize/small --profile-time=10 ls ../target/criterion/simple_struct/fory_serialize/small/profile/flamegraph.svg
detailed command:
cd benches rm -rf cargo-flamegraph.trace export CARGO_PROFILE_RELEASE_DEBUG=true && cargo flamegraph \ --inverted \ --deterministic \ --palette rust \ --min-width 0.05 \ --bin fory_profiler -- \ --operation deserialize \ --serializer fory
cargo bench
To run only a specific benchmark group, you can use a command like
cargo bench --bench serialization_bench -- simple_struct
cargo run --bin fory_profiler -- --print-all-serialized-sizes