aboutsummaryrefslogtreecommitdiff
path: root/bench.go
diff options
context:
space:
mode:
authorSteven Normore <snormore@gmail.com>2014-04-11 13:55:14 +0000
committerBen Johnson <benbjohnson@yahoo.com>2014-04-18 21:44:27 -0500
commitfdde1bcb0624ce5232bf0f3226a2f47fd5a24cb3 (patch)
treeb2c9af8e1ed0076c8e0536dcc2f9a53aa811a5e0 /bench.go
parentinitial bench and generate command structure (diff)
downloaddedo-fdde1bcb0624ce5232bf0f3226a2f47fd5a24cb3.tar.gz
dedo-fdde1bcb0624ce5232bf0f3226a2f47fd5a24cb3.tar.xz
moar bench package
Diffstat (limited to 'bench.go')
-rw-r--r--bench.go55
1 files changed, 55 insertions, 0 deletions
diff --git a/bench.go b/bench.go
new file mode 100644
index 0000000..16e4d7a
--- /dev/null
+++ b/bench.go
@@ -0,0 +1,55 @@
+package bolt
+
+import (
+ "sync"
+ "testing"
+)
+
+const (
+ BenchReadMode = "read"
+ BenchWriteMode = "write"
+ BenchSequentialTraversal = "sequential"
+ BenchRandomTraversal = "random"
+)
+
+type Benchmark struct {
+ InputPath string
+ ReadWriteMode string
+ TraversalPattern string
+ Parallelism int
+}
+
+func NewBenchmark(inputPath, readWriteMode, traversalPattern string, parallelism int) *Benchmark {
+ return &Benchmark{inputPath, readWriteMode, traversalPattern, parallelism}
+}
+
+func (bm *Benchmark) Run(b *testing.B) {
+
+ // Open the database.
+ db, err := Open(bm.InputPath, 0600)
+ if err != nil {
+ panic(err)
+ return
+ }
+ defer db.Close()
+
+ b.ResetTimer()
+
+ // Keep running a fixed number of parallel reads until we run out of time.
+ for i := 0; i < b.N; i++ {
+ var wg sync.WaitGroup
+ for j := 0; j < bm.Parallelism; j++ {
+ wg.Add(1)
+ go func() {
+ if bm.TraversalPattern == BenchRandomTraversal {
+ // Perform all reads in random order.
+ // indexes := rand.Perm(total)
+ } else {
+ // Perform all reads in sequential order.
+ }
+ wg.Done()
+ }()
+ }
+ wg.Wait()
+ }
+}