...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package wal
16
17 import (
18 "io/ioutil"
19 "os"
20 "testing"
21
22 "go.uber.org/zap"
23
24 "go.etcd.io/etcd/raft/v3/raftpb"
25 )
26
27 func BenchmarkWrite100EntryWithoutBatch(b *testing.B) { benchmarkWriteEntry(b, 100, 0) }
28 func BenchmarkWrite100EntryBatch10(b *testing.B) { benchmarkWriteEntry(b, 100, 10) }
29 func BenchmarkWrite100EntryBatch100(b *testing.B) { benchmarkWriteEntry(b, 100, 100) }
30 func BenchmarkWrite100EntryBatch500(b *testing.B) { benchmarkWriteEntry(b, 100, 500) }
31 func BenchmarkWrite100EntryBatch1000(b *testing.B) { benchmarkWriteEntry(b, 100, 1000) }
32
33 func BenchmarkWrite1000EntryWithoutBatch(b *testing.B) { benchmarkWriteEntry(b, 1000, 0) }
34 func BenchmarkWrite1000EntryBatch10(b *testing.B) { benchmarkWriteEntry(b, 1000, 10) }
35 func BenchmarkWrite1000EntryBatch100(b *testing.B) { benchmarkWriteEntry(b, 1000, 100) }
36 func BenchmarkWrite1000EntryBatch500(b *testing.B) { benchmarkWriteEntry(b, 1000, 500) }
37 func BenchmarkWrite1000EntryBatch1000(b *testing.B) { benchmarkWriteEntry(b, 1000, 1000) }
38
39 func benchmarkWriteEntry(b *testing.B, size int, batch int) {
40 p, err := ioutil.TempDir(os.TempDir(), "waltest")
41 if err != nil {
42 b.Fatal(err)
43 }
44 defer os.RemoveAll(p)
45
46 w, err := Create(zap.NewExample(), p, []byte("somedata"))
47 if err != nil {
48 b.Fatalf("err = %v, want nil", err)
49 }
50 data := make([]byte, size)
51 for i := 0; i < size; i++ {
52 data[i] = byte(i)
53 }
54 e := &raftpb.Entry{Data: data}
55
56 b.ResetTimer()
57 n := 0
58 b.SetBytes(int64(e.Size()))
59 for i := 0; i < b.N; i++ {
60 err := w.saveEntry(e)
61 if err != nil {
62 b.Fatal(err)
63 }
64 n++
65 if n > batch {
66 w.sync()
67 n = 0
68 }
69 }
70 }
71
View as plain text