diff options
author | Steven Normore <snormore@gmail.com> | 2014-04-11 13:55:14 +0000 |
---|---|---|
committer | Ben Johnson <benbjohnson@yahoo.com> | 2014-04-18 21:44:27 -0500 |
commit | fdde1bcb0624ce5232bf0f3226a2f47fd5a24cb3 (patch) | |
tree | b2c9af8e1ed0076c8e0536dcc2f9a53aa811a5e0 /bench.go | |
parent | initial bench and generate command structure (diff) | |
download | dedo-fdde1bcb0624ce5232bf0f3226a2f47fd5a24cb3.tar.gz dedo-fdde1bcb0624ce5232bf0f3226a2f47fd5a24cb3.tar.xz |
moar bench package
Diffstat (limited to 'bench.go')
-rw-r--r-- | bench.go | 55 |
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() + } +} |