Skip to content

Instantly share code, notes, and snippets.

@jamesls
Created April 21, 2013 21:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jamesls/5431197 to your computer and use it in GitHub Desktop.
Save jamesls/5431197 to your computer and use it in GitHub Desktop.
Semidbm performance
Was trying to optimize sequential writes (fill_sequential benchmark). Showing:
* Current released version
* performance regression with python3 support
* Better performance with binary file format
Benchmark params:
100,000 keys, key size 16 bytes, value size 100 bytes
Current release (v0.3.1):
((v0.3.1) %) $ scripts/benchmark -d semidbm -n 100000
Generating random data.
Benchmarking: <module 'semidbm' from 'semidbm/semidbm/__init__.pyc'>
num_keys : 100000
key_size : 16
value_size: 100
fill_sequential : time: 1.522, micros/ops: 15.223, ops/s: 65691.412, MB/s: 7.267
read_hot : time: 0.464, micros/ops: 4.643, ops/s: 215398.489, MB/s: 23.829
read_sequential : time: 0.441, micros/ops: 4.407, ops/s: 226909.248, MB/s: 25.102
read_random : time: 0.492, micros/ops: 4.922, ops/s: 203189.662, MB/s: 22.478
delete_sequential : time: 1.062, micros/ops: 10.619, ops/s: 94175.000, MB/s: 10.418
SLOW version, after python3 support and str/bytes awesomeness:
((ee8ccbb...) %) $ scripts/benchmark -d semidbm -n 100000
Generating random data.
('Benchmarking:', <module 'semidbm' from 'semidbm/semidbm/__init__.pyc'>)
num_keys : 100000
key_size : 16
value_size: 100
fill_sequential : time: 2.025, micros/ops: 20.247, ops/s: 49389.226, MB/s: 5.464
read_cold : time: 0.436, micros/ops: 4.358, ops/s: 229479.965, MB/s: 25.387
read_sequential : time: 0.429, micros/ops: 4.291, ops/s: 233051.329, MB/s: 25.782
read_hot : time: 0.437, micros/ops: 4.366, ops/s: 229017.855, MB/s: 25.335
read_random : time: 0.486, micros/ops: 4.858, ops/s: 205866.323, MB/s: 22.774
delete_sequential : time: 1.111, micros/ops: 11.114, ops/s: 89976.190, MB/s: 9.954
Binary file format (master @ 0dca44b)
(master % u=) $ scripts/benchmark -d semidbm -n 100000
Generating random data.
('Benchmarking:', <module 'semidbm' from 'semidbm/semidbm/__init__.pyc'>)
num_keys : 100000
key_size : 16
value_size: 100
fill_sequential : time: 1.260, micros/ops: 12.604, ops/s: 79340.204, MB/s: 8.777
read_cold : time: 0.403, micros/ops: 4.031, ops/s: 248049.663, MB/s: 27.441
read_sequential : time: 0.408, micros/ops: 4.081, ops/s: 245043.917, MB/s: 27.108
read_hot : time: 0.400, micros/ops: 3.998, ops/s: 250131.885, MB/s: 27.671
read_random : time: 0.456, micros/ops: 4.558, ops/s: 219395.018, MB/s: 24.271
delete_sequential : time: 1.015, micros/ops: 10.147, ops/s: 98549.056, MB/s: 10.902
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment