This directory contains two benchmark entrypoints:
benchmark.py+run.sh(new): C++-parity benchmark matrix covering:NumericStruct,Sample,MediaContentNumericStructList,SampleList,MediaContentList- operations:
serialize,deserialize - serializers:
fory,protobuf,pickle
fory_benchmark.py: CPython microbench script using the current annotation surface.
cd benchmarks/python
./run.shrun.sh will:
- Generate Python protobuf bindings from
benchmarks/proto/bench.proto - Run
benchmark.py - Generate plots + markdown report via
benchmark_report.py - Copy report/plots to
docs/benchmarks/python
# Run only NumericStruct benchmarks for Fory serialize
./run.sh --data struct --serializer fory --operation serialize
# Run all data types, deserialize only
./run.sh --operation deserialize
# Adjust benchmark loops
./run.sh --warmup 5 --iterations 30 --repeat 8 --number 1500
# Skip docs sync
./run.sh --no-copy-docsSupported values:
--data:struct,sample,mediacontent,structlist,samplelist,mediacontentlist--serializer:fory,protobuf,pickle--operation:all|serialize|deserialize
Set FORY_BENCH_SCHEMA_MISMATCH=1 to run the Fory-only compatible-read
schema-mismatch mode. This mode is off by default. When enabled, run with
--serializer fory; protobuf and pickle benchmark modes fail with a
configuration error. Fory serialization uses the normal v1 benchmark dataclasses,
and Fory deserialization uses v2 dataclasses registered with the same Fory type
IDs where one int32 field is widened to int64.
fory_benchmark.py can be used directly:
cd benchmarks/python
python fory_benchmark.pyFor its original options and behavior, refer to python fory_benchmark.py --help.
pyforymust be installed in your current Python environment.protocis required byrun.shto generatebench_pb2.py.protobufbenchmarks include dataclass <-> protobuf conversion in the timed path.