From b2b48f9bef345f86c1fd5faabe3435241099d696 Mon Sep 17 00:00:00 2001 From: Christophe Meessen Date: Tue, 18 Jun 2024 17:58:33 +0200 Subject: [PATCH 1/3] add low level IDR encoding demo --- benchmarks.go | 10 ++++++++ go.mod | 1 + go.sum | 2 ++ internal/serializers/idr/idr.go | 42 +++++++++++++++++++++++++++++++++ 4 files changed, 55 insertions(+) create mode 100644 internal/serializers/idr/idr.go diff --git a/benchmarks.go b/benchmarks.go index 628cd10..8eb862f 100644 --- a/benchmarks.go +++ b/benchmarks.go @@ -20,6 +20,7 @@ import ( "github.com/alecthomas/go_serialization_benchmarks/internal/serializers/gotiny" "github.com/alecthomas/go_serialization_benchmarks/internal/serializers/hprose" "github.com/alecthomas/go_serialization_benchmarks/internal/serializers/hprose2" + "github.com/alecthomas/go_serialization_benchmarks/internal/serializers/idr" "github.com/alecthomas/go_serialization_benchmarks/internal/serializers/ikea" "github.com/alecthomas/go_serialization_benchmarks/internal/serializers/jsoniter" "github.com/alecthomas/go_serialization_benchmarks/internal/serializers/mongobson" @@ -454,6 +455,15 @@ var benchmarkCases = []BenchmarkCase{ UnsafeStringUnmarshal: true, TimeSupport: TSNoSupport, APIKind: AKManual, + }, { + Name: "idr", + URL: "github.com/chmike/ditp", + New: idr.NewIDRSerializer, + + BufferReuseMarshal: true, + TimeSupport: TSFullTzOffset, + APIKind: AKManual, + Notes: []string{"low level IDR encoding demo with same nsec time encoding as benc"}, }, { Name: "baseline", URL: "", diff --git a/go.mod b/go.mod index 26b2336..e4ac550 100644 --- a/go.mod +++ b/go.mod @@ -35,6 +35,7 @@ require ( ) require ( + github.com/chmike/ditp v0.0.0-20240618130435-627cf7ce9ad6 // indirect github.com/nazarifard/copi v0.0.0-20240609072615-763316f77579 // indirect github.com/nazarifard/fastape v0.0.0-20240611084216-abaecf150e5b // indirect ) diff --git a/go.sum b/go.sum index b6377cf..e296c5d 100644 --- a/go.sum +++ b/go.sum @@ -34,6 +34,8 @@ github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJm github.com/calmh/xdr v1.1.0 h1:U/Dd4CXNLoo8EiQ4ulJUXkgO1/EyQLgDKLgpY1SOoJE= github.com/calmh/xdr v1.1.0/go.mod h1:E8sz2ByAdXC8MbANf1LCRYzedSnnc+/sXXJs/PVqoeg= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/chmike/ditp v0.0.0-20240618130435-627cf7ce9ad6 h1:FIQLUAh5cGcvt6Sm4wD2TUbDDJjCnmpv1A/lnJDBMh0= +github.com/chmike/ditp v0.0.0-20240618130435-627cf7ce9ad6/go.mod h1:Az8w1aHUmNFs7+C7v41Y/cpXIBafvOs+7J7M/KGsM1c= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= diff --git a/internal/serializers/idr/idr.go b/internal/serializers/idr/idr.go new file mode 100644 index 0000000..742e436 --- /dev/null +++ b/internal/serializers/idr/idr.go @@ -0,0 +1,42 @@ +package idr + +import ( + "time" + + "github.com/alecthomas/go_serialization_benchmarks/goserbench" + "github.com/chmike/ditp/idr/low" +) + +type IDRSerializer struct { + e low.Encoder +} + +func (s IDRSerializer) Marshal(o interface{}) ([]byte, error) { + v := o.(*goserbench.SmallStruct) + e := low.Reset(s.e) + e = low.PutInt64(e, v.BirthDay.UnixNano()) + e = low.PutFloat64(e, v.Money) + e = low.PutInt32(e, int32(v.Siblings)) + e = low.PutBool(e, v.Spouse) + e = low.PutString(e, v.Name) + e = low.PutString(e, v.Phone) + return e, nil +} + +func (s IDRSerializer) Unmarshal(d []byte, o interface{}) (err error) { + v := o.(*goserbench.SmallStruct) + _ = d[21] + d, v0 := low.Int64(d) + v.BirthDay = time.Unix(0, v0) + d, v.Money = low.Float64(d) + d, v1 := low.Int32(d) + v.Siblings = int(v1) + d, v.Spouse = low.Bool(d) + d, v.Name = low.String(d, 1<<14) + _, v.Phone = low.String(d, 20) + return nil +} + +func NewIDRSerializer() goserbench.Serializer { + return IDRSerializer{e: make([]byte, 256)} // set initial buffer to 256 bytes +} From f59b8681255d6c4eead085fa17421f08284c8105 Mon Sep 17 00:00:00 2001 From: Christophe Meessen Date: Tue, 18 Jun 2024 22:07:57 +0200 Subject: [PATCH 2/3] add idr/reuse and uses fulltzoffset --- benchmarks.go | 10 ++++++- internal/serializers/idr/idr.go | 47 ++++++++++++++++++++++++++------- 2 files changed, 47 insertions(+), 10 deletions(-) diff --git a/benchmarks.go b/benchmarks.go index 8eb862f..41af40b 100644 --- a/benchmarks.go +++ b/benchmarks.go @@ -460,10 +460,18 @@ var benchmarkCases = []BenchmarkCase{ URL: "github.com/chmike/ditp", New: idr.NewIDRSerializer, + TimeSupport: TSFullTzOffset, + APIKind: AKManual, + Notes: []string{"Low level IDR encoding demo"}, + }, { + Name: "idr/reuse", + URL: "github.com/chmike/ditp", + New: idr.NewIDRSerializerReuse, + BufferReuseMarshal: true, TimeSupport: TSFullTzOffset, APIKind: AKManual, - Notes: []string{"low level IDR encoding demo with same nsec time encoding as benc"}, + Notes: []string{"Low level IDR encoding demo"}, }, { Name: "baseline", URL: "", diff --git a/internal/serializers/idr/idr.go b/internal/serializers/idr/idr.go index 742e436..c5fc700 100644 --- a/internal/serializers/idr/idr.go +++ b/internal/serializers/idr/idr.go @@ -1,20 +1,17 @@ package idr import ( - "time" - "github.com/alecthomas/go_serialization_benchmarks/goserbench" "github.com/chmike/ditp/idr/low" ) type IDRSerializer struct { - e low.Encoder } func (s IDRSerializer) Marshal(o interface{}) ([]byte, error) { v := o.(*goserbench.SmallStruct) - e := low.Reset(s.e) - e = low.PutInt64(e, v.BirthDay.UnixNano()) + e := make([]byte, 0, 64) + e = low.PutTime(e, v.BirthDay) e = low.PutFloat64(e, v.Money) e = low.PutInt32(e, int32(v.Siblings)) e = low.PutBool(e, v.Spouse) @@ -25,9 +22,8 @@ func (s IDRSerializer) Marshal(o interface{}) ([]byte, error) { func (s IDRSerializer) Unmarshal(d []byte, o interface{}) (err error) { v := o.(*goserbench.SmallStruct) - _ = d[21] - d, v0 := low.Int64(d) - v.BirthDay = time.Unix(0, v0) + _ = d[29] + d, v.BirthDay = low.Time(d) d, v.Money = low.Float64(d) d, v1 := low.Int32(d) v.Siblings = int(v1) @@ -38,5 +34,38 @@ func (s IDRSerializer) Unmarshal(d []byte, o interface{}) (err error) { } func NewIDRSerializer() goserbench.Serializer { - return IDRSerializer{e: make([]byte, 256)} // set initial buffer to 256 bytes + return IDRSerializer{} // set initial buffer to 256 bytes +} + +type IDRSerializerReuse struct { + e low.Encoder +} + +func (s IDRSerializerReuse) Marshal(o interface{}) ([]byte, error) { + v := o.(*goserbench.SmallStruct) + e := low.Reset(s.e) + e = low.PutTime(e, v.BirthDay) + e = low.PutFloat64(e, v.Money) + e = low.PutInt32(e, int32(v.Siblings)) + e = low.PutBool(e, v.Spouse) + e = low.PutString(e, v.Name) + e = low.PutString(e, v.Phone) + return e, nil +} + +func (s IDRSerializerReuse) Unmarshal(d []byte, o interface{}) (err error) { + v := o.(*goserbench.SmallStruct) + _ = d[29] + d, v.BirthDay = low.Time(d) + d, v.Money = low.Float64(d) + d, v1 := low.Int32(d) + v.Siblings = int(v1) + d, v.Spouse = low.Bool(d) + d, v.Name = low.String(d, 1<<14) + _, v.Phone = low.String(d, 20) + return nil +} + +func NewIDRSerializerReuse() goserbench.Serializer { + return IDRSerializerReuse{e: make([]byte, 256)} // set initial buffer to 256 bytes } From 205f42f35a8461c90222314b21c7d70e4c4df59a Mon Sep 17 00:00:00 2001 From: Christophe Meessen Date: Tue, 18 Jun 2024 22:39:32 +0200 Subject: [PATCH 3/3] report now includes idr and idr/reuse benchmark --- report/data.js | 666 ++++++++++++++++++++++++++----------------------- 1 file changed, 355 insertions(+), 311 deletions(-) diff --git a/report/data.js b/report/data.js index cc0dfe1..2f9b61c 100644 --- a/report/data.js +++ b/report/data.js @@ -1,14 +1,14 @@ var data = [ { "name": "gotiny", - "marshal_iter_count": 2824863, - "unmarshal_iter_count": 6697485, - "total_iter_count": 9522348, + "marshal_iter_count": 6671701, + "unmarshal_iter_count": 18175689, + "total_iter_count": 24847390, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 425, - "unmarshal_ns_op": 174, - "total_ns_op": 599, + "marshal_ns_op": 164, + "unmarshal_ns_op": 64, + "total_ns_op": 228, "serialization_size": 47, "marshal_alloc_bytes": 168, "unmarshal_alloc_bytes": 32, @@ -23,14 +23,14 @@ var data = [ }, { "name": "msgp", - "marshal_iter_count": 8127158, - "unmarshal_iter_count": 5665038, - "total_iter_count": 13792196, + "marshal_iter_count": 20164268, + "unmarshal_iter_count": 15374151, + "total_iter_count": 35538419, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 143, - "unmarshal_ns_op": 216, - "total_ns_op": 359, + "marshal_ns_op": 57, + "unmarshal_ns_op": 77, + "total_ns_op": 134, "serialization_size": 97, "marshal_alloc_bytes": 128, "unmarshal_alloc_bytes": 32, @@ -45,14 +45,14 @@ var data = [ }, { "name": "msgpack", - "marshal_iter_count": 1000000, - "unmarshal_iter_count": 1000000, - "total_iter_count": 2000000, + "marshal_iter_count": 3910005, + "unmarshal_iter_count": 3428178, + "total_iter_count": 7338183, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1012, - "unmarshal_ns_op": 1219, - "total_ns_op": 2231, + "marshal_ns_op": 311, + "unmarshal_ns_op": 349, + "total_ns_op": 660, "serialization_size": 92, "marshal_alloc_bytes": 264, "unmarshal_alloc_bytes": 80, @@ -67,15 +67,15 @@ var data = [ }, { "name": "json", - "marshal_iter_count": 830055, - "unmarshal_iter_count": 342466, - "total_iter_count": 1172521, + "marshal_iter_count": 2513436, + "unmarshal_iter_count": 968724, + "total_iter_count": 3482160, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1424, - "unmarshal_ns_op": 3498, - "total_ns_op": 4922, - "serialization_size": 151, + "marshal_ns_op": 479, + "unmarshal_ns_op": 1204, + "total_ns_op": 1683, + "serialization_size": 148, "marshal_alloc_bytes": 208, "unmarshal_alloc_bytes": 248, "total_alloc_bytes": 456, @@ -89,21 +89,21 @@ var data = [ }, { "name": "jsoniter", - "marshal_iter_count": 1272920, - "unmarshal_iter_count": 896574, - "total_iter_count": 2169494, + "marshal_iter_count": 4057644, + "unmarshal_iter_count": 2889970, + "total_iter_count": 6947614, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 951, - "unmarshal_ns_op": 1313, - "total_ns_op": 2264, - "serialization_size": 141, + "marshal_ns_op": 296, + "unmarshal_ns_op": 414, + "total_ns_op": 710, + "serialization_size": 138, "marshal_alloc_bytes": 200, - "unmarshal_alloc_bytes": 136, - "total_alloc_bytes": 336, + "unmarshal_alloc_bytes": 135, + "total_alloc_bytes": 335, "marshal_allocs": 3, - "unmarshal_allocs": 5, - "total_allocs": 8, + "unmarshal_allocs": 4, + "total_allocs": 7, "time_support": "custom", "api_kind": "reflect", "url": "github.com/json-iterator/go", @@ -111,15 +111,15 @@ var data = [ }, { "name": "easyjson", - "marshal_iter_count": 1000000, - "unmarshal_iter_count": 1000000, - "total_iter_count": 2000000, + "marshal_iter_count": 2736988, + "unmarshal_iter_count": 3270885, + "total_iter_count": 6007873, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1130, - "unmarshal_ns_op": 1058, - "total_ns_op": 2188, - "serialization_size": 151, + "marshal_ns_op": 435, + "unmarshal_ns_op": 367, + "total_ns_op": 802, + "serialization_size": 148, "marshal_alloc_bytes": 976, "unmarshal_alloc_bytes": 32, "total_alloc_bytes": 1008, @@ -133,14 +133,14 @@ var data = [ }, { "name": "bson", - "marshal_iter_count": 911517, - "unmarshal_iter_count": 624112, - "total_iter_count": 1535629, + "marshal_iter_count": 3314305, + "unmarshal_iter_count": 1966180, + "total_iter_count": 5280485, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1135, - "unmarshal_ns_op": 1920, - "total_ns_op": 3055, + "marshal_ns_op": 363, + "unmarshal_ns_op": 611, + "total_ns_op": 974, "serialization_size": 110, "marshal_alloc_bytes": 376, "unmarshal_alloc_bytes": 144, @@ -155,14 +155,14 @@ var data = [ }, { "name": "mongobson", - "marshal_iter_count": 678462, - "unmarshal_iter_count": 599133, - "total_iter_count": 1277595, + "marshal_iter_count": 2259928, + "unmarshal_iter_count": 1975368, + "total_iter_count": 4235296, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1644, - "unmarshal_ns_op": 1851, - "total_ns_op": 3495, + "marshal_ns_op": 525, + "unmarshal_ns_op": 603, + "total_ns_op": 1128, "serialization_size": 110, "marshal_alloc_bytes": 240, "unmarshal_alloc_bytes": 328, @@ -177,14 +177,14 @@ var data = [ }, { "name": "gob", - "marshal_iter_count": 199690, - "unmarshal_iter_count": 41342, - "total_iter_count": 241032, + "marshal_iter_count": 557580, + "unmarshal_iter_count": 124987, + "total_iter_count": 682567, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 5978, - "unmarshal_ns_op": 29124, - "total_ns_op": 35102, + "marshal_ns_op": 2046, + "unmarshal_ns_op": 10299, + "total_ns_op": 12345, "serialization_size": 172, "marshal_alloc_bytes": 1744, "unmarshal_alloc_bytes": 7656, @@ -199,21 +199,21 @@ var data = [ }, { "name": "davecgh/xdr", - "marshal_iter_count": 717974, - "unmarshal_iter_count": 1000000, - "total_iter_count": 1717974, + "marshal_iter_count": 2476682, + "unmarshal_iter_count": 3032542, + "total_iter_count": 5509224, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1561, - "unmarshal_ns_op": 1224, - "total_ns_op": 2785, - "serialization_size": 92, - "marshal_alloc_bytes": 392, - "unmarshal_alloc_bytes": 152, - "total_alloc_bytes": 544, - "marshal_allocs": 20, + "marshal_ns_op": 486, + "unmarshal_ns_op": 395, + "total_ns_op": 881, + "serialization_size": 88, + "marshal_alloc_bytes": 376, + "unmarshal_alloc_bytes": 136, + "total_alloc_bytes": 512, + "marshal_allocs": 19, "unmarshal_allocs": 10, - "total_allocs": 30, + "total_allocs": 29, "time_support": "RFC3339ns", "api_kind": "reflect", "url": "github.com/davecgh/go-xdr/xdr", @@ -221,14 +221,14 @@ var data = [ }, { "name": "ugorji/msgpack", - "marshal_iter_count": 1000000, - "unmarshal_iter_count": 930351, - "total_iter_count": 1930351, + "marshal_iter_count": 2939097, + "unmarshal_iter_count": 3022422, + "total_iter_count": 5961519, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1046, - "unmarshal_ns_op": 1228, - "total_ns_op": 2274, + "marshal_ns_op": 411, + "unmarshal_ns_op": 397, + "total_ns_op": 808, "serialization_size": 91, "marshal_alloc_bytes": 1240, "unmarshal_alloc_bytes": 608, @@ -243,14 +243,14 @@ var data = [ }, { "name": "ugorji/binc", - "marshal_iter_count": 996676, - "unmarshal_iter_count": 1000000, - "total_iter_count": 1996676, + "marshal_iter_count": 2695326, + "unmarshal_iter_count": 2866306, + "total_iter_count": 5561632, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1145, - "unmarshal_ns_op": 1140, - "total_ns_op": 2285, + "marshal_ns_op": 444, + "unmarshal_ns_op": 403, + "total_ns_op": 847, "serialization_size": 95, "marshal_alloc_bytes": 1256, "unmarshal_alloc_bytes": 672, @@ -265,14 +265,14 @@ var data = [ }, { "name": "sereal", - "marshal_iter_count": 361704, - "unmarshal_iter_count": 359160, - "total_iter_count": 720864, + "marshal_iter_count": 1000000, + "unmarshal_iter_count": 974042, + "total_iter_count": 1974042, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 3124, - "unmarshal_ns_op": 3068, - "total_ns_op": 6192, + "marshal_ns_op": 1041, + "unmarshal_ns_op": 1154, + "total_ns_op": 2195, "serialization_size": 142, "marshal_alloc_bytes": 1104, "unmarshal_alloc_bytes": 896, @@ -287,14 +287,14 @@ var data = [ }, { "name": "alecthomas/binary", - "marshal_iter_count": 674114, - "unmarshal_iter_count": 890947, - "total_iter_count": 1565061, + "marshal_iter_count": 1881211, + "unmarshal_iter_count": 2343856, + "total_iter_count": 4225067, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1739, - "unmarshal_ns_op": 1363, - "total_ns_op": 3102, + "marshal_ns_op": 634, + "unmarshal_ns_op": 512, + "total_ns_op": 1146, "serialization_size": 61, "marshal_alloc_bytes": 360, "unmarshal_alloc_bytes": 240, @@ -309,14 +309,14 @@ var data = [ }, { "name": "flatbuffers", - "marshal_iter_count": 1455066, - "unmarshal_iter_count": 7601462, - "total_iter_count": 9056528, + "marshal_iter_count": 3873794, + "unmarshal_iter_count": 16204791, + "total_iter_count": 20078585, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 825, - "unmarshal_ns_op": 160, - "total_ns_op": 985, + "marshal_ns_op": 309, + "unmarshal_ns_op": 70, + "total_ns_op": 379, "serialization_size": 95, "marshal_alloc_bytes": 376, "unmarshal_alloc_bytes": 32, @@ -331,14 +331,14 @@ var data = [ }, { "name": "capnproto", - "marshal_iter_count": 448254, - "unmarshal_iter_count": 2924187, - "total_iter_count": 3372441, + "marshal_iter_count": 1730612, + "unmarshal_iter_count": 6546520, + "total_iter_count": 8277132, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 2252, - "unmarshal_ns_op": 418, - "total_ns_op": 2670, + "marshal_ns_op": 685, + "unmarshal_ns_op": 183, + "total_ns_op": 868, "serialization_size": 96, "marshal_alloc_bytes": 4392, "unmarshal_alloc_bytes": 112, @@ -353,18 +353,18 @@ var data = [ }, { "name": "hprose", - "marshal_iter_count": 1000000, - "unmarshal_iter_count": 1000000, - "total_iter_count": 2000000, + "marshal_iter_count": 3231000, + "unmarshal_iter_count": 2929303, + "total_iter_count": 6160303, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 2131, - "unmarshal_ns_op": 1871, - "total_ns_op": 4002, - "serialization_size": 85, - "marshal_alloc_bytes": 412, - "unmarshal_alloc_bytes": 224, - "total_alloc_bytes": 636, + "marshal_ns_op": 319, + "unmarshal_ns_op": 412, + "total_ns_op": 731, + "serialization_size": 82, + "marshal_alloc_bytes": 302, + "unmarshal_alloc_bytes": 223, + "total_alloc_bytes": 525, "marshal_allocs": 8, "unmarshal_allocs": 9, "total_allocs": 17, @@ -375,15 +375,15 @@ var data = [ }, { "name": "hprose2", - "marshal_iter_count": 2842987, - "unmarshal_iter_count": 2536797, - "total_iter_count": 5379784, + "marshal_iter_count": 6859892, + "unmarshal_iter_count": 6125823, + "total_iter_count": 12985715, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 419, - "unmarshal_ns_op": 525, - "total_ns_op": 944, - "serialization_size": 85, + "marshal_ns_op": 174, + "unmarshal_ns_op": 192, + "total_ns_op": 366, + "serialization_size": 82, "marshal_alloc_bytes": 0, "unmarshal_alloc_bytes": 56, "total_alloc_bytes": 56, @@ -397,14 +397,14 @@ var data = [ }, { "name": "dedis/protobuf", - "marshal_iter_count": 1596147, - "unmarshal_iter_count": 1269361, - "total_iter_count": 2865508, + "marshal_iter_count": 4440600, + "unmarshal_iter_count": 4082242, + "total_iter_count": 8522842, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 751, - "unmarshal_ns_op": 946, - "total_ns_op": 1697, + "marshal_ns_op": 269, + "unmarshal_ns_op": 294, + "total_ns_op": 563, "serialization_size": 52, "marshal_alloc_bytes": 144, "unmarshal_alloc_bytes": 104, @@ -419,14 +419,14 @@ var data = [ }, { "name": "pulsar", - "marshal_iter_count": 2043909, - "unmarshal_iter_count": 2230825, - "total_iter_count": 4274734, + "marshal_iter_count": 5176561, + "unmarshal_iter_count": 5932742, + "total_iter_count": 11109303, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 591, - "unmarshal_ns_op": 542, - "total_ns_op": 1133, + "marshal_ns_op": 231, + "unmarshal_ns_op": 201, + "total_ns_op": 432, "serialization_size": 51, "marshal_alloc_bytes": 304, "unmarshal_alloc_bytes": 160, @@ -441,14 +441,14 @@ var data = [ }, { "name": "gogo/protobuf", - "marshal_iter_count": 9495188, - "unmarshal_iter_count": 7050087, - "total_iter_count": 16545275, + "marshal_iter_count": 24624181, + "unmarshal_iter_count": 18510555, + "total_iter_count": 43134736, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 124, - "unmarshal_ns_op": 173, - "total_ns_op": 297, + "marshal_ns_op": 48, + "unmarshal_ns_op": 63, + "total_ns_op": 111, "serialization_size": 53, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 32, @@ -463,21 +463,21 @@ var data = [ }, { "name": "gogo/jsonpb", - "marshal_iter_count": 95270, - "unmarshal_iter_count": 75685, - "total_iter_count": 170955, + "marshal_iter_count": 276649, + "unmarshal_iter_count": 218010, + "total_iter_count": 494659, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 12204, - "unmarshal_ns_op": 16011, - "total_ns_op": 28215, + "marshal_ns_op": 4217, + "unmarshal_ns_op": 5407, + "total_ns_op": 9624, "serialization_size": 125, - "marshal_alloc_bytes": 2747, - "unmarshal_alloc_bytes": 3151, - "total_alloc_bytes": 5898, + "marshal_alloc_bytes": 2754, + "unmarshal_alloc_bytes": 3156, + "total_alloc_bytes": 5910, "marshal_allocs": 80, - "unmarshal_allocs": 54, - "total_allocs": 134, + "unmarshal_allocs": 55, + "total_allocs": 135, "time_support": "RFC3339ns", "api_kind": "codegen", "url": "github.com/gogo/protobuf/proto", @@ -485,14 +485,14 @@ var data = [ }, { "name": "colfer", - "marshal_iter_count": 9157371, - "unmarshal_iter_count": 8785465, - "total_iter_count": 17942836, + "marshal_iter_count": 25979906, + "unmarshal_iter_count": 24703810, + "total_iter_count": 50683716, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 128, - "unmarshal_ns_op": 138, - "total_ns_op": 266, + "marshal_ns_op": 45, + "unmarshal_ns_op": 48, + "total_ns_op": 93, "serialization_size": 51, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 32, @@ -507,14 +507,14 @@ var data = [ }, { "name": "gencode", - "marshal_iter_count": 7721150, - "unmarshal_iter_count": 9337818, - "total_iter_count": 17058968, + "marshal_iter_count": 20787469, + "unmarshal_iter_count": 25780532, + "total_iter_count": 46568001, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 153, - "unmarshal_ns_op": 129, - "total_ns_op": 282, + "marshal_ns_op": 58, + "unmarshal_ns_op": 45, + "total_ns_op": 103, "serialization_size": 53, "marshal_alloc_bytes": 80, "unmarshal_alloc_bytes": 32, @@ -529,14 +529,14 @@ var data = [ }, { "name": "gencode/unsafe_reuse", - "marshal_iter_count": 25454443, - "unmarshal_iter_count": 10747903, - "total_iter_count": 36202346, + "marshal_iter_count": 50935406, + "unmarshal_iter_count": 28554543, + "total_iter_count": 79489949, "unsafe_string_unmarshal": true, "buffer_reuse_marshal": true, - "marshal_ns_op": 49, - "unmarshal_ns_op": 112, - "total_ns_op": 161, + "marshal_ns_op": 22, + "unmarshal_ns_op": 40, + "total_ns_op": 62, "serialization_size": 46, "marshal_alloc_bytes": 0, "unmarshal_alloc_bytes": 32, @@ -551,14 +551,14 @@ var data = [ }, { "name": "calmh/xdr", - "marshal_iter_count": 7591645, - "unmarshal_iter_count": 8884662, - "total_iter_count": 16476307, + "marshal_iter_count": 17327310, + "unmarshal_iter_count": 23227230, + "total_iter_count": 40554540, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 159, - "unmarshal_ns_op": 137, - "total_ns_op": 296, + "marshal_ns_op": 68, + "unmarshal_ns_op": 51, + "total_ns_op": 119, "serialization_size": 60, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 32, @@ -573,14 +573,14 @@ var data = [ }, { "name": "goavro", - "marshal_iter_count": 563248, - "unmarshal_iter_count": 217836, - "total_iter_count": 781084, + "marshal_iter_count": 1519324, + "unmarshal_iter_count": 597860, + "total_iter_count": 2117184, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 2137, - "unmarshal_ns_op": 5183, - "total_ns_op": 7320, + "marshal_ns_op": 791, + "unmarshal_ns_op": 1948, + "total_ns_op": 2739, "serialization_size": 47, "marshal_alloc_bytes": 584, "unmarshal_alloc_bytes": 2232, @@ -595,14 +595,14 @@ var data = [ }, { "name": "avro2/text", - "marshal_iter_count": 343981, - "unmarshal_iter_count": 382122, - "total_iter_count": 726103, + "marshal_iter_count": 949902, + "unmarshal_iter_count": 1000000, + "total_iter_count": 1949902, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 3282, - "unmarshal_ns_op": 3120, - "total_ns_op": 6402, + "marshal_ns_op": 1203, + "unmarshal_ns_op": 1068, + "total_ns_op": 2271, "serialization_size": 133, "marshal_alloc_bytes": 1320, "unmarshal_alloc_bytes": 656, @@ -617,14 +617,14 @@ var data = [ }, { "name": "avro2/binary", - "marshal_iter_count": 1242313, - "unmarshal_iter_count": 1218283, - "total_iter_count": 2460596, + "marshal_iter_count": 3463720, + "unmarshal_iter_count": 3453400, + "total_iter_count": 6917120, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 964, - "unmarshal_ns_op": 977, - "total_ns_op": 1941, + "marshal_ns_op": 350, + "unmarshal_ns_op": 346, + "total_ns_op": 696, "serialization_size": 47, "marshal_alloc_bytes": 464, "unmarshal_alloc_bytes": 464, @@ -639,14 +639,14 @@ var data = [ }, { "name": "ikea", - "marshal_iter_count": 2012862, - "unmarshal_iter_count": 1659099, - "total_iter_count": 3671961, + "marshal_iter_count": 5860254, + "unmarshal_iter_count": 4877880, + "total_iter_count": 10738134, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 602, - "unmarshal_ns_op": 724, - "total_ns_op": 1326, + "marshal_ns_op": 204, + "unmarshal_ns_op": 246, + "total_ns_op": 450, "serialization_size": 55, "marshal_alloc_bytes": 72, "unmarshal_alloc_bytes": 96, @@ -661,14 +661,14 @@ var data = [ }, { "name": "shamaton/msgpack/map", - "marshal_iter_count": 1580954, - "unmarshal_iter_count": 1761334, - "total_iter_count": 3342288, + "marshal_iter_count": 4953160, + "unmarshal_iter_count": 5350434, + "total_iter_count": 10303594, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 759, - "unmarshal_ns_op": 681, - "total_ns_op": 1440, + "marshal_ns_op": 242, + "unmarshal_ns_op": 222, + "total_ns_op": 464, "serialization_size": 92, "marshal_alloc_bytes": 192, "unmarshal_alloc_bytes": 88, @@ -683,14 +683,14 @@ var data = [ }, { "name": "shamaton/msgpack/array", - "marshal_iter_count": 1844930, - "unmarshal_iter_count": 2255613, - "total_iter_count": 4100543, + "marshal_iter_count": 5500441, + "unmarshal_iter_count": 6942891, + "total_iter_count": 12443332, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 643, - "unmarshal_ns_op": 533, - "total_ns_op": 1176, + "marshal_ns_op": 217, + "unmarshal_ns_op": 171, + "total_ns_op": 388, "serialization_size": 50, "marshal_alloc_bytes": 160, "unmarshal_alloc_bytes": 88, @@ -705,14 +705,14 @@ var data = [ }, { "name": "shamaton/msgpackgen/map", - "marshal_iter_count": 4475046, - "unmarshal_iter_count": 3054723, - "total_iter_count": 7529769, + "marshal_iter_count": 11266701, + "unmarshal_iter_count": 7837154, + "total_iter_count": 19103855, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 266, - "unmarshal_ns_op": 391, - "total_ns_op": 657, + "marshal_ns_op": 106, + "unmarshal_ns_op": 152, + "total_ns_op": 258, "serialization_size": 92, "marshal_alloc_bytes": 176, "unmarshal_alloc_bytes": 112, @@ -727,14 +727,14 @@ var data = [ }, { "name": "shamaton/msgpackgen/array", - "marshal_iter_count": 5258248, - "unmarshal_iter_count": 4806144, - "total_iter_count": 10064392, + "marshal_iter_count": 12923450, + "unmarshal_iter_count": 13189476, + "total_iter_count": 26112926, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 222, - "unmarshal_ns_op": 243, - "total_ns_op": 465, + "marshal_ns_op": 92, + "unmarshal_ns_op": 89, + "total_ns_op": 181, "serialization_size": 50, "marshal_alloc_bytes": 144, "unmarshal_alloc_bytes": 112, @@ -749,14 +749,14 @@ var data = [ }, { "name": "ssz", - "marshal_iter_count": 304688, - "unmarshal_iter_count": 424064, - "total_iter_count": 728752, + "marshal_iter_count": 757045, + "unmarshal_iter_count": 1000000, + "total_iter_count": 1757045, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 3689, - "unmarshal_ns_op": 2676, - "total_ns_op": 6365, + "marshal_ns_op": 1529, + "unmarshal_ns_op": 1010, + "total_ns_op": 2539, "serialization_size": 55, "marshal_alloc_bytes": 416, "unmarshal_alloc_bytes": 264, @@ -771,14 +771,14 @@ var data = [ }, { "name": "200sc/bebop", - "marshal_iter_count": 12309823, - "unmarshal_iter_count": 9987800, - "total_iter_count": 22297623, + "marshal_iter_count": 30355666, + "unmarshal_iter_count": 27840397, + "total_iter_count": 58196063, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 95, - "unmarshal_ns_op": 115, - "total_ns_op": 210, + "marshal_ns_op": 38, + "unmarshal_ns_op": 42, + "total_ns_op": 80, "serialization_size": 55, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 32, @@ -793,14 +793,14 @@ var data = [ }, { "name": "200sc/bebop/reuse", - "marshal_iter_count": 26019288, - "unmarshal_iter_count": 10439342, - "total_iter_count": 36458630, + "marshal_iter_count": 49272883, + "unmarshal_iter_count": 28027778, + "total_iter_count": 77300661, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": true, - "marshal_ns_op": 48, - "unmarshal_ns_op": 115, - "total_ns_op": 163, + "marshal_ns_op": 23, + "unmarshal_ns_op": 42, + "total_ns_op": 65, "serialization_size": 55, "marshal_alloc_bytes": 0, "unmarshal_alloc_bytes": 32, @@ -815,14 +815,14 @@ var data = [ }, { "name": "wellquite/bebop", - "marshal_iter_count": 11484367, - "unmarshal_iter_count": 8776882, - "total_iter_count": 20261249, + "marshal_iter_count": 28744035, + "unmarshal_iter_count": 25281608, + "total_iter_count": 54025643, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 98, - "unmarshal_ns_op": 132, - "total_ns_op": 230, + "marshal_ns_op": 40, + "unmarshal_ns_op": 46, + "total_ns_op": 86, "serialization_size": 55, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 32, @@ -837,14 +837,14 @@ var data = [ }, { "name": "wellquite/bebop/reuse", - "marshal_iter_count": 22968068, - "unmarshal_iter_count": 9026935, - "total_iter_count": 31995003, + "marshal_iter_count": 48390674, + "unmarshal_iter_count": 25166641, + "total_iter_count": 73557315, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": true, - "marshal_ns_op": 52, - "unmarshal_ns_op": 130, - "total_ns_op": 182, + "marshal_ns_op": 24, + "unmarshal_ns_op": 46, + "total_ns_op": 70, "serialization_size": 55, "marshal_alloc_bytes": 0, "unmarshal_alloc_bytes": 32, @@ -859,14 +859,14 @@ var data = [ }, { "name": "fastjson", - "marshal_iter_count": 558775, - "unmarshal_iter_count": 533956, - "total_iter_count": 1092731, + "marshal_iter_count": 1582470, + "unmarshal_iter_count": 1495329, + "total_iter_count": 3077799, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 2038, - "unmarshal_ns_op": 2104, - "total_ns_op": 4142, + "marshal_ns_op": 752, + "unmarshal_ns_op": 804, + "total_ns_op": 1556, "serialization_size": 133, "marshal_alloc_bytes": 1864, "unmarshal_alloc_bytes": 1800, @@ -881,14 +881,14 @@ var data = [ }, { "name": "fastjson/reuse", - "marshal_iter_count": 715246, - "unmarshal_iter_count": 510781, - "total_iter_count": 1226027, + "marshal_iter_count": 1969736, + "unmarshal_iter_count": 1446843, + "total_iter_count": 3416579, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": true, - "marshal_ns_op": 1569, - "unmarshal_ns_op": 2125, - "total_ns_op": 3694, + "marshal_ns_op": 604, + "unmarshal_ns_op": 796, + "total_ns_op": 1400, "serialization_size": 133, "marshal_alloc_bytes": 1360, "unmarshal_alloc_bytes": 1800, @@ -903,14 +903,14 @@ var data = [ }, { "name": "benc", - "marshal_iter_count": 13989396, - "unmarshal_iter_count": 10480720, - "total_iter_count": 24470116, + "marshal_iter_count": 36453480, + "unmarshal_iter_count": 29104107, + "total_iter_count": 65557587, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 82, - "unmarshal_ns_op": 118, - "total_ns_op": 200, + "marshal_ns_op": 32, + "unmarshal_ns_op": 40, + "total_ns_op": 72, "serialization_size": 51, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 32, @@ -925,14 +925,14 @@ var data = [ }, { "name": "benc/usafe", - "marshal_iter_count": 13662640, - "unmarshal_iter_count": 29888290, - "total_iter_count": 43550930, + "marshal_iter_count": 36343720, + "unmarshal_iter_count": 70748288, + "total_iter_count": 107092008, "unsafe_string_unmarshal": true, "buffer_reuse_marshal": false, - "marshal_ns_op": 85, - "unmarshal_ns_op": 39, - "total_ns_op": 124, + "marshal_ns_op": 32, + "unmarshal_ns_op": 16, + "total_ns_op": 48, "serialization_size": 51, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 0, @@ -947,14 +947,14 @@ var data = [ }, { "name": "mus", - "marshal_iter_count": 12473493, - "unmarshal_iter_count": 7904714, - "total_iter_count": 20378207, + "marshal_iter_count": 30953595, + "unmarshal_iter_count": 20397799, + "total_iter_count": 51351394, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 95, - "unmarshal_ns_op": 150, - "total_ns_op": 245, + "marshal_ns_op": 37, + "unmarshal_ns_op": 56, + "total_ns_op": 93, "serialization_size": 46, "marshal_alloc_bytes": 48, "unmarshal_alloc_bytes": 32, @@ -969,14 +969,14 @@ var data = [ }, { "name": "mus/unsafe_reuse", - "marshal_iter_count": 27326136, - "unmarshal_iter_count": 18623845, - "total_iter_count": 45949981, + "marshal_iter_count": 57386520, + "unmarshal_iter_count": 47182561, + "total_iter_count": 104569081, "unsafe_string_unmarshal": true, "buffer_reuse_marshal": true, - "marshal_ns_op": 47, - "unmarshal_ns_op": 65, - "total_ns_op": 112, + "marshal_ns_op": 20, + "unmarshal_ns_op": 24, + "total_ns_op": 44, "serialization_size": 49, "marshal_alloc_bytes": 0, "unmarshal_alloc_bytes": 0, @@ -989,16 +989,60 @@ var data = [ "url": "github.com/mus-format/mus-go", "notes": "" }, + { + "name": "idr", + "marshal_iter_count": 29007928, + "unmarshal_iter_count": 25330928, + "total_iter_count": 54338856, + "unsafe_string_unmarshal": false, + "buffer_reuse_marshal": false, + "marshal_ns_op": 39, + "unmarshal_ns_op": 46, + "total_ns_op": 85, + "serialization_size": 57, + "marshal_alloc_bytes": 64, + "unmarshal_alloc_bytes": 32, + "total_alloc_bytes": 96, + "marshal_allocs": 1, + "unmarshal_allocs": 2, + "total_allocs": 3, + "time_support": "fulltzoffset", + "api_kind": "manual", + "url": "github.com/chmike/ditp", + "notes": "Low level IDR encoding demo" + }, + { + "name": "idr/reuse", + "marshal_iter_count": 47680776, + "unmarshal_iter_count": 25314942, + "total_iter_count": 72995718, + "unsafe_string_unmarshal": false, + "buffer_reuse_marshal": true, + "marshal_ns_op": 24, + "unmarshal_ns_op": 46, + "total_ns_op": 70, + "serialization_size": 57, + "marshal_alloc_bytes": 0, + "unmarshal_alloc_bytes": 32, + "total_alloc_bytes": 32, + "marshal_allocs": 0, + "unmarshal_allocs": 2, + "total_allocs": 2, + "time_support": "fulltzoffset", + "api_kind": "manual", + "url": "github.com/chmike/ditp", + "notes": "Low level IDR encoding demo" + }, { "name": "baseline", - "marshal_iter_count": 15214839, - "unmarshal_iter_count": 11854268, - "total_iter_count": 27069107, + "marshal_iter_count": 37693275, + "unmarshal_iter_count": 31625935, + "total_iter_count": 69319210, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 77, - "unmarshal_ns_op": 102, - "total_ns_op": 179, + "marshal_ns_op": 31, + "unmarshal_ns_op": 37, + "total_ns_op": 68, "serialization_size": 47, "marshal_alloc_bytes": 48, "unmarshal_alloc_bytes": 32, @@ -1013,14 +1057,14 @@ var data = [ }, { "name": "baseline/unsafe_reuse", - "marshal_iter_count": 30344418, - "unmarshal_iter_count": 37627855, - "total_iter_count": 67972273, + "marshal_iter_count": 62470716, + "unmarshal_iter_count": 88361715, + "total_iter_count": 150832431, "unsafe_string_unmarshal": true, "buffer_reuse_marshal": true, - "marshal_ns_op": 39, - "unmarshal_ns_op": 29, - "total_ns_op": 68, + "marshal_ns_op": 19, + "unmarshal_ns_op": 13, + "total_ns_op": 32, "serialization_size": 47, "marshal_alloc_bytes": 0, "unmarshal_alloc_bytes": 0, @@ -1035,14 +1079,14 @@ var data = [ }, { "name": "fastape", - "marshal_iter_count": 9971036, - "unmarshal_iter_count": 25212075, - "total_iter_count": 35183111, + "marshal_iter_count": 25837033, + "unmarshal_iter_count": 50290302, + "total_iter_count": 76127335, "unsafe_string_unmarshal": true, "buffer_reuse_marshal": false, - "marshal_ns_op": 118, - "unmarshal_ns_op": 49, - "total_ns_op": 167, + "marshal_ns_op": 46, + "unmarshal_ns_op": 23, + "total_ns_op": 69, "serialization_size": 55, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 0,