Added a benchmark for github.com/ugorji/go/codec . Consistent naming for benchmarks.

This commit is contained in:
Victor Starodub
2016-03-04 11:29:01 +10:00
parent e7141db2c5
commit e8a814a5b5
7 changed files with 7368 additions and 141 deletions
+2
View File
@@ -0,0 +1,2 @@
.root
*_easyjson.go
+3 -2
View File
@@ -6,7 +6,7 @@ all: test
.root/src/$(PKG):
mkdir -p $@
ln -st $@ $$PWD/*
for i in $$PWD/* ; do ln -s $$i $@/`basename $$i` ; done
root: .root/src/$(PKG)
@@ -25,9 +25,10 @@ generate: root build
test: generate root
go test $(PKG)/{tests,jlexer,gen}
@go test -benchmem -tags use_easyjson -bench . $(PKG)/benchmark
@go test -benchmem -bench . $(PKG)/benchmark
@go test -benchmem -tags use_ffjson -bench . $(PKG)/benchmark
@go test -benchmem -tags use_easyjson -bench . $(PKG)/benchmark
@go test -benchmem -tags use_codec -bench . $(PKG)/benchmark
benchmark/ujson.sh
+313
View File
@@ -0,0 +1,313 @@
// +build use_codec
package benchmark
import (
"testing"
"github.com/ugorji/go/codec"
)
func BenchmarkCodec_Unmarshal_M(b *testing.B) {
var h codec.Handle = new(codec.JsonHandle)
dec := codec.NewDecoderBytes(nil, h)
b.SetBytes(int64(len(largeStructText)))
for i := 0; i < b.N; i++ {
var s LargeStruct
dec.ResetBytes(largeStructText)
if err := dec.Decode(&s); err != nil {
b.Error(err)
}
}
}
func BenchmarkCodec_Unmarshal_S(b *testing.B) {
var h codec.Handle = new(codec.JsonHandle)
dec := codec.NewDecoderBytes(nil, h)
b.SetBytes(int64(len(smallStructText)))
for i := 0; i < b.N; i++ {
var s LargeStruct
dec.ResetBytes(smallStructText)
if err := dec.Decode(&s); err != nil {
b.Error(err)
}
}
}
func BenchmarkCodec_Marshal_S(b *testing.B) {
var h codec.Handle = new(codec.JsonHandle)
var out []byte
enc := codec.NewEncoderBytes(&out, h)
var l int64
for i := 0; i < b.N; i++ {
enc.ResetBytes(&out)
if err := enc.Encode(&smallStructData); err != nil {
b.Error(err)
}
l = int64(len(out))
out = nil
}
b.SetBytes(l)
}
func BenchmarkCodec_Marshal_M(b *testing.B) {
var h codec.Handle = new(codec.JsonHandle)
var out []byte
enc := codec.NewEncoderBytes(&out, h)
var l int64
for i := 0; i < b.N; i++ {
enc.ResetBytes(&out)
if err := enc.Encode(&largeStructData); err != nil {
b.Error(err)
}
l = int64(len(out))
out = nil
}
b.SetBytes(l)
}
func BenchmarkCodec_Marshal_L(b *testing.B) {
var h codec.Handle = new(codec.JsonHandle)
var out []byte
enc := codec.NewEncoderBytes(&out, h)
var l int64
for i := 0; i < b.N; i++ {
enc.ResetBytes(&out)
if err := enc.Encode(&xlStructData); err != nil {
b.Error(err)
}
l = int64(len(out))
out = nil
}
b.SetBytes(l)
}
func BenchmarkCodec_Marshal_S_Reuse(b *testing.B) {
var h codec.Handle = new(codec.JsonHandle)
var out []byte
enc := codec.NewEncoderBytes(&out, h)
var l int64
for i := 0; i < b.N; i++ {
enc.ResetBytes(&out)
if err := enc.Encode(&smallStructData); err != nil {
b.Error(err)
}
l = int64(len(out))
out = out[:0]
}
b.SetBytes(l)
}
func BenchmarkCodec_Marshal_M_Reuse(b *testing.B) {
var h codec.Handle = new(codec.JsonHandle)
var out []byte
enc := codec.NewEncoderBytes(&out, h)
var l int64
for i := 0; i < b.N; i++ {
enc.ResetBytes(&out)
if err := enc.Encode(&largeStructData); err != nil {
b.Error(err)
}
l = int64(len(out))
out = out[:0]
}
b.SetBytes(l)
}
func BenchmarkCodec_Marshal_L_Reuse(b *testing.B) {
var h codec.Handle = new(codec.JsonHandle)
var out []byte
enc := codec.NewEncoderBytes(&out, h)
var l int64
for i := 0; i < b.N; i++ {
enc.ResetBytes(&out)
if err := enc.Encode(&xlStructData); err != nil {
b.Error(err)
}
l = int64(len(out))
out = out[:0]
}
b.SetBytes(l)
}
/*
func BenchmarkCodec_Marshal_RequestFF(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := ffjson.MarshalFast(&largeStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
}
b.SetBytes(l)
}
func BenchmarkCodec_Marshal_SmallRequestFF(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := ffjson.MarshalFast(&smallStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
}
b.SetBytes(l)
}
func BenchmarkCodec_Marshal_RequestFFPool(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := ffjson.MarshalFast(&largeStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
ffjson.Pool(data)
}
b.SetBytes(l)
}
func BenchmarkCodec_Marshal_XLRequestFF(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := ffjson.MarshalFast(&xlStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
}
b.SetBytes(l)
}
func BenchmarkCodec_Marshal_XLRequestFFPool(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := ffjson.MarshalFast(&xlStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
ffjson.Pool(data)
}
b.SetBytes(l)
}
func BenchmarkCodec_Marshal_XLRequestFFPoolParallel(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := ffjson.MarshalFast(&xlStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
ffjson.Pool(data)
}
b.SetBytes(l)
}
func BenchmarkCodec_Marshal_RequestFFPoolParallel(b *testing.B) {
var l int64
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
data, err := ffjson.MarshalFast(&largeStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
ffjson.Pool(data)
}
})
b.SetBytes(l)
}
func BenchmarkCodec_Marshal_SmallRequestPoolFF(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := ffjson.MarshalFast(&smallStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
ffjson.Pool(data)
}
b.SetBytes(l)
}
func BenchmarkCodec_Marshal_SmallRequestPoolFFParallel(b *testing.B) {
var l int64
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
data, err := ffjson.MarshalFast(&smallStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
ffjson.Pool(data)
}
})
b.SetBytes(l)
}
func BenchmarkCodec_Marshal_SmallRequestFFParallel(b *testing.B) {
var l int64
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
data, err := ffjson.MarshalFast(&smallStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
}
})
b.SetBytes(l)
}
func BenchmarkCodec_Marshal_RequestFFParallel(b *testing.B) {
var l int64
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
data, err := ffjson.MarshalFast(&largeStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
}
})
b.SetBytes(l)
}
func BenchmarkCodec_Marshal_XLRequestFFParallel(b *testing.B) {
var l int64
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
data, err := ffjson.MarshalFast(&xlStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
}
})
b.SetBytes(l)
}
*/
File diff suppressed because it is too large Load Diff
+20 -20
View File
@@ -1,4 +1,4 @@
// +build !use_easyjson,!use_ffjson
// +build !use_easyjson,!use_ffjson,!use_codec
package benchmark
@@ -7,7 +7,7 @@ import (
"testing"
)
func BenchmarkUnmarshalRequestStd(b *testing.B) {
func BenchmarkStd_Unmarshal_M(b *testing.B) {
b.SetBytes(int64(len(largeStructText)))
for i := 0; i < b.N; i++ {
var s LargeStruct
@@ -18,7 +18,18 @@ func BenchmarkUnmarshalRequestStd(b *testing.B) {
}
}
func BenchmarkMarshalRequestStd(b *testing.B) {
func BenchmarkStd_Unmarshal_S(b *testing.B) {
for i := 0; i < b.N; i++ {
var s Entities
err := json.Unmarshal(smallStructText, &s)
if err != nil {
b.Error(err)
}
}
b.SetBytes(int64(len(smallStructText)))
}
func BenchmarkStd_Marshal_M(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := json.Marshal(&largeStructData)
@@ -30,7 +41,7 @@ func BenchmarkMarshalRequestStd(b *testing.B) {
b.SetBytes(l)
}
func BenchmarkMarshalXLRequestStd(b *testing.B) {
func BenchmarkStd_Marshal_L(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := json.Marshal(&xlStructData)
@@ -42,7 +53,7 @@ func BenchmarkMarshalXLRequestStd(b *testing.B) {
b.SetBytes(l)
}
func BenchmarkMarshalRequestStdParallel(b *testing.B) {
func BenchmarkStd_Marshal_M_Parallel(b *testing.B) {
var l int64
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
@@ -56,7 +67,7 @@ func BenchmarkMarshalRequestStdParallel(b *testing.B) {
b.SetBytes(l)
}
func BenchmarkMarshalXLRequestStdParallel(b *testing.B) {
func BenchmarkStd_Marshal_L_Parallel(b *testing.B) {
var l int64
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
@@ -70,18 +81,7 @@ func BenchmarkMarshalXLRequestStdParallel(b *testing.B) {
b.SetBytes(l)
}
func BenchmarkUnmarshalSmallRequestStd(b *testing.B) {
for i := 0; i < b.N; i++ {
var s Entities
err := json.Unmarshal(smallStructText, &s)
if err != nil {
b.Error(err)
}
}
b.SetBytes(int64(len(smallStructText)))
}
func BenchmarkMarshalSmallRequestStd(b *testing.B) {
func BenchmarkStd_Marshal_S(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := json.Marshal(&smallStructData)
@@ -93,7 +93,7 @@ func BenchmarkMarshalSmallRequestStd(b *testing.B) {
b.SetBytes(l)
}
func BenchmarkMarshalSmallRequestStdParallel(b *testing.B) {
func BenchmarkStd_Marshal_S_Parallel(b *testing.B) {
var l int64
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
@@ -107,7 +107,7 @@ func BenchmarkMarshalSmallRequestStdParallel(b *testing.B) {
b.SetBytes(l)
}
func BenchmarkMarshalToWriterStd(b *testing.B) {
func BenchmarkStd_Marshal_M_ToWriter(b *testing.B) {
enc := json.NewEncoder(&DummyWriter{})
for i := 0; i < b.N; i++ {
err := enc.Encode(&largeStructData)
+23 -23
View File
@@ -9,7 +9,7 @@ import (
"github.com/mailru/easyjson/jwriter"
)
func BenchmarkUnmarshalRequestEJ(b *testing.B) {
func BenchmarkEJ_Unmarshal_M(b *testing.B) {
b.SetBytes(int64(len(largeStructText)))
for i := 0; i < b.N; i++ {
var s LargeStruct
@@ -20,7 +20,19 @@ func BenchmarkUnmarshalRequestEJ(b *testing.B) {
}
}
func BenchmarkMarshalRequestEJ(b *testing.B) {
func BenchmarkEJ_Unmarshal_S(b *testing.B) {
b.SetBytes(int64(len(smallStructText)))
for i := 0; i < b.N; i++ {
var s Entities
err := s.UnmarshalJSON(smallStructText)
if err != nil {
b.Error(err)
}
}
}
func BenchmarkEJ_Marshal_M(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := easyjson.Marshal(&largeStructData)
@@ -32,7 +44,7 @@ func BenchmarkMarshalRequestEJ(b *testing.B) {
b.SetBytes(l)
}
func BenchmarkMarshalXLRequestEJ(b *testing.B) {
func BenchmarkEJ_Marshal_L(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := easyjson.Marshal(&xlStructData)
@@ -44,7 +56,7 @@ func BenchmarkMarshalXLRequestEJ(b *testing.B) {
b.SetBytes(l)
}
func BenchmarkMarshalXLRequestToWriterEJ(b *testing.B) {
func BenchmarkEJ_Marshal_L_ToWriter(b *testing.B) {
var l int64
out := &DummyWriter{}
for i := 0; i < b.N; i++ {
@@ -60,7 +72,7 @@ func BenchmarkMarshalXLRequestToWriterEJ(b *testing.B) {
b.SetBytes(l)
}
func BenchmarkMarshalRequestEJParallel(b *testing.B) {
func BenchmarkEJ_Marshal_M_Parallel(b *testing.B) {
b.SetBytes(int64(len(largeStructText)))
b.RunParallel(func(pb *testing.PB) {
@@ -73,7 +85,7 @@ func BenchmarkMarshalRequestEJParallel(b *testing.B) {
})
}
func BenchmarkMarshalToWriterEJ(b *testing.B) {
func BenchmarkEJ_Marshal_M_ToWriter(b *testing.B) {
var l int64
out := &DummyWriter{}
for i := 0; i < b.N; i++ {
@@ -89,7 +101,7 @@ func BenchmarkMarshalToWriterEJ(b *testing.B) {
b.SetBytes(l)
}
func BenchmarkMarshalRequestToWriterEJParallel(b *testing.B) {
func BenchmarkEJ_Marshal_M_ToWriter_Parallel(b *testing.B) {
out := &DummyWriter{}
b.RunParallel(func(pb *testing.PB) {
@@ -111,7 +123,7 @@ func BenchmarkMarshalRequestToWriterEJParallel(b *testing.B) {
}
func BenchmarkMarshalXLRequestEJParallel(b *testing.B) {
func BenchmarkEJ_Marshal_L_Parallel(b *testing.B) {
var l int64
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
@@ -125,7 +137,7 @@ func BenchmarkMarshalXLRequestEJParallel(b *testing.B) {
b.SetBytes(l)
}
func BenchmarkMarshalXLRequestToWriterEJParallel(b *testing.B) {
func BenchmarkEJ_Marshal_L_ToWriter_Parallel(b *testing.B) {
out := &DummyWriter{}
b.RunParallel(func(pb *testing.PB) {
var l int64
@@ -145,19 +157,7 @@ func BenchmarkMarshalXLRequestToWriterEJParallel(b *testing.B) {
})
}
func BenchmarkUnmarshalSmallRequestEJ(b *testing.B) {
b.SetBytes(int64(len(smallStructText)))
for i := 0; i < b.N; i++ {
var s Entities
err := s.UnmarshalJSON(smallStructText)
if err != nil {
b.Error(err)
}
}
}
func BenchmarkMarshalSmallRequestEJ(b *testing.B) {
func BenchmarkEJ_Marshal_S(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := smallStructData.MarshalJSON()
@@ -169,7 +169,7 @@ func BenchmarkMarshalSmallRequestEJ(b *testing.B) {
b.SetBytes(l)
}
func BenchmarkMarshalSmallRequestEJParallel(b *testing.B) {
func BenchmarkEJ_Marshal_S_Parallel(b *testing.B) {
var l int64
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
+96 -96
View File
@@ -8,7 +8,7 @@ import (
"github.com/pquerna/ffjson/ffjson"
)
func BenchmarkUnmarshalRequestFF(b *testing.B) {
func BenchmarkFF_Unmarshal_M(b *testing.B) {
b.SetBytes(int64(len(largeStructText)))
for i := 0; i < b.N; i++ {
var s LargeStruct
@@ -19,96 +19,7 @@ func BenchmarkUnmarshalRequestFF(b *testing.B) {
}
}
func BenchmarkMarshalRequestFF(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := ffjson.MarshalFast(&largeStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
}
b.SetBytes(l)
}
func BenchmarkMarshalSmallRequestFF(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := ffjson.MarshalFast(&smallStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
}
b.SetBytes(l)
}
func BenchmarkMarshalRequestFFPool(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := ffjson.MarshalFast(&largeStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
ffjson.Pool(data)
}
b.SetBytes(l)
}
func BenchmarkMarshalXLRequestFF(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := ffjson.MarshalFast(&xlStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
}
b.SetBytes(l)
}
func BenchmarkMarshalXLRequestFFPool(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := ffjson.MarshalFast(&xlStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
ffjson.Pool(data)
}
b.SetBytes(l)
}
func BenchmarkMarshalXLRequestFFPoolParallel(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := ffjson.MarshalFast(&xlStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
ffjson.Pool(data)
}
b.SetBytes(l)
}
func BenchmarkMarshalRequestFFPoolParallel(b *testing.B) {
var l int64
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
data, err := ffjson.MarshalFast(&largeStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
ffjson.Pool(data)
}
})
b.SetBytes(l)
}
func BenchmarkUnmarshalSmallRequestFF(b *testing.B) {
func BenchmarkFF_Unmarshal_S(b *testing.B) {
for i := 0; i < b.N; i++ {
var s Entities
err := ffjson.UnmarshalFast(smallStructText, &s)
@@ -119,7 +30,96 @@ func BenchmarkUnmarshalSmallRequestFF(b *testing.B) {
b.SetBytes(int64(len(smallStructText)))
}
func BenchmarkMarshalSmallRequestPoolFF(b *testing.B) {
func BenchmarkFF_Marshal_M(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := ffjson.MarshalFast(&largeStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
}
b.SetBytes(l)
}
func BenchmarkFF_Marshal_S(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := ffjson.MarshalFast(&smallStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
}
b.SetBytes(l)
}
func BenchmarkFF_Marshal_M_Pool(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := ffjson.MarshalFast(&largeStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
ffjson.Pool(data)
}
b.SetBytes(l)
}
func BenchmarkFF_Marshal_L(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := ffjson.MarshalFast(&xlStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
}
b.SetBytes(l)
}
func BenchmarkFF_Marshal_L_Pool(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := ffjson.MarshalFast(&xlStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
ffjson.Pool(data)
}
b.SetBytes(l)
}
func BenchmarkFF_Marshal_L_Pool_Parallel(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := ffjson.MarshalFast(&xlStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
ffjson.Pool(data)
}
b.SetBytes(l)
}
func BenchmarkFF_Marshal_M_Pool_Parallel(b *testing.B) {
var l int64
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
data, err := ffjson.MarshalFast(&largeStructData)
if err != nil {
b.Error(err)
}
l = int64(len(data))
ffjson.Pool(data)
}
})
b.SetBytes(l)
}
func BenchmarkFF_Marshal_S_Pool(b *testing.B) {
var l int64
for i := 0; i < b.N; i++ {
data, err := ffjson.MarshalFast(&smallStructData)
@@ -132,7 +132,7 @@ func BenchmarkMarshalSmallRequestPoolFF(b *testing.B) {
b.SetBytes(l)
}
func BenchmarkMarshalSmallRequestPoolFFParallel(b *testing.B) {
func BenchmarkFF_Marshal_S_Pool_Parallel(b *testing.B) {
var l int64
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
@@ -147,7 +147,7 @@ func BenchmarkMarshalSmallRequestPoolFFParallel(b *testing.B) {
b.SetBytes(l)
}
func BenchmarkMarshalSmallRequestFFParallel(b *testing.B) {
func BenchmarkFF_Marshal_S_Parallel(b *testing.B) {
var l int64
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
@@ -161,7 +161,7 @@ func BenchmarkMarshalSmallRequestFFParallel(b *testing.B) {
b.SetBytes(l)
}
func BenchmarkMarshalRequestFFParallel(b *testing.B) {
func BenchmarkFF_Marshal_M_Parallel(b *testing.B) {
var l int64
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
@@ -175,7 +175,7 @@ func BenchmarkMarshalRequestFFParallel(b *testing.B) {
b.SetBytes(l)
}
func BenchmarkMarshalXLRequestFFParallel(b *testing.B) {
func BenchmarkFF_Marshal_L_Parallel(b *testing.B) {
var l int64
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {