This benchmark compares Rust serialization and deserialization throughput for Apache Fory and Protocol Buffers using the shared benchmark dataset defined in benchmarks/proto/bench.proto.
Run the complete Rust benchmark pipeline:
cd benchmarks/rust
./run.sh./run.sh --help
Options:
--data <struct|sample|mediacontent|structlist|samplelist|mediacontentlist>
Filter benchmark by data type
--serializer <fory|protobuf>
Filter benchmark by serializer
--filter <regex> Custom criterion filter
--no-report Skip Python report generationExamples:
# Run only Struct benchmarks
./run.sh --data struct
# Run only Protobuf benchmarks
./run.sh --serializer protobuf
# Run only Sample and MediaContent benchmarks for Protobuf
./run.sh --data sample,mediacontent --serializer protobuf| Benchmark case | Description |
|---|---|
Struct |
Numeric struct with 8 int32 fields |
Sample |
Mixed primitive and array payload matching the shared benchmark schema |
MediaContent |
Media and image payload matching the Java/C++ benchmark data |
StructList |
List of shared Struct payloads |
SampleList |
List of shared Sample payloads |
MediaContentList |
List of shared MediaContent payloads |
The Rust benchmark uses the shared protobuf definition at benchmarks/proto/bench.proto, the same benchmark schema used by the C++ benchmark suite.
Run Criterion benchmarks:
cd benchmarks/rust
cargo bench --bench serialization_benchPrint serialized sizes:
cd benchmarks/rust
cargo run --release --bin fory_profiler -- --print-all-serialized-sizesGenerate the markdown report manually:
cd benchmarks/rust
cargo bench --bench serialization_bench 2>&1 | tee results/cargo_bench.log
cargo run --release --bin fory_profiler -- --print-all-serialized-sizes | tee results/serialized_sizes.txt
python benchmark_report.py --log-file results/cargo_bench.log --size-file results/serialized_sizes.txt --output-dir resultsThe report generator writes:
results/README.mdresults/throughput.png- per-datatype plots such as
results/struct.pngandresults/mediacontent.png