Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

don't check current key in DBIter::Next() #679

Merged
merged 1 commit into from
May 4, 2019

Conversation

kylezh
Copy link
Contributor

@kylezh kylezh commented Apr 25, 2019

When iter_ is pointing to current key, we can safely move to the next
key to avoid checking current key, which is of course not necessary.

Benchmark shows that 'readseq' has about 8% performance improvement.

Without patch:

./db_bench --benchmarks=readseq --num=$((4<<20)) --db=/tmp/db --use_existing_db=1
LevelDB: version 1.21
Date: Thu Apr 25 09:37:21 2019
CPU: 32 * Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
CPUCache: 20480 KB
Keys: 16 bytes each
Values: 100 bytes each (50 bytes after compression)
Entries: 4194304
RawSize: 464.0 MB (estimated)
FileSize: 264.0 MB (estimated)


readseq : 0.196 micros/op; 565.7 MB/s

With patch:

./db_bench --benchmarks=readseq --num=$((4<<20)) --db=/tmp/db --use_existing_db=1
LevelDB: version 1.21
Date: Thu Apr 25 09:38:20 2019
CPU: 32 * Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
CPUCache: 20480 KB
Keys: 16 bytes each
Values: 100 bytes each (50 bytes after compression)
Entries: 4194304
RawSize: 464.0 MB (estimated)
FileSize: 264.0 MB (estimated)


readseq : 0.181 micros/op; 612.3 MB/s

Signed-off-by: Kyle Zhang kyle@smartx.com

When iter_ is pointing to current key, we can safely move to the next
key to avoid checking current key, which is of course not necessary.

Benchmark shows that 'readseq' has about 8% performance improvement.

Without patch:

>./db_bench --benchmarks=readseq --num=$((4<<20)) --db=/tmp/db --use_existing_db=1
LevelDB:    version 1.21
Date:       Thu Apr 25 09:37:21 2019
CPU:        32 * Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
CPUCache:   20480 KB
Keys:       16 bytes each
Values:     100 bytes each (50 bytes after compression)
Entries:    4194304
RawSize:    464.0 MB (estimated)
FileSize:   264.0 MB (estimated)
------------------------------------------------
readseq      :       0.196 micros/op;  565.7 MB/s

With patch:

>./db_bench --benchmarks=readseq --num=$((4<<20)) --db=/tmp/db --use_existing_db=1
LevelDB:    version 1.21
Date:       Thu Apr 25 09:38:20 2019
CPU:        32 * Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
CPUCache:   20480 KB
Keys:       16 bytes each
Values:     100 bytes each (50 bytes after compression)
Entries:    4194304
RawSize:    464.0 MB (estimated)
FileSize:   264.0 MB (estimated)
------------------------------------------------
readseq      :       0.181 micros/op;  612.3 MB/s

Signed-off-by: Kyle Zhang <kyle@smartx.com>
@ghemawat
Copy link
Contributor

Thanks. I looked carefully and this looks correct to me.

@kylezh
Copy link
Contributor Author

kylezh commented May 4, 2019

@cmumford Could you take some time to look at this patch?

@pwnall pwnall merged commit d3d1c8a into google:master May 4, 2019
pwnall added a commit that referenced this pull request May 4, 2019
@pwnall
Copy link
Member

pwnall commented May 5, 2019

@kylezh Thank you for your contribution!

@cmumford brought this change in the internal repository. I just ran the commands that brought github back in sync.

maochongxin pushed a commit to maochongxin/leveldb that referenced this pull request Jul 21, 2022
The windows SDK headers don't have self-consistent casing anyway,
and many projects consistently use lowercase for them, in order
to fix crosscompilation with mingw headers.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants