tree: da4151344f7a2197fa0377dffbac56f0b093a974 [path history] [tgz]
  1. benches/
  2. proto/
  3. src/
  4. benchmark_report.py
  5. build.rs
  6. Cargo.toml
  7. README.md
benchmarks/rust_benchmark/README.md

Performance Comparison Report

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

Hardware & OS Info

KeyValue
OSDarwin 24.5.0
Machinearm64
Processorarm
CPU Cores (Physical)12
CPU Cores (Logical)12
Total RAM (GB)48.0

Benchmark Plots

company

ecommerce_data

person

simple_list

simple_map

simple_struct

system_data

Serialize Results

DatatypeSizeOperationFory TPSJSON TPSProtobuf TPSFastest
companysmallserialize10,063,906761,673896,620fory
companymediumserialize412,50733,83537,590fory
companylargeserialize9,183793880fory
ecommerce_datasmallserialize2,350,729206,262256,970fory
ecommerce_datamediumserialize59,9774,6995,242fory
ecommerce_datalargeserialize3,727266295fory
personsmallserialize13,632,5221,345,1891,475,035fory
personmediumserialize3,839,656337,610369,031fory
personlargeserialize907,85379,63191,408fory
simple_listsmallserialize27,726,9454,874,9574,643,172fory
simple_listmediumserialize4,770,765401,558397,551fory
simple_listlargeserialize606,06141,06144,565fory
simple_mapsmallserialize22,862,3693,888,0252,695,999fory
simple_mapmediumserialize2,128,973204,319193,132fory
simple_maplargeserialize177,84718,41918,668fory
simple_structsmallserialize35,729,59810,167,0458,633,342fory
simple_structmediumserialize34,988,2799,737,0986,433,350fory
simple_structlargeserialize31,801,5584,545,0417,420,049fory
system_datasmallserialize5,382,131468,033569,930fory
system_datamediumserialize174,24011,89614,753fory
system_datalargeserialize10,6718761,040fory

Deserialize Results

DatatypeSizeOperationFory TPSJSON TPSProtobuf TPSFastest
companysmalldeserialize1,145,593718,597917,431fory
companymediumdeserialize35,19524,47425,057fory
companylargedeserialize836623623fory
ecommerce_datasmalldeserialize278,427183,237241,109fory
ecommerce_datamediumdeserialize5,6223,8204,249fory
ecommerce_datalargedeserialize298204217fory
personsmalldeserialize1,924,3721,214,3881,675,631fory
personmediumdeserialize371,016265,280266,333fory
personlargedeserialize84,83963,97561,820fory
simple_listsmalldeserialize6,129,3293,599,5824,429,286fory
simple_listmediumdeserialize460,745305,409337,336fory
simple_listlargedeserialize54,34833,96238,776fory
simple_mapsmalldeserialize3,686,3643,090,4263,477,051fory
simple_mapmediumdeserialize171,774126,638119,323fory
simple_maplargedeserialize16,50110,92010,853fory
simple_structsmalldeserialize31,476,23512,948,16828,280,543fory
simple_structmediumdeserialize30,077,90210,431,11823,012,841fory
simple_structlargedeserialize28,201,5858,955,75923,528,858fory
system_datasmalldeserialize644,870421,106549,209fory
system_datamediumdeserialize14,3229,20510,565fory
system_datalargedeserialize961634706fory

Serialized data size

data typedata sizeforyprotobuf
simple-structsmall2119
simple-structmedium7066
simple-structlarge220216
simple-listsmall3616
simple-listmedium802543
simple-listlarge1451212876
simple-mapsmall3336
simple-mapmedium7951182
simple-maplarge1789321746
personsmall122118
personmedium873948
personlarge75317865
companysmall191182
companymedium91189950
companylarge748105782485
e-commerce-datasmall750737
e-commerce-datamedium5327558025
e-commerce-datalarge10793581166878
system-datasmall311315
system-datamedium2430126161
system-datalarge450031479988

How to generate flamegraph

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

How to run benchmarks

cargo bench

To run only a specific benchmark group, you can use a command like

cargo bench --bench serialization_bench -- simple_struct

How to print serialized data size

cargo run --bin fory_profiler -- --print-all-serialized-sizes