From 38d242b850ceeb97ebd26b6446b50ba8e7032f28 Mon Sep 17 00:00:00 2001 From: quininer Date: Tue, 31 Oct 2023 22:00:00 +0800 Subject: [PATCH 1/3] add cbor4ii to benchmarks --- Cargo.toml | 2 ++ benches/bench.rs | 14 ++++++++++++++ src/bench_cbor4ii.rs | 32 ++++++++++++++++++++++++++++++++ src/lib.rs | 2 ++ 4 files changed, 50 insertions(+) create mode 100644 src/bench_cbor4ii.rs diff --git a/Cargo.toml b/Cargo.toml index 2ac8f9b..1446c40 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -59,6 +59,7 @@ bson = { version = "2.6.0", git = "https://github.com/djkoloski/bson-rust", bran bytecheck = { version = "0.6.11", optional = true } bytemuck = { version = "1.14.0", optional = true } capnp = { version = "0.18.3", optional = true } +cbor4ii = { version = "0.3", features = [ "use_std", "serde1" ], optional = true } ciborium = { version = "0.2.1", optional = true } criterion = "0.5" dlhn = { version = "0.1.6", optional = true } @@ -100,6 +101,7 @@ default = [ "bytecheck", "bytemuck", "capnp", + "cbor4ii", "ciborium", "dlhn", "flatbuffers", diff --git a/benches/bench.rs b/benches/bench.rs index 0c3cc70..318d699 100644 --- a/benches/bench.rs +++ b/benches/bench.rs @@ -14,6 +14,8 @@ use rust_serialization_benchmark::bench_borsh; use rust_serialization_benchmark::bench_bson; #[cfg(feature = "capnp")] use rust_serialization_benchmark::bench_capnp; +#[cfg(feature = "cbor4ii")] +use rust_serialization_benchmark::bench_cbor4ii; #[cfg(feature = "ciborium")] use rust_serialization_benchmark::bench_ciborium; #[cfg(feature = "dlhn")] @@ -115,6 +117,9 @@ fn bench_log(c: &mut Criterion) { } }); + #[cfg(feature = "cbor4ii")] + bench_cbor4ii::bench(BENCH, c, &data); + #[cfg(feature = "ciborium")] bench_ciborium::bench(BENCH, c, &data); @@ -278,6 +283,9 @@ fn bench_mesh(c: &mut Criterion) { } }); + #[cfg(feature = "cbor4ii")] + bench_cbor4ii::bench(BENCH, c, &data); + #[cfg(feature = "ciborium")] bench_ciborium::bench(BENCH, c, &data); @@ -427,6 +435,9 @@ fn bench_minecraft_savedata(c: &mut Criterion) { } }); + #[cfg(feature = "cbor4ii")] + bench_cbor4ii::bench(BENCH, c, &data); + #[cfg(feature = "ciborium")] bench_ciborium::bench(BENCH, c, &data); @@ -580,6 +591,9 @@ fn bench_mk48(c: &mut Criterion) { } }); + #[cfg(feature = "cbor4ii")] + bench_cbor4ii::bench(BENCH, c, &data); + #[cfg(feature = "ciborium")] bench_ciborium::bench(BENCH, c, &data); diff --git a/src/bench_cbor4ii.rs b/src/bench_cbor4ii.rs new file mode 100644 index 0000000..60bf61c --- /dev/null +++ b/src/bench_cbor4ii.rs @@ -0,0 +1,32 @@ +use criterion::{black_box, Criterion}; +use serde::{Deserialize, Serialize}; + +pub fn bench(name: &'static str, c: &mut Criterion, data: &T) +where + T: Serialize + for<'de> Deserialize<'de>, +{ + const BUFFER_LEN: usize = 50_000_000; + + let mut group = c.benchmark_group(format!("{}/cbor4ii", name)); + + let mut serialize_buffer = vec![0; BUFFER_LEN]; + group.bench_function("serialize", |b| { + b.iter(|| { + serialize_buffer = cbor4ii::serde::to_vec(std::mem::take(black_box(&mut serialize_buffer)), black_box(&data)) + .unwrap(); + black_box(()); + }) + }); + + let deserialize_buffer = cbor4ii::serde::to_vec(Vec::new(), &data).unwrap(); + + group.bench_function("deserialize", |b| { + b.iter(|| { + black_box(cbor4ii::serde::from_slice::<'_, T>(black_box(&deserialize_buffer)).unwrap()); + }) + }); + + crate::bench_size(name, "cbor4ii", deserialize_buffer.as_slice()); + + group.finish(); +} diff --git a/src/lib.rs b/src/lib.rs index 08fca17..05e52a7 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,6 +12,8 @@ pub mod bench_borsh; pub mod bench_bson; #[cfg(feature = "capnp")] pub mod bench_capnp; +#[cfg(feature = "cbor4ii")] +pub mod bench_cbor4ii; #[cfg(feature = "ciborium")] pub mod bench_ciborium; #[cfg(feature = "dlhn")] From 76db4d436422054a27c47bd97d9c111aec5e846b Mon Sep 17 00:00:00 2001 From: David Koloski Date: Tue, 31 Oct 2023 10:36:23 -0400 Subject: [PATCH 2/3] Pin cbor4ii to 0.3.1 --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 1446c40..643e089 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -59,7 +59,7 @@ bson = { version = "2.6.0", git = "https://github.com/djkoloski/bson-rust", bran bytecheck = { version = "0.6.11", optional = true } bytemuck = { version = "1.14.0", optional = true } capnp = { version = "0.18.3", optional = true } -cbor4ii = { version = "0.3", features = [ "use_std", "serde1" ], optional = true } +cbor4ii = { version = "0.3.1", features = [ "use_std", "serde1" ], optional = true } ciborium = { version = "0.2.1", optional = true } criterion = "0.5" dlhn = { version = "0.1.6", optional = true } From 2462b2bba275aac03acd7f526202b0b3aacb7cdb Mon Sep 17 00:00:00 2001 From: quininer Date: Tue, 31 Oct 2023 22:38:52 +0800 Subject: [PATCH 3/3] fix fmt --- src/bench_cbor4ii.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/bench_cbor4ii.rs b/src/bench_cbor4ii.rs index 60bf61c..dee2782 100644 --- a/src/bench_cbor4ii.rs +++ b/src/bench_cbor4ii.rs @@ -12,8 +12,11 @@ where let mut serialize_buffer = vec![0; BUFFER_LEN]; group.bench_function("serialize", |b| { b.iter(|| { - serialize_buffer = cbor4ii::serde::to_vec(std::mem::take(black_box(&mut serialize_buffer)), black_box(&data)) - .unwrap(); + serialize_buffer = cbor4ii::serde::to_vec( + std::mem::take(black_box(&mut serialize_buffer)), + black_box(&data), + ) + .unwrap(); black_box(()); }) });