Skip to content

Commit e264fad

Browse files
authored
Add bebop to benchmarks (alecthomas#91)
1 parent a3a4298 commit e264fad

File tree

7 files changed

+321
-102
lines changed

7 files changed

+321
-102
lines changed

Makefile

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# This is necessary due to the use of two conflicting generator commands for capnproto
22
.NOTPARALLEL:
33

4-
all: Colfer.go FlatBufferA.go msgp_gen.go structdef-gogo.pb.go structdef.pb.go structdef.capnp.go structdef.capnp2.go gencode.schema.gen.go gencode-unsafe.schema.gen.go structdefxdr_generated.go
4+
all: Colfer.go FlatBufferA.go msgp_gen.go structdef-gogo.pb.go structdef.pb.go structdef.capnp.go structdef.capnp2.go gencode.schema.gen.go gencode-unsafe.schema.gen.go structdefxdr_generated.go structdef-bebop.go
55

66
Colfer.go:
77
go run github.com/pascaldekloe/colfer/cmd/colf go
@@ -43,6 +43,9 @@ gencode-unsafe.schema.gen.go: gencode-unsafe.schema
4343
structdefxdr_generated.go: structdefxdr.go
4444
go run github.com/calmh/xdr/cmd/genxdr -o structdefxdr_generated.go structdefxdr.go
4545

46+
structdef-bebop.go:
47+
bebopc-go -i structdef-bebop.bop -o structdef-bebop.go --package goserbench
48+
4649
.PHONY: clean
4750
clean:
4851
rm -f Colfer.go FlatBufferA.go msgp_gen.go structdef-gogo.pb.go structdef.pb.go structdef.capnp.go structdef.capnp2.go gencode.schema.gen.go gencode-unsafe.schema.gen.go structdefxdr_generated.go
@@ -70,3 +73,5 @@ install:
7073
go get -u github.com/pascaldekloe/colfer/cmd/colf
7174
go get -u github.com/calmh/xdr
7275
go get -u github.com/niubaoshu/gotiny
76+
go get -u github.com/200sc/bebop
77+
go get -u github.com/200sc/bebop/main/bebopc-go

README.md

Lines changed: 106 additions & 101 deletions
Large diffs are not rendered by default.

go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ go 1.13
44

55
require (
66
github.com/Hatch1fy/errors v0.1.0 // indirect
7+
github.com/200sc/bebop v0.0.8
8+
github.com/DataDog/zstd v1.4.5 // indirect
79
github.com/Sereal/Sereal v0.0.0-20190618215532-0b8ac451a863
810
github.com/alecthomas/binary v0.0.0-20171101084825-6e8df1b1fb9d
911
github.com/andyleap/gencode v0.0.0-20171124163308-e1423834d4b4 // indirect

go.sum

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
github.com/Hatch1fy/errors v0.1.0 h1:O0eV+wlv/uF++/IQFxPaTVQOCHxzEXFFX0cMrIs8GSs=
22
github.com/Hatch1fy/errors v0.1.0/go.mod h1:ghvTU0wQ49AH7DcAfdKmWjBDjgEOoc1ltdPhDlGPz7w=
3+
github.com/200sc/bebop v0.0.8 h1:rBxUorlPWyUjR+J99PaYcjc9CZYCdeDg/Na+HbznPdI=
4+
github.com/200sc/bebop v0.0.8/go.mod h1:fCmYqE/nuhgRpN0ttqh913jWZH5yKpv0o8009Tke8jM=
5+
github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ=
6+
github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
37
github.com/Sereal/Sereal v0.0.0-20190618215532-0b8ac451a863 h1:BRrxwOZBolJN4gIwvZMJY1tzqBvQgpaZiQRuIDD40jM=
48
github.com/Sereal/Sereal v0.0.0-20190618215532-0b8ac451a863/go.mod h1:D0JMgToj/WdxCgd30Kc1UcA9E+WdZoJqeVOuYW7iTBM=
59
github.com/alecthomas/binary v0.0.0-20171101084825-6e8df1b1fb9d h1:ndgr53uGotk3W0l6njh0jusaJw8+ZwZn8EKnx8QauJk=
@@ -118,6 +122,7 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
118122
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635 h1:2eB4G6bDQDeP69ZXbOKC00S2Kf6TIiRS+DzfKsKeQU0=
119123
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
120124
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
125+
google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM=
121126
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
122127
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
123128
gopkg.in/linkedin/goavro.v1 v1.0.5 h1:BJa69CDh0awSsLUmZ9+BowBdokpduDZSM9Zk8oKHfN4=

serialization_benchmarks_test.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1423,3 +1423,66 @@ func BenchmarkMumUnmarshal(b *testing.B) {
14231423
s := newMumSerializer()
14241424
benchUnmarshal(b, s)
14251425
}
1426+
1427+
// github.com/200sc/bebop
1428+
1429+
func generateBebopA() []*BebopBufA {
1430+
a := make([]*BebopBufA, 0, 1000)
1431+
for i := 0; i < 1000; i++ {
1432+
a = append(a, &BebopBufA{
1433+
Name: randString(16),
1434+
// bebop does support times, but as 100-nanosecond ticks, losing some precision
1435+
BirthDay: uint64(time.Now().UnixNano()),
1436+
Phone: randString(10),
1437+
Siblings: rand.Int31n(5),
1438+
Spouse: rand.Intn(2) == 1,
1439+
Money: rand.Float64(),
1440+
})
1441+
}
1442+
return a
1443+
}
1444+
1445+
func BenchmarkBebopMarshal(b *testing.B) {
1446+
data := generateBebopA()
1447+
b.ReportAllocs()
1448+
b.ResetTimer()
1449+
var serialSize int
1450+
for i := 0; i < b.N; i++ {
1451+
out := data[rand.Intn(len(data))].MarshalBebop()
1452+
serialSize += len(out)
1453+
}
1454+
b.ReportMetric(float64(serialSize)/float64(b.N), "B/serial")
1455+
}
1456+
1457+
func BenchmarkBebopUnmarshal(b *testing.B) {
1458+
b.StopTimer()
1459+
data := generateBebopA()
1460+
ser := make([][]byte, len(data))
1461+
var serialSize int
1462+
for i, d := range data {
1463+
ser[i] = d.MarshalBebop()
1464+
serialSize += len(ser[i])
1465+
}
1466+
b.ReportMetric(float64(serialSize)/float64(len(data)), "B/serial")
1467+
buf := new(bytes.Buffer)
1468+
buf.Grow(100)
1469+
b.ReportAllocs()
1470+
b.StartTimer()
1471+
1472+
for i := 0; i < b.N; i++ {
1473+
n := rand.Intn(len(ser))
1474+
o := BebopBufA{}
1475+
err := o.UnmarshalBebop(ser[n])
1476+
if err != nil {
1477+
b.Fatalf("bebop failed to unmarshal: %s (%s)", err, ser[n])
1478+
}
1479+
// Validate unmarshalled data.
1480+
if validate != "" {
1481+
i := data[n]
1482+
correct := o.Name == i.Name && o.Phone == i.Phone && o.Siblings == i.Siblings && o.Spouse == i.Spouse && o.Money == i.Money && o.BirthDay == i.BirthDay
1483+
if !correct {
1484+
b.Fatalf("unmarshaled object differed:\n%v\n%v", i, o)
1485+
}
1486+
}
1487+
}
1488+
}

structdef-bebop.bop

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
struct BebopBufA {
2+
string name;
3+
uint64 birthDay;
4+
string phone;
5+
int32 siblings;
6+
bool spouse;
7+
float64 money;
8+
}

structdef-bebop.go

Lines changed: 131 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)