From 0e2c1a84ab0a087db24cffabefb5ee1e4f63cf84 Mon Sep 17 00:00:00 2001 From: Bahador Nazarifard Date: Wed, 19 Jun 2024 01:06:33 +0330 Subject: [PATCH 1/3] update with last fastest release v0.2 --- go.mod | 2 +- go.sum | 2 ++ internal/serializers/fastape/fastape.go | 43 +++++++++++++------------ 3 files changed, 25 insertions(+), 22 deletions(-) diff --git a/go.mod b/go.mod index 26b2336..00be521 100644 --- a/go.mod +++ b/go.mod @@ -36,7 +36,7 @@ require ( require ( github.com/nazarifard/copi v0.0.0-20240609072615-763316f77579 // indirect - github.com/nazarifard/fastape v0.0.0-20240611084216-abaecf150e5b // indirect + github.com/nazarifard/fastape v0.0.0-20240618210653-607305a3ae51 // indirect ) require ( diff --git a/go.sum b/go.sum index b6377cf..75a2023 100644 --- a/go.sum +++ b/go.sum @@ -207,6 +207,8 @@ github.com/nazarifard/copi v0.0.0-20240609072615-763316f77579 h1:toqD8/J9DygfET+ github.com/nazarifard/copi v0.0.0-20240609072615-763316f77579/go.mod h1:RZX6PlUi+vF52MjBneuJcoszjuejOPWdMnAKaJOccGc= github.com/nazarifard/fastape v0.0.0-20240611084216-abaecf150e5b h1:Roh7HBLqAxLpo/qxWztQlzt6QUBGTCX9AXxCaJf+pB8= github.com/nazarifard/fastape v0.0.0-20240611084216-abaecf150e5b/go.mod h1:F54tpGg4uMgsYNUqD07iNENNGcS2GJobr+td/iZ5Xm4= +github.com/nazarifard/fastape v0.0.0-20240618210653-607305a3ae51 h1:QocQlmZXhuz9I8TOqe+df2kDqq5HWeWWwZnT0uVNUxw= +github.com/nazarifard/fastape v0.0.0-20240618210653-607305a3ae51/go.mod h1:F54tpGg4uMgsYNUqD07iNENNGcS2GJobr+td/iZ5Xm4= github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20200213170602-2833bce08e4c/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= github.com/niubaoshu/goutils v0.0.0-20180828035119-e8e576f66c2b h1:T7vmCmpGIvqlOOp5SXatALP+HYc/40ZHbxmgy+p+sN0= diff --git a/internal/serializers/fastape/fastape.go b/internal/serializers/fastape/fastape.go index 861c0b9..4ea27d8 100644 --- a/internal/serializers/fastape/fastape.go +++ b/internal/serializers/fastape/fastape.go @@ -9,36 +9,35 @@ type smallStructTape struct { NameTape fastape.StringTape BirthDayTape fastape.TimeTape PhoneTape fastape.StringTape - SiblingsTape fastape.UnitTape[int] + SiblingsTape fastape.UnitTape[byte] SpouseTape fastape.UnitTape[bool] MoneyTape fastape.UnitTape[float64] } -func (cp smallStructTape) Sizeof(p goserbench.SmallStruct) int { - return cp.NameTape.Sizeof(p.Name) + +func (cp *smallStructTape) Marshal(o interface{}) (buf []byte, err error) { + p := o.(*goserbench.SmallStruct) + + sizeof := cp.NameTape.Sizeof(p.Name) + cp.BirthDayTape.Sizeof(p.BirthDay) + cp.PhoneTape.Sizeof(p.Phone) + - cp.SiblingsTape.Sizeof(p.Siblings) + + cp.SiblingsTape.Sizeof(byte(p.Siblings)) + cp.SpouseTape.Sizeof(p.Spouse) + cp.MoneyTape.Sizeof(p.Money) -} -func (cp smallStructTape) Marshal(o interface{}) (buf []byte, err error) { - p := o.(*goserbench.SmallStruct) - buf = make([]byte, cp.Sizeof(*p)) + buf = make([]byte, sizeof) k, n := 0, 0 - k, _ = cp.NameTape.Marshal(p.Name, buf[n:]) + k, _ = cp.NameTape.Roll(p.Name, buf[n:]) n += k - k, _ = cp.BirthDayTape.Marshal(p.BirthDay, buf[n:]) + k, _ = cp.BirthDayTape.Roll(p.BirthDay, buf[n:]) n += k - k, _ = cp.PhoneTape.Marshal(p.Phone, buf[n:]) + k, _ = cp.PhoneTape.Roll(p.Phone, buf[n:]) n += k - k, _ = cp.SiblingsTape.Marshal(p.Siblings, buf[n:]) + k, _ = cp.SiblingsTape.Roll(byte(p.Siblings), buf[n:]) n += k - k, _ = cp.SpouseTape.Marshal(p.Spouse, buf[n:]) + k, _ = cp.SpouseTape.Roll(p.Spouse, buf[n:]) n += k - k, _ = cp.MoneyTape.Marshal(p.Money, buf[n:]) + k, _ = cp.MoneyTape.Roll(p.Money, buf[n:]) n += k return } @@ -47,37 +46,39 @@ func (cp smallStructTape) Unmarshal(bs []byte, o interface{}) (err error) { p := o.(*goserbench.SmallStruct) k, n := 0, 0 - k, err = cp.NameTape.Unmarshal(bs[n:], &p.Name) + k, err = cp.NameTape.Unroll(bs[n:], &p.Name) n += k if err != nil { return err } - k, err = cp.BirthDayTape.Unmarshal(bs[n:], &p.BirthDay) + k, err = cp.BirthDayTape.Unroll(bs[n:], &p.BirthDay) n += k if err != nil { return err } - k, err = cp.PhoneTape.Unmarshal(bs[n:], &p.Phone) + k, err = cp.PhoneTape.Unroll(bs[n:], &p.Phone) n += k if err != nil { return err } - k, err = cp.SiblingsTape.Unmarshal(bs[n:], &p.Siblings) + var sib byte + k, err = cp.SiblingsTape.Unroll(bs[n:], &sib) + p.Siblings = int(sib) n += k if err != nil { return err } - k, err = cp.SpouseTape.Unmarshal(bs[n:], &p.Spouse) + k, err = cp.SpouseTape.Unroll(bs[n:], &p.Spouse) n += k if err != nil { return err } - k, err = cp.MoneyTape.Unmarshal(bs[n:], &p.Money) + k, err = cp.MoneyTape.Unroll(bs[n:], &p.Money) n += k if err != nil { return err @@ -87,5 +88,5 @@ func (cp smallStructTape) Unmarshal(bs []byte, o interface{}) (err error) { } func NewTape() goserbench.Serializer { - return smallStructTape{} + return &smallStructTape{} } From 696824282b3d5272cc241d33327f8ea72875629e Mon Sep 17 00:00:00 2001 From: Bahador Nazarifard Date: Wed, 19 Jun 2024 10:23:00 +0330 Subject: [PATCH 2/3] fastape_reuse is added --- benchmarks.go | 25 +++++++++----- internal/serializers/fastape/fastape.go | 44 +++++++++++++++++++------ 2 files changed, 51 insertions(+), 18 deletions(-) diff --git a/benchmarks.go b/benchmarks.go index 628cd10..01873ef 100644 --- a/benchmarks.go +++ b/benchmarks.go @@ -119,6 +119,23 @@ type BenchmarkCase struct { } var benchmarkCases = []BenchmarkCase{ + { + Name: "fastape", + URL: "github.com/nazarifard/fastape", + New: fastape.NewTape, + + UnsafeStringUnmarshal: true, + TimeSupport: TSUnixNs, + APIKind: AKManual, + }, { + Name: "fastape_reuse", + URL: "github.com/nazarifard/fastape", + New: fastape.NewTape_Reuse, + + UnsafeStringUnmarshal: true, + TimeSupport: TSUnixNs, + APIKind: AKManual, + }, { Name: "gotiny", URL: "github.com/niubaoshu/gotiny", @@ -476,13 +493,5 @@ var benchmarkCases = []BenchmarkCase{ Notes: []string{ "This is a manually written encoding, designed to be the fastest possible for this benchmark.", }, - }, { - Name: "fastape", - URL: "github.com/nazarifard/fastape", - New: fastape.NewTape, - - UnsafeStringUnmarshal: true, - TimeSupport: TSUnixNs, - APIKind: AKManual, }, } diff --git a/internal/serializers/fastape/fastape.go b/internal/serializers/fastape/fastape.go index 4ea27d8..a79d8d8 100644 --- a/internal/serializers/fastape/fastape.go +++ b/internal/serializers/fastape/fastape.go @@ -1,35 +1,43 @@ package fastape import ( + "time" + "github.com/alecthomas/go_serialization_benchmarks/goserbench" "github.com/nazarifard/fastape" ) type smallStructTape struct { NameTape fastape.StringTape - BirthDayTape fastape.TimeTape + BirthDayTape fastape.UnitTape[int64] PhoneTape fastape.StringTape SiblingsTape fastape.UnitTape[byte] SpouseTape fastape.UnitTape[bool] MoneyTape fastape.UnitTape[float64] + buf []byte } func (cp *smallStructTape) Marshal(o interface{}) (buf []byte, err error) { p := o.(*goserbench.SmallStruct) - sizeof := cp.NameTape.Sizeof(p.Name) + - cp.BirthDayTape.Sizeof(p.BirthDay) + - cp.PhoneTape.Sizeof(p.Phone) + - cp.SiblingsTape.Sizeof(byte(p.Siblings)) + - cp.SpouseTape.Sizeof(p.Spouse) + - cp.MoneyTape.Sizeof(p.Money) + birthday := p.BirthDay.UnixNano() + if cp.buf != nil { + buf = cp.buf //bufer reuse + } else { + sizeof := cp.NameTape.Sizeof(p.Name) + + cp.BirthDayTape.Sizeof(birthday) + + cp.PhoneTape.Sizeof(p.Phone) + + cp.SiblingsTape.Sizeof(byte(p.Siblings)) + + cp.SpouseTape.Sizeof(p.Spouse) + + cp.MoneyTape.Sizeof(p.Money) - buf = make([]byte, sizeof) + buf = make([]byte, sizeof) + } k, n := 0, 0 k, _ = cp.NameTape.Roll(p.Name, buf[n:]) n += k - k, _ = cp.BirthDayTape.Roll(p.BirthDay, buf[n:]) + k, _ = cp.BirthDayTape.Roll(birthday, buf[n:]) n += k k, _ = cp.PhoneTape.Roll(p.Phone, buf[n:]) n += k @@ -52,7 +60,9 @@ func (cp smallStructTape) Unmarshal(bs []byte, o interface{}) (err error) { return err } - k, err = cp.BirthDayTape.Unroll(bs[n:], &p.BirthDay) + var nano int64 + k, err = cp.BirthDayTape.Unroll(bs[n:], &nano) + p.BirthDay = time.Unix(0, nano) n += k if err != nil { return err @@ -90,3 +100,17 @@ func (cp smallStructTape) Unmarshal(bs []byte, o interface{}) (err error) { func NewTape() goserbench.Serializer { return &smallStructTape{} } + +func NewTape_Reuse() goserbench.Serializer { + const maxSize = 0 + + 8 + //date + 8 + //money + 1 + //sibling + 1 + //spouse + 1 + goserbench.MaxSmallStructPhoneSize + + 1 + goserbench.MaxSmallStructNameSize + + return &smallStructTape{ + buf: make([]byte, maxSize), + } +} From f7f478fdf83b7d448cbd1da09383b0bf84c68e42 Mon Sep 17 00:00:00 2001 From: Bahador Nazarifard Date: Wed, 19 Jun 2024 10:37:27 +0330 Subject: [PATCH 3/3] report/data.js updated --- report/data.js | 654 +++++++++++++++++++++++++------------------------ 1 file changed, 338 insertions(+), 316 deletions(-) diff --git a/report/data.js b/report/data.js index cc0dfe1..9caae29 100644 --- a/report/data.js +++ b/report/data.js @@ -1,14 +1,58 @@ var data = [ + { + "name": "fastape", + "marshal_iter_count": 1836297, + "unmarshal_iter_count": 4123916, + "total_iter_count": 5960213, + "unsafe_string_unmarshal": true, + "buffer_reuse_marshal": false, + "marshal_ns_op": 117, + "unmarshal_ns_op": 57, + "total_ns_op": 174, + "serialization_size": 46, + "marshal_alloc_bytes": 48, + "unmarshal_alloc_bytes": 0, + "total_alloc_bytes": 48, + "marshal_allocs": 1, + "unmarshal_allocs": 0, + "total_allocs": 1, + "time_support": "unix-ns", + "api_kind": "manual", + "url": "github.com/nazarifard/fastape", + "notes": "" + }, + { + "name": "fastape_reuse", + "marshal_iter_count": 4422584, + "unmarshal_iter_count": 3653334, + "total_iter_count": 8075918, + "unsafe_string_unmarshal": true, + "buffer_reuse_marshal": false, + "marshal_ns_op": 53, + "unmarshal_ns_op": 57, + "total_ns_op": 110, + "serialization_size": 46, + "marshal_alloc_bytes": 0, + "unmarshal_alloc_bytes": 0, + "total_alloc_bytes": 0, + "marshal_allocs": 0, + "unmarshal_allocs": 0, + "total_allocs": 0, + "time_support": "unix-ns", + "api_kind": "manual", + "url": "github.com/nazarifard/fastape", + "notes": "" + }, { "name": "gotiny", - "marshal_iter_count": 2824863, - "unmarshal_iter_count": 6697485, - "total_iter_count": 9522348, + "marshal_iter_count": 433118, + "unmarshal_iter_count": 1000000, + "total_iter_count": 1433118, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 425, - "unmarshal_ns_op": 174, - "total_ns_op": 599, + "marshal_ns_op": 521, + "unmarshal_ns_op": 209, + "total_ns_op": 730, "serialization_size": 47, "marshal_alloc_bytes": 168, "unmarshal_alloc_bytes": 32, @@ -23,14 +67,14 @@ var data = [ }, { "name": "msgp", - "marshal_iter_count": 8127158, - "unmarshal_iter_count": 5665038, - "total_iter_count": 13792196, + "marshal_iter_count": 1226427, + "unmarshal_iter_count": 806559, + "total_iter_count": 2032986, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 143, - "unmarshal_ns_op": 216, - "total_ns_op": 359, + "marshal_ns_op": 214, + "unmarshal_ns_op": 261, + "total_ns_op": 475, "serialization_size": 97, "marshal_alloc_bytes": 128, "unmarshal_alloc_bytes": 32, @@ -45,14 +89,14 @@ var data = [ }, { "name": "msgpack", - "marshal_iter_count": 1000000, - "unmarshal_iter_count": 1000000, - "total_iter_count": 2000000, + "marshal_iter_count": 175740, + "unmarshal_iter_count": 167060, + "total_iter_count": 342800, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1012, - "unmarshal_ns_op": 1219, - "total_ns_op": 2231, + "marshal_ns_op": 1147, + "unmarshal_ns_op": 1372, + "total_ns_op": 2519, "serialization_size": 92, "marshal_alloc_bytes": 264, "unmarshal_alloc_bytes": 80, @@ -67,14 +111,14 @@ var data = [ }, { "name": "json", - "marshal_iter_count": 830055, - "unmarshal_iter_count": 342466, - "total_iter_count": 1172521, + "marshal_iter_count": 102253, + "unmarshal_iter_count": 51462, + "total_iter_count": 153715, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1424, - "unmarshal_ns_op": 3498, - "total_ns_op": 4922, + "marshal_ns_op": 1972, + "unmarshal_ns_op": 4379, + "total_ns_op": 6351, "serialization_size": 151, "marshal_alloc_bytes": 208, "unmarshal_alloc_bytes": 248, @@ -89,15 +133,15 @@ var data = [ }, { "name": "jsoniter", - "marshal_iter_count": 1272920, - "unmarshal_iter_count": 896574, - "total_iter_count": 2169494, + "marshal_iter_count": 212024, + "unmarshal_iter_count": 129175, + "total_iter_count": 341199, "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": 1165, + "unmarshal_ns_op": 1702, + "total_ns_op": 2867, + "serialization_size": 139, "marshal_alloc_bytes": 200, "unmarshal_alloc_bytes": 136, "total_alloc_bytes": 336, @@ -111,14 +155,14 @@ var data = [ }, { "name": "easyjson", - "marshal_iter_count": 1000000, - "unmarshal_iter_count": 1000000, - "total_iter_count": 2000000, + "marshal_iter_count": 125984, + "unmarshal_iter_count": 167286, + "total_iter_count": 293270, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1130, - "unmarshal_ns_op": 1058, - "total_ns_op": 2188, + "marshal_ns_op": 1881, + "unmarshal_ns_op": 1287, + "total_ns_op": 3168, "serialization_size": 151, "marshal_alloc_bytes": 976, "unmarshal_alloc_bytes": 32, @@ -133,14 +177,14 @@ var data = [ }, { "name": "bson", - "marshal_iter_count": 911517, - "unmarshal_iter_count": 624112, - "total_iter_count": 1535629, + "marshal_iter_count": 179932, + "unmarshal_iter_count": 97467, + "total_iter_count": 277399, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1135, - "unmarshal_ns_op": 1920, - "total_ns_op": 3055, + "marshal_ns_op": 1301, + "unmarshal_ns_op": 2183, + "total_ns_op": 3484, "serialization_size": 110, "marshal_alloc_bytes": 376, "unmarshal_alloc_bytes": 144, @@ -155,14 +199,14 @@ var data = [ }, { "name": "mongobson", - "marshal_iter_count": 678462, - "unmarshal_iter_count": 599133, - "total_iter_count": 1277595, + "marshal_iter_count": 110101, + "unmarshal_iter_count": 88588, + "total_iter_count": 198689, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1644, - "unmarshal_ns_op": 1851, - "total_ns_op": 3495, + "marshal_ns_op": 1953, + "unmarshal_ns_op": 2312, + "total_ns_op": 4265, "serialization_size": 110, "marshal_alloc_bytes": 240, "unmarshal_alloc_bytes": 328, @@ -177,14 +221,14 @@ var data = [ }, { "name": "gob", - "marshal_iter_count": 199690, - "unmarshal_iter_count": 41342, - "total_iter_count": 241032, + "marshal_iter_count": 30992, + "unmarshal_iter_count": 6001, + "total_iter_count": 36993, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 5978, - "unmarshal_ns_op": 29124, - "total_ns_op": 35102, + "marshal_ns_op": 7432, + "unmarshal_ns_op": 42317, + "total_ns_op": 49749, "serialization_size": 172, "marshal_alloc_bytes": 1744, "unmarshal_alloc_bytes": 7656, @@ -199,14 +243,14 @@ var data = [ }, { "name": "davecgh/xdr", - "marshal_iter_count": 717974, - "unmarshal_iter_count": 1000000, - "total_iter_count": 1717974, + "marshal_iter_count": 109414, + "unmarshal_iter_count": 149394, + "total_iter_count": 258808, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1561, - "unmarshal_ns_op": 1224, - "total_ns_op": 2785, + "marshal_ns_op": 1852, + "unmarshal_ns_op": 1464, + "total_ns_op": 3316, "serialization_size": 92, "marshal_alloc_bytes": 392, "unmarshal_alloc_bytes": 152, @@ -221,14 +265,14 @@ var data = [ }, { "name": "ugorji/msgpack", - "marshal_iter_count": 1000000, - "unmarshal_iter_count": 930351, - "total_iter_count": 1930351, + "marshal_iter_count": 127336, + "unmarshal_iter_count": 153264, + "total_iter_count": 280600, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1046, - "unmarshal_ns_op": 1228, - "total_ns_op": 2274, + "marshal_ns_op": 1611, + "unmarshal_ns_op": 1535, + "total_ns_op": 3146, "serialization_size": 91, "marshal_alloc_bytes": 1240, "unmarshal_alloc_bytes": 608, @@ -243,21 +287,21 @@ var data = [ }, { "name": "ugorji/binc", - "marshal_iter_count": 996676, - "unmarshal_iter_count": 1000000, - "total_iter_count": 1996676, + "marshal_iter_count": 143179, + "unmarshal_iter_count": 116067, + "total_iter_count": 259246, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1145, - "unmarshal_ns_op": 1140, - "total_ns_op": 2285, + "marshal_ns_op": 1762, + "unmarshal_ns_op": 1760, + "total_ns_op": 3522, "serialization_size": 95, "marshal_alloc_bytes": 1256, - "unmarshal_alloc_bytes": 672, - "total_alloc_bytes": 1928, + "unmarshal_alloc_bytes": 832, + "total_alloc_bytes": 2088, "marshal_allocs": 4, - "unmarshal_allocs": 3, - "total_allocs": 7, + "unmarshal_allocs": 6, + "total_allocs": 10, "time_support": "fulltzoffset", "api_kind": "reflect", "url": "github.com/ugorji/go/codec", @@ -265,14 +309,14 @@ var data = [ }, { "name": "sereal", - "marshal_iter_count": 361704, - "unmarshal_iter_count": 359160, - "total_iter_count": 720864, + "marshal_iter_count": 56210, + "unmarshal_iter_count": 50616, + "total_iter_count": 106826, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 3124, - "unmarshal_ns_op": 3068, - "total_ns_op": 6192, + "marshal_ns_op": 4551, + "unmarshal_ns_op": 4164, + "total_ns_op": 8715, "serialization_size": 142, "marshal_alloc_bytes": 1104, "unmarshal_alloc_bytes": 896, @@ -287,14 +331,14 @@ var data = [ }, { "name": "alecthomas/binary", - "marshal_iter_count": 674114, - "unmarshal_iter_count": 890947, - "total_iter_count": 1565061, + "marshal_iter_count": 92164, + "unmarshal_iter_count": 122655, + "total_iter_count": 214819, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 1739, - "unmarshal_ns_op": 1363, - "total_ns_op": 3102, + "marshal_ns_op": 2218, + "unmarshal_ns_op": 1801, + "total_ns_op": 4019, "serialization_size": 61, "marshal_alloc_bytes": 360, "unmarshal_alloc_bytes": 240, @@ -309,14 +353,14 @@ var data = [ }, { "name": "flatbuffers", - "marshal_iter_count": 1455066, - "unmarshal_iter_count": 7601462, - "total_iter_count": 9056528, + "marshal_iter_count": 213855, + "unmarshal_iter_count": 1000000, + "total_iter_count": 1213855, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 825, - "unmarshal_ns_op": 160, - "total_ns_op": 985, + "marshal_ns_op": 1113, + "unmarshal_ns_op": 236, + "total_ns_op": 1349, "serialization_size": 95, "marshal_alloc_bytes": 376, "unmarshal_alloc_bytes": 32, @@ -331,14 +375,14 @@ var data = [ }, { "name": "capnproto", - "marshal_iter_count": 448254, - "unmarshal_iter_count": 2924187, - "total_iter_count": 3372441, + "marshal_iter_count": 69192, + "unmarshal_iter_count": 439736, + "total_iter_count": 508928, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 2252, - "unmarshal_ns_op": 418, - "total_ns_op": 2670, + "marshal_ns_op": 3745, + "unmarshal_ns_op": 543, + "total_ns_op": 4288, "serialization_size": 96, "marshal_alloc_bytes": 4392, "unmarshal_alloc_bytes": 112, @@ -353,18 +397,18 @@ var data = [ }, { "name": "hprose", - "marshal_iter_count": 1000000, - "unmarshal_iter_count": 1000000, - "total_iter_count": 2000000, + "marshal_iter_count": 191324, + "unmarshal_iter_count": 182526, + "total_iter_count": 373850, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 2131, - "unmarshal_ns_op": 1871, - "total_ns_op": 4002, + "marshal_ns_op": 1226, + "unmarshal_ns_op": 1359, + "total_ns_op": 2585, "serialization_size": 85, - "marshal_alloc_bytes": 412, + "marshal_alloc_bytes": 319, "unmarshal_alloc_bytes": 224, - "total_alloc_bytes": 636, + "total_alloc_bytes": 543, "marshal_allocs": 8, "unmarshal_allocs": 9, "total_allocs": 17, @@ -375,14 +419,14 @@ var data = [ }, { "name": "hprose2", - "marshal_iter_count": 2842987, - "unmarshal_iter_count": 2536797, - "total_iter_count": 5379784, + "marshal_iter_count": 354454, + "unmarshal_iter_count": 387678, + "total_iter_count": 742132, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 419, - "unmarshal_ns_op": 525, - "total_ns_op": 944, + "marshal_ns_op": 669, + "unmarshal_ns_op": 630, + "total_ns_op": 1299, "serialization_size": 85, "marshal_alloc_bytes": 0, "unmarshal_alloc_bytes": 56, @@ -397,14 +441,14 @@ var data = [ }, { "name": "dedis/protobuf", - "marshal_iter_count": 1596147, - "unmarshal_iter_count": 1269361, - "total_iter_count": 2865508, + "marshal_iter_count": 230496, + "unmarshal_iter_count": 194179, + "total_iter_count": 424675, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 751, - "unmarshal_ns_op": 946, - "total_ns_op": 1697, + "marshal_ns_op": 1007, + "unmarshal_ns_op": 1117, + "total_ns_op": 2124, "serialization_size": 52, "marshal_alloc_bytes": 144, "unmarshal_alloc_bytes": 104, @@ -419,14 +463,14 @@ var data = [ }, { "name": "pulsar", - "marshal_iter_count": 2043909, - "unmarshal_iter_count": 2230825, - "total_iter_count": 4274734, + "marshal_iter_count": 241988, + "unmarshal_iter_count": 292062, + "total_iter_count": 534050, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 591, - "unmarshal_ns_op": 542, - "total_ns_op": 1133, + "marshal_ns_op": 843, + "unmarshal_ns_op": 733, + "total_ns_op": 1576, "serialization_size": 51, "marshal_alloc_bytes": 304, "unmarshal_alloc_bytes": 160, @@ -441,14 +485,14 @@ var data = [ }, { "name": "gogo/protobuf", - "marshal_iter_count": 9495188, - "unmarshal_iter_count": 7050087, - "total_iter_count": 16545275, + "marshal_iter_count": 1267803, + "unmarshal_iter_count": 957357, + "total_iter_count": 2225160, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 124, - "unmarshal_ns_op": 173, - "total_ns_op": 297, + "marshal_ns_op": 188, + "unmarshal_ns_op": 259, + "total_ns_op": 447, "serialization_size": 53, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 32, @@ -463,21 +507,21 @@ var data = [ }, { "name": "gogo/jsonpb", - "marshal_iter_count": 95270, - "unmarshal_iter_count": 75685, - "total_iter_count": 170955, + "marshal_iter_count": 14150, + "unmarshal_iter_count": 11600, + "total_iter_count": 25750, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 12204, - "unmarshal_ns_op": 16011, - "total_ns_op": 28215, + "marshal_ns_op": 16633, + "unmarshal_ns_op": 22570, + "total_ns_op": 39203, "serialization_size": 125, - "marshal_alloc_bytes": 2747, - "unmarshal_alloc_bytes": 3151, - "total_alloc_bytes": 5898, + "marshal_alloc_bytes": 2742, + "unmarshal_alloc_bytes": 3161, + "total_alloc_bytes": 5903, "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 +529,14 @@ var data = [ }, { "name": "colfer", - "marshal_iter_count": 9157371, - "unmarshal_iter_count": 8785465, - "total_iter_count": 17942836, + "marshal_iter_count": 1305157, + "unmarshal_iter_count": 1208635, + "total_iter_count": 2513792, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 128, - "unmarshal_ns_op": 138, - "total_ns_op": 266, + "marshal_ns_op": 180, + "unmarshal_ns_op": 197, + "total_ns_op": 377, "serialization_size": 51, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 32, @@ -507,14 +551,14 @@ var data = [ }, { "name": "gencode", - "marshal_iter_count": 7721150, - "unmarshal_iter_count": 9337818, - "total_iter_count": 17058968, + "marshal_iter_count": 970990, + "unmarshal_iter_count": 1225088, + "total_iter_count": 2196078, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 153, - "unmarshal_ns_op": 129, - "total_ns_op": 282, + "marshal_ns_op": 238, + "unmarshal_ns_op": 185, + "total_ns_op": 423, "serialization_size": 53, "marshal_alloc_bytes": 80, "unmarshal_alloc_bytes": 32, @@ -529,14 +573,14 @@ var data = [ }, { "name": "gencode/unsafe_reuse", - "marshal_iter_count": 25454443, - "unmarshal_iter_count": 10747903, - "total_iter_count": 36202346, + "marshal_iter_count": 3223068, + "unmarshal_iter_count": 1234788, + "total_iter_count": 4457856, "unsafe_string_unmarshal": true, "buffer_reuse_marshal": true, - "marshal_ns_op": 49, - "unmarshal_ns_op": 112, - "total_ns_op": 161, + "marshal_ns_op": 72, + "unmarshal_ns_op": 166, + "total_ns_op": 238, "serialization_size": 46, "marshal_alloc_bytes": 0, "unmarshal_alloc_bytes": 32, @@ -551,14 +595,14 @@ var data = [ }, { "name": "calmh/xdr", - "marshal_iter_count": 7591645, - "unmarshal_iter_count": 8884662, - "total_iter_count": 16476307, + "marshal_iter_count": 1000000, + "unmarshal_iter_count": 1209718, + "total_iter_count": 2209718, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 159, - "unmarshal_ns_op": 137, - "total_ns_op": 296, + "marshal_ns_op": 230, + "unmarshal_ns_op": 198, + "total_ns_op": 428, "serialization_size": 60, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 32, @@ -573,14 +617,14 @@ var data = [ }, { "name": "goavro", - "marshal_iter_count": 563248, - "unmarshal_iter_count": 217836, - "total_iter_count": 781084, + "marshal_iter_count": 84724, + "unmarshal_iter_count": 33457, + "total_iter_count": 118181, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 2137, - "unmarshal_ns_op": 5183, - "total_ns_op": 7320, + "marshal_ns_op": 2648, + "unmarshal_ns_op": 6893, + "total_ns_op": 9541, "serialization_size": 47, "marshal_alloc_bytes": 584, "unmarshal_alloc_bytes": 2232, @@ -595,14 +639,14 @@ var data = [ }, { "name": "avro2/text", - "marshal_iter_count": 343981, - "unmarshal_iter_count": 382122, - "total_iter_count": 726103, + "marshal_iter_count": 50568, + "unmarshal_iter_count": 61393, + "total_iter_count": 111961, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 3282, - "unmarshal_ns_op": 3120, - "total_ns_op": 6402, + "marshal_ns_op": 4300, + "unmarshal_ns_op": 4080, + "total_ns_op": 8380, "serialization_size": 133, "marshal_alloc_bytes": 1320, "unmarshal_alloc_bytes": 656, @@ -617,14 +661,14 @@ var data = [ }, { "name": "avro2/binary", - "marshal_iter_count": 1242313, - "unmarshal_iter_count": 1218283, - "total_iter_count": 2460596, + "marshal_iter_count": 178182, + "unmarshal_iter_count": 164251, + "total_iter_count": 342433, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 964, - "unmarshal_ns_op": 977, - "total_ns_op": 1941, + "marshal_ns_op": 1281, + "unmarshal_ns_op": 1334, + "total_ns_op": 2615, "serialization_size": 47, "marshal_alloc_bytes": 464, "unmarshal_alloc_bytes": 464, @@ -639,14 +683,14 @@ var data = [ }, { "name": "ikea", - "marshal_iter_count": 2012862, - "unmarshal_iter_count": 1659099, - "total_iter_count": 3671961, + "marshal_iter_count": 314542, + "unmarshal_iter_count": 267202, + "total_iter_count": 581744, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 602, - "unmarshal_ns_op": 724, - "total_ns_op": 1326, + "marshal_ns_op": 755, + "unmarshal_ns_op": 911, + "total_ns_op": 1666, "serialization_size": 55, "marshal_alloc_bytes": 72, "unmarshal_alloc_bytes": 96, @@ -661,14 +705,14 @@ var data = [ }, { "name": "shamaton/msgpack/map", - "marshal_iter_count": 1580954, - "unmarshal_iter_count": 1761334, - "total_iter_count": 3342288, + "marshal_iter_count": 228942, + "unmarshal_iter_count": 249153, + "total_iter_count": 478095, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 759, - "unmarshal_ns_op": 681, - "total_ns_op": 1440, + "marshal_ns_op": 1034, + "unmarshal_ns_op": 963, + "total_ns_op": 1997, "serialization_size": 92, "marshal_alloc_bytes": 192, "unmarshal_alloc_bytes": 88, @@ -683,14 +727,14 @@ var data = [ }, { "name": "shamaton/msgpack/array", - "marshal_iter_count": 1844930, - "unmarshal_iter_count": 2255613, - "total_iter_count": 4100543, + "marshal_iter_count": 254246, + "unmarshal_iter_count": 296584, + "total_iter_count": 550830, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 643, - "unmarshal_ns_op": 533, - "total_ns_op": 1176, + "marshal_ns_op": 893, + "unmarshal_ns_op": 675, + "total_ns_op": 1568, "serialization_size": 50, "marshal_alloc_bytes": 160, "unmarshal_alloc_bytes": 88, @@ -705,14 +749,14 @@ var data = [ }, { "name": "shamaton/msgpackgen/map", - "marshal_iter_count": 4475046, - "unmarshal_iter_count": 3054723, - "total_iter_count": 7529769, + "marshal_iter_count": 570490, + "unmarshal_iter_count": 379939, + "total_iter_count": 950429, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 266, - "unmarshal_ns_op": 391, - "total_ns_op": 657, + "marshal_ns_op": 399, + "unmarshal_ns_op": 544, + "total_ns_op": 943, "serialization_size": 92, "marshal_alloc_bytes": 176, "unmarshal_alloc_bytes": 112, @@ -727,14 +771,14 @@ var data = [ }, { "name": "shamaton/msgpackgen/array", - "marshal_iter_count": 5258248, - "unmarshal_iter_count": 4806144, - "total_iter_count": 10064392, + "marshal_iter_count": 695067, + "unmarshal_iter_count": 681914, + "total_iter_count": 1376981, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 222, - "unmarshal_ns_op": 243, - "total_ns_op": 465, + "marshal_ns_op": 383, + "unmarshal_ns_op": 337, + "total_ns_op": 720, "serialization_size": 50, "marshal_alloc_bytes": 144, "unmarshal_alloc_bytes": 112, @@ -749,14 +793,14 @@ var data = [ }, { "name": "ssz", - "marshal_iter_count": 304688, - "unmarshal_iter_count": 424064, - "total_iter_count": 728752, + "marshal_iter_count": 47563, + "unmarshal_iter_count": 74103, + "total_iter_count": 121666, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 3689, - "unmarshal_ns_op": 2676, - "total_ns_op": 6365, + "marshal_ns_op": 4706, + "unmarshal_ns_op": 3422, + "total_ns_op": 8128, "serialization_size": 55, "marshal_alloc_bytes": 416, "unmarshal_alloc_bytes": 264, @@ -771,14 +815,14 @@ var data = [ }, { "name": "200sc/bebop", - "marshal_iter_count": 12309823, - "unmarshal_iter_count": 9987800, - "total_iter_count": 22297623, + "marshal_iter_count": 1569649, + "unmarshal_iter_count": 1393124, + "total_iter_count": 2962773, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 95, - "unmarshal_ns_op": 115, - "total_ns_op": 210, + "marshal_ns_op": 151, + "unmarshal_ns_op": 169, + "total_ns_op": 320, "serialization_size": 55, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 32, @@ -793,14 +837,14 @@ var data = [ }, { "name": "200sc/bebop/reuse", - "marshal_iter_count": 26019288, - "unmarshal_iter_count": 10439342, - "total_iter_count": 36458630, + "marshal_iter_count": 3063826, + "unmarshal_iter_count": 1402634, + "total_iter_count": 4466460, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": true, - "marshal_ns_op": 48, - "unmarshal_ns_op": 115, - "total_ns_op": 163, + "marshal_ns_op": 75, + "unmarshal_ns_op": 172, + "total_ns_op": 247, "serialization_size": 55, "marshal_alloc_bytes": 0, "unmarshal_alloc_bytes": 32, @@ -815,14 +859,14 @@ var data = [ }, { "name": "wellquite/bebop", - "marshal_iter_count": 11484367, - "unmarshal_iter_count": 8776882, - "total_iter_count": 20261249, + "marshal_iter_count": 1500154, + "unmarshal_iter_count": 1296115, + "total_iter_count": 2796269, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 98, - "unmarshal_ns_op": 132, - "total_ns_op": 230, + "marshal_ns_op": 184, + "unmarshal_ns_op": 184, + "total_ns_op": 368, "serialization_size": 55, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 32, @@ -837,14 +881,14 @@ var data = [ }, { "name": "wellquite/bebop/reuse", - "marshal_iter_count": 22968068, - "unmarshal_iter_count": 9026935, - "total_iter_count": 31995003, + "marshal_iter_count": 2982495, + "unmarshal_iter_count": 1295695, + "total_iter_count": 4278190, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": true, - "marshal_ns_op": 52, - "unmarshal_ns_op": 130, - "total_ns_op": 182, + "marshal_ns_op": 79, + "unmarshal_ns_op": 184, + "total_ns_op": 263, "serialization_size": 55, "marshal_alloc_bytes": 0, "unmarshal_alloc_bytes": 32, @@ -859,14 +903,14 @@ var data = [ }, { "name": "fastjson", - "marshal_iter_count": 558775, - "unmarshal_iter_count": 533956, - "total_iter_count": 1092731, + "marshal_iter_count": 73675, + "unmarshal_iter_count": 66399, + "total_iter_count": 140074, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 2038, - "unmarshal_ns_op": 2104, - "total_ns_op": 4142, + "marshal_ns_op": 2817, + "unmarshal_ns_op": 3152, + "total_ns_op": 5969, "serialization_size": 133, "marshal_alloc_bytes": 1864, "unmarshal_alloc_bytes": 1800, @@ -881,14 +925,14 @@ var data = [ }, { "name": "fastjson/reuse", - "marshal_iter_count": 715246, - "unmarshal_iter_count": 510781, - "total_iter_count": 1226027, + "marshal_iter_count": 103767, + "unmarshal_iter_count": 70546, + "total_iter_count": 174313, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": true, - "marshal_ns_op": 1569, - "unmarshal_ns_op": 2125, - "total_ns_op": 3694, + "marshal_ns_op": 2511, + "unmarshal_ns_op": 3151, + "total_ns_op": 5662, "serialization_size": 133, "marshal_alloc_bytes": 1360, "unmarshal_alloc_bytes": 1800, @@ -903,14 +947,14 @@ var data = [ }, { "name": "benc", - "marshal_iter_count": 13989396, - "unmarshal_iter_count": 10480720, - "total_iter_count": 24470116, + "marshal_iter_count": 1705519, + "unmarshal_iter_count": 1374334, + "total_iter_count": 3079853, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 82, - "unmarshal_ns_op": 118, - "total_ns_op": 200, + "marshal_ns_op": 139, + "unmarshal_ns_op": 162, + "total_ns_op": 301, "serialization_size": 51, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 32, @@ -925,14 +969,14 @@ var data = [ }, { "name": "benc/usafe", - "marshal_iter_count": 13662640, - "unmarshal_iter_count": 29888290, - "total_iter_count": 43550930, + "marshal_iter_count": 1722458, + "unmarshal_iter_count": 3934374, + "total_iter_count": 5656832, "unsafe_string_unmarshal": true, "buffer_reuse_marshal": false, - "marshal_ns_op": 85, - "unmarshal_ns_op": 39, - "total_ns_op": 124, + "marshal_ns_op": 137, + "unmarshal_ns_op": 58, + "total_ns_op": 195, "serialization_size": 51, "marshal_alloc_bytes": 64, "unmarshal_alloc_bytes": 0, @@ -947,14 +991,14 @@ var data = [ }, { "name": "mus", - "marshal_iter_count": 12473493, - "unmarshal_iter_count": 7904714, - "total_iter_count": 20378207, + "marshal_iter_count": 1539300, + "unmarshal_iter_count": 1000000, + "total_iter_count": 2539300, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 95, - "unmarshal_ns_op": 150, - "total_ns_op": 245, + "marshal_ns_op": 166, + "unmarshal_ns_op": 228, + "total_ns_op": 394, "serialization_size": 46, "marshal_alloc_bytes": 48, "unmarshal_alloc_bytes": 32, @@ -969,14 +1013,14 @@ var data = [ }, { "name": "mus/unsafe_reuse", - "marshal_iter_count": 27326136, - "unmarshal_iter_count": 18623845, - "total_iter_count": 45949981, + "marshal_iter_count": 3420352, + "unmarshal_iter_count": 2575712, + "total_iter_count": 5996064, "unsafe_string_unmarshal": true, "buffer_reuse_marshal": true, - "marshal_ns_op": 47, - "unmarshal_ns_op": 65, - "total_ns_op": 112, + "marshal_ns_op": 69, + "unmarshal_ns_op": 92, + "total_ns_op": 161, "serialization_size": 49, "marshal_alloc_bytes": 0, "unmarshal_alloc_bytes": 0, @@ -991,14 +1035,14 @@ var data = [ }, { "name": "baseline", - "marshal_iter_count": 15214839, - "unmarshal_iter_count": 11854268, - "total_iter_count": 27069107, + "marshal_iter_count": 2013086, + "unmarshal_iter_count": 1629891, + "total_iter_count": 3642977, "unsafe_string_unmarshal": false, "buffer_reuse_marshal": false, - "marshal_ns_op": 77, - "unmarshal_ns_op": 102, - "total_ns_op": 179, + "marshal_ns_op": 117, + "unmarshal_ns_op": 145, + "total_ns_op": 262, "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": 3991238, + "unmarshal_iter_count": 5155081, + "total_iter_count": 9146319, "unsafe_string_unmarshal": true, "buffer_reuse_marshal": true, - "marshal_ns_op": 39, - "unmarshal_ns_op": 29, - "total_ns_op": 68, + "marshal_ns_op": 64, + "unmarshal_ns_op": 45, + "total_ns_op": 109, "serialization_size": 47, "marshal_alloc_bytes": 0, "unmarshal_alloc_bytes": 0, @@ -1032,27 +1076,5 @@ var data = [ "api_kind": "manual", "url": "", "notes": "This is a manually written encoding, designed to be the fastest possible for this benchmark." - }, - { - "name": "fastape", - "marshal_iter_count": 9971036, - "unmarshal_iter_count": 25212075, - "total_iter_count": 35183111, - "unsafe_string_unmarshal": true, - "buffer_reuse_marshal": false, - "marshal_ns_op": 118, - "unmarshal_ns_op": 49, - "total_ns_op": 167, - "serialization_size": 55, - "marshal_alloc_bytes": 64, - "unmarshal_alloc_bytes": 0, - "total_alloc_bytes": 64, - "marshal_allocs": 1, - "unmarshal_allocs": 0, - "total_allocs": 1, - "time_support": "unix-ns", - "api_kind": "manual", - "url": "github.com/nazarifard/fastape", - "notes": "" } ]; \ No newline at end of file