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
Ivan Valdes 2024-04-12 15:14:56 -07:00
parent ee11a09015
commit 43c669db88
No known key found for this signature in database
GPG Key ID: 4037D37741ED0CC5
1 changed files with 49 additions and 22 deletions

View File

@ -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 {