mirror of https://github.com/etcd-io/bbolt.git
bench: aggregate adding completed ops for reads
Currently, the completed operations are added to the read benchmarks one by one, and given that each operation is atomic, it impacts the benchmark's performance. Change to update only once per cycle, with the total number of reads. Signed-off-by: Ivan Valdes <ivan@vald.es>pull/721/head
parent
ee11a09015
commit
43c669db88
|
@ -1380,13 +1380,22 @@ func (cmd *benchCommand) runReadsSequential(db *bolt.DB, options *BenchOptions,
|
||||||
|
|
||||||
for {
|
for {
|
||||||
numReads := int64(0)
|
numReads := int64(0)
|
||||||
c := tx.Bucket(benchBucketName).Cursor()
|
err := func() error {
|
||||||
for k, v := c.First(); k != nil; k, v = c.Next() {
|
defer func() { results.AddCompletedOps(numReads) }()
|
||||||
numReads++
|
|
||||||
results.AddCompletedOps(1)
|
c := tx.Bucket(benchBucketName).Cursor()
|
||||||
if v == nil {
|
for k, v := c.First(); k != nil; k, v = c.Next() {
|
||||||
return ErrInvalidValue
|
numReads++
|
||||||
|
if v == nil {
|
||||||
|
return ErrInvalidValue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if options.WriteMode == "seq" && numReads != options.Iterations {
|
if options.WriteMode == "seq" && numReads != options.Iterations {
|
||||||
|
@ -1409,14 +1418,23 @@ func (cmd *benchCommand) runReadsRandom(db *bolt.DB, options *BenchOptions, keys
|
||||||
|
|
||||||
for {
|
for {
|
||||||
numReads := int64(0)
|
numReads := int64(0)
|
||||||
b := tx.Bucket(benchBucketName)
|
err := func() error {
|
||||||
for _, key := range keys {
|
defer func() { results.AddCompletedOps(numReads) }()
|
||||||
v := b.Get(key.key)
|
|
||||||
numReads++
|
b := tx.Bucket(benchBucketName)
|
||||||
results.AddCompletedOps(1)
|
for _, key := range keys {
|
||||||
if v == nil {
|
v := b.Get(key.key)
|
||||||
return ErrInvalidValue
|
numReads++
|
||||||
|
if v == nil {
|
||||||
|
return ErrInvalidValue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if options.WriteMode == "seq" && numReads != options.Iterations {
|
if options.WriteMode == "seq" && numReads != options.Iterations {
|
||||||
|
@ -1441,11 +1459,11 @@ func (cmd *benchCommand) runReadsSequentialNested(db *bolt.DB, options *BenchOpt
|
||||||
numReads := int64(0)
|
numReads := int64(0)
|
||||||
var top = tx.Bucket(benchBucketName)
|
var top = tx.Bucket(benchBucketName)
|
||||||
if err := top.ForEach(func(name, _ []byte) error {
|
if err := top.ForEach(func(name, _ []byte) error {
|
||||||
|
defer func() { results.AddCompletedOps(numReads) }()
|
||||||
if b := top.Bucket(name); b != nil {
|
if b := top.Bucket(name); b != nil {
|
||||||
c := b.Cursor()
|
c := b.Cursor()
|
||||||
for k, v := c.First(); k != nil; k, v = c.Next() {
|
for k, v := c.First(); k != nil; k, v = c.Next() {
|
||||||
numReads++
|
numReads++
|
||||||
results.AddCompletedOps(1)
|
|
||||||
if v == nil {
|
if v == nil {
|
||||||
return ErrInvalidValue
|
return ErrInvalidValue
|
||||||
}
|
}
|
||||||
|
@ -1476,16 +1494,25 @@ func (cmd *benchCommand) runReadsRandomNested(db *bolt.DB, options *BenchOptions
|
||||||
|
|
||||||
for {
|
for {
|
||||||
numReads := int64(0)
|
numReads := int64(0)
|
||||||
var top = tx.Bucket(benchBucketName)
|
err := func() error {
|
||||||
for _, nestedKey := range nestedKeys {
|
defer func() { results.AddCompletedOps(numReads) }()
|
||||||
if b := top.Bucket(nestedKey.bucket); b != nil {
|
|
||||||
v := b.Get(nestedKey.key)
|
var top = tx.Bucket(benchBucketName)
|
||||||
numReads++
|
for _, nestedKey := range nestedKeys {
|
||||||
results.AddCompletedOps(1)
|
if b := top.Bucket(nestedKey.bucket); b != nil {
|
||||||
if v == nil {
|
v := b.Get(nestedKey.key)
|
||||||
return ErrInvalidValue
|
numReads++
|
||||||
|
if v == nil {
|
||||||
|
return ErrInvalidValue
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if options.WriteMode == "seq-nest" && numReads != options.Iterations {
|
if options.WriteMode == "seq-nest" && numReads != options.Iterations {
|
||||||
|
|
Loading…
Reference in New Issue