Skip to content

1.6.0 perf regression compared to 1.5.3? #939

@burmanm

Description

@burmanm

What version of Go are you using (go version)?

$ go version
go version go1.12.6 linux/amd64

What version of Badger are you using?

1.5.3 and 1.6.0

Does this issue reproduce with the latest master?

What are the hardware specifications of the machine (RAM, OS, Disk)?

Haswell & Sandy Bridge, both tested. Linux 5.1.11-200.fc29 and 5.1.15-1-MANJARO. 12GB / 16GB machines, SSDs in both.

What did you do?

Port Jaeger from 1.5.3 to 1.6.0 and ran benchmark.

What did you expect to see?

Identical performance.

What did you see instead?

Performance was 50% worse with 1.6.0 compared to 1.5.3.

The code writes multiple spans in a single Update transaction:

entriesToStore := make([]*badger.Entry, 0, len(span.Tags)+4+len(span.Process.Tags)+len(span.Logs)*4)

// Removed the code that makes those entries

	err = w.store.Update(func(txn *badger.Txn) error {
		// Write the entries
		for i := range entriesToStore {
			err = txn.SetEntry(entriesToStore[i])
			if err != nil {
				// Most likely primary key conflict, but let the caller check this
				return err
			}
		}
		return nil
	})

The database is initialized as follows (1.6.0 version):

dir, _ := ioutil.TempDir("", "badger")
opts := badger.DefaultOptions(dir).WithValueDir(dir).WithSyncWrites(false)

What I'm seeing with 1.5.3 is 100k writes (100k transactions, not 100k keys) done in 10 seconds and with 1.6.0 it takes 15 seconds. I'm not entirely sure what's the cause here, there's no single reason in the profile outputs (multiple things are slower, such as Txn.Commit). Both versions use the same amount of time in the syscalls, so I can't see any difference in the disk section either.

I assume the point of those newer faster APIs wasn't to require using them to get same performance as older versions?

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/performancePerformance related issues.kind/questionSomething requiring a responsepriority/P1Serious issue that requires eventual attention (can wait a bit)status/acceptedWe accept to investigate or work on it.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions