]>
git.ozlabs.org Git - ccan/log 
Rusty Russell  [Wed, 1 Dec 2010 12:38:52 +0000  (23:08 +1030)] 
tdb2: remove truncated bit.
Rusty Russell  [Wed, 1 Dec 2010 12:36:12 +0000  (23:06 +1030)] 
tdb2: use direct access for tdb_read_off/tdb_write_off
This is one case where getting rid of tdb_get() cost us.  Also, we
add more read-only checks.
Before we removed tdb_get:
Adding 
1000000  records:  6480 ns (
59900296  bytes)
Finding 
1000000  records:  2839 ns (
59900296  bytes)
Missing 
1000000  records:  2485 ns (
59900296  bytes)
Traversing 
1000000  records:  2598 ns (
59900296  bytes)
Deleting 
1000000  records:  5342 ns (
59900296  bytes)
Re-adding 
1000000  records:  5613 ns (
59900296  bytes)
Appending 
1000000  records:  12194 ns (
93594224  bytes)
Churning 
1000000  records:  14549 ns (
93594224  bytes)
Now:
Adding 
1000000  records:  6307 ns (
59900296  bytes)
Finding 
1000000  records:  2801 ns (
59900296  bytes)
Missing 
1000000  records:  2515 ns (
59900296  bytes)
Traversing 
1000000  records:  2579 ns (
59900296  bytes)
Deleting 
1000000  records:  5225 ns (
59900296  bytes)
Re-adding 
1000000  records:  5878 ns (
59900296  bytes)
Appending 
1000000  records:  12665 ns (
93594224  bytes)
Churning 
1000000  records:  16090 ns (
93594224  bytes)
Rusty Russell  [Wed, 1 Dec 2010 12:34:50 +0000  (23:04 +1030)] 
tdb2: remove tdb_get()
We have four internal helpers for reading data from the database:
1) tdb_read_convert() - read (and convert) into a buffer.
2) tdb_read_off() - read (and convert) and offset.
3) tdb_access_read() - malloc or direct access to the database.
4) tdb_get() - copy into a buffer or direct access to the database.
The last one doesn't really buy us anything, so remove it (except for
tdb_read_off/tdb_write_off, see next patch).
Before:
Adding 
1000000  records:  6480 ns (
59900296  bytes)
Finding 
1000000  records:  2839 ns (
59900296  bytes)
Missing 
1000000  records:  2485 ns (
59900296  bytes)
Traversing 
1000000  records:  2598 ns (
59900296  bytes)
Deleting 
1000000  records:  5342 ns (
59900296  bytes)
Re-adding 
1000000  records:  5613 ns (
59900296  bytes)
Appending 
1000000  records:  12194 ns (
93594224  bytes)
Churning 
1000000  records:  14549 ns (
93594224  bytes)
After:
Adding 
1000000  records:  6497 ns (
59900296  bytes)
Finding 
1000000  records:  2854 ns (
59900296  bytes)
Missing 
1000000  records:  2563 ns (
59900296  bytes)
Traversing 
1000000  records:  2735 ns (
59900296  bytes)
Deleting 
1000000  records:  11357 ns (
59900296  bytes)
Re-adding 
1000000  records:  8145 ns (
59900296  bytes)
Appending 
1000000  records:  10939 ns (
93594224  bytes)
Churning 
1000000  records:  18479 ns (
93594224  bytes)
Rusty Russell  [Tue, 23 Nov 2010 02:21:18 +0000  (12:51 +1030)] 
tdb2: trivial optimization for free list
Rusty Russell  [Wed, 1 Dec 2010 13:06:14 +0000  (23:36 +1030)] 
tdb2: Add stats attribute.
Rusty Russell  [Mon, 22 Nov 2010 02:13:00 +0000  (12:43 +1030)] 
tdb2: relax locking to allow two free list locks at once
As long as they are in descending order.  This prevents the common case of:
1) Grab lock for bucket.
2) Remove entry from bucket.
3) Drop lock for bucket.
4) Grab lock for bucket for leftover.
5) Add leftover entry to bucket.
6) Drop lock for leftover bucket.
In particular it's quite common for the leftover bucket to be the same
as the entry bucket (when it's the largest bucket); if it's not, we are
no worse than before.
Current results of speed test:
$ ./speed 
1000000 
Adding 
1000000  records:  13194 ns (
60083192  bytes)
Finding 
1000000  records:  2438 ns (
60083192  bytes)
Traversing 
1000000  records:  2167 ns (
60083192  bytes)
Deleting 
1000000  records:  9265 ns (
60083192  bytes)
Re-adding 
1000000  records:  10241 ns (
60083192  bytes)
Appending 
1000000  records:  17692 ns (
93879992  bytes)
Churning 
1000000  records:  26077 ns (
93879992  bytes)
Previous:
$ ./speed 
1000000 
Adding 
1000000  records:  23210 ns (
59193360  bytes)
Finding 
1000000  records:  2387 ns (
59193360  bytes)
Traversing 
1000000  records:  2150 ns (
59193360  bytes)
Deleting 
1000000  records:  13392 ns (
59193360  bytes)
Re-adding 
1000000  records:  11546 ns (
59193360  bytes)
Appending 
1000000  records:  29327 ns (
91193360  bytes)
Churning 
1000000  records:  33026 ns (
91193360  bytes)
Rusty Russell  [Mon, 22 Nov 2010 01:20:58 +0000  (11:50 +1030)] 
tdb2: use expansion heuristics from tdb1
This reduces the amount of expansion we do.
Before:
./speed 
1000000 
Adding 
1000000  records:  23210 ns (
59193360  bytes)
Finding 
1000000  records:  2387 ns (
59193360  bytes)
Traversing 
1000000  records:  2150 ns (
59193360  bytes)
Deleting 
1000000  records:  13392 ns (
59193360  bytes)
Re-adding 
1000000  records:  11546 ns (
59193360  bytes)
Appending 
1000000  records:  29327 ns (
91193360  bytes)
Churning 
1000000  records:  33026 ns (
91193360  bytes)
After:
$ ./speed 
1000000 
Adding 
1000000  records:  17480 ns (
61472904  bytes)
Finding 
1000000  records:  2431 ns (
61472904  bytes)
Traversing 
1000000  records:  2194 ns (
61472904  bytes)
Deleting 
1000000  records:  10948 ns (
61472904  bytes)
Re-adding 
1000000  records:  11247 ns (
61472904  bytes)
Appending 
1000000  records:  21826 ns (
96051424  bytes)
Churning 
1000000  records:  27242 ns (
96051424  bytes)
Rusty Russell  [Wed, 1 Dec 2010 13:22:43 +0000  (23:52 +1030)] 
tdb2: shrink free header from 32 to 24 bytes.
This reduces our minimum key+data length to 8 bytes; we do this by packing
the prev pointer where we used to put the flist pointer, and storing the
flist as an 8 bit index (meaning we can only have 256 free tables).
Note that this has a perverse result on the size of the database, as our
4-byte key and 4-byte data now fit perfectly in a minimal record, so
appeding causes us to allocate new records which are 50% larger,
since we detect growing.
Current results of speed test:
$ ./speed 
1000000 
Adding 
1000000  records:  23210 ns (
59193360  bytes)
Finding 
1000000  records:  2387 ns (
59193360  bytes)
Traversing 
1000000  records:  2150 ns (
59193360  bytes)
Deleting 
1000000  records:  13392 ns (
59193360  bytes)
Re-adding 
1000000  records:  11546 ns (
59193360  bytes)
Appending 
1000000  records:  29327 ns (
91193360  bytes)
Churning 
1000000  records:  33026 ns (
91193360  bytes)
Previous:
$ ./speed 
1000000 
Adding 
1000000  records:  28324 ns (
67232528  bytes)
Finding 
1000000  records:  2468 ns (
67232528  bytes)
Traversing 
1000000  records:  2200 ns (
67232528  bytes)
Deleting 
1000000  records:  13083 ns (
67232528  bytes)
Re-adding 
1000000  records:  16433 ns (
67232528  bytes)
Appending 
1000000  records:  2511 ns (
67232528  bytes)
Churning 
1000000  records:  31068 ns (
67570448  bytes)
Rusty Russell  [Tue, 23 Nov 2010 03:10:59 +0000  (13:40 +1030)] 
tdb2: rename set_header to the more appropriate set_used_header.
Rusty Russell  [Wed, 1 Dec 2010 12:52:55 +0000  (23:22 +1030)] 
tdb2: Add speed test to tdb and tdb2
Current results of speed test:
$ ./speed 
1000000 
Adding 
1000000  records:  14726 ns (
67244816  bytes)
Finding 
1000000  records:  2844 ns (
67244816  bytes)
Missing 
1000000  records:  2528 ns (
67244816  bytes)
Traversing 
1000000  records:  2572 ns (
67244816  bytes)
Deleting 
1000000  records:  5358 ns (
67244816  bytes)
Re-adding 
1000000  records:  9176 ns (
67244816  bytes)
Appending 
1000000  records:  3035 ns (
67244816  bytes)
Churning 
1000000  records:  18139 ns (
67565840  bytes)
$ ./speed 100000
Adding 100000 records:  13270 ns (
14349584  bytes)
Finding 100000 records:  2769 ns (
14349584  bytes)
Missing 100000 records:  2422 ns (
14349584  bytes)
Traversing 100000 records:  2595 ns (
14349584  bytes)
Deleting 100000 records:  5331 ns (
14349584  bytes)
Re-adding 100000 records:  5875 ns (
14349584  bytes)
Appending 100000 records:  2751 ns (
14349584  bytes)
Churning 100000 records:  20666 ns (
25771280  bytes)
vs tdb1 (with hashsize 100003):
$ ./speed 
1000000 
Adding 
1000000  records:  8547 ns (
44306432  bytes)
Finding 
1000000  records:  5595 ns (
44306432  bytes)
Missing 
1000000  records:  3469 ns (
44306432  bytes)
Traversing 
1000000  records:  4571 ns (
44306432  bytes)
Deleting 
1000000  records:  12115 ns (
44306432  bytes)
Re-adding 
1000000  records:  10505 ns (
44306432  bytes)
Appending 
1000000  records:  10610 ns (
44306432  bytes)
Churning 
1000000  records:  28697 ns (
44306432  bytes)
$ ./speed 100000
Adding 100000 records:  6030 ns (
4751360  bytes)
Finding 100000 records:  3141 ns (
4751360  bytes)
Missing 100000 records:  3143 ns (
4751360  bytes)
Traversing 100000 records:  4659 ns (
4751360  bytes)
Deleting 100000 records:  7891 ns (
4751360  bytes)
Re-adding 100000 records:  5913 ns (
4751360  bytes)
Appending 100000 records:  4242 ns (
4751360  bytes)
Churning 100000 records:  15300 ns (
4751360  bytes)
Rusty Russell  [Wed, 1 Dec 2010 12:36:56 +0000  (23:06 +1030)] 
tdb2: fix tdb_check() return when free table entries missing.
Rusty Russell  [Wed, 1 Dec 2010 12:26:35 +0000  (22:56 +1030)] 
tdb2: make tdb_check call check() function.
Rusty Russell  [Wed, 1 Dec 2010 13:21:41 +0000  (23:51 +1030)] 
tdb2: make summary command handle recovery "dead zone"
Rusty Russell  [Wed, 1 Dec 2010 13:18:42 +0000  (23:48 +1030)] 
tdb2: cancel transactions on tdb_close
Rusty Russell  [Tue, 23 Nov 2010 01:44:31 +0000  (12:14 +1030)] 
tdb2: enable transactions in tdbtorture
Rusty Russell  [Tue, 23 Nov 2010 01:43:59 +0000  (12:13 +1030)] 
tdb2: stricter ordering on expansion lock
Rusty Russell  [Tue, 23 Nov 2010 01:40:32 +0000  (12:10 +1030)] 
tdb2: remove all the dead code
Rusty Russell  [Tue, 23 Nov 2010 01:38:21 +0000  (12:08 +1030)] 
tdb2: transaction support
Rusty Russell  [Tue, 23 Nov 2010 01:37:29 +0000  (12:07 +1030)] 
tdb2: allow nesting of read locks on top of write locks.
Rusty Russell  [Tue, 23 Nov 2010 01:36:31 +0000  (12:06 +1030)] 
ccanlint: fix -x core dump
This wasn't fixed when we converted to ccan/opt in 
8d70667887 .
Unfortunately, unistd.h defines optarg, so the compiler didn't catch
this.
Rusty Russell  [Wed, 17 Nov 2010 09:56:52 +0000  (20:26 +1030)] 
tdb2: handle chains of free tables
Rusty Russell  [Wed, 17 Nov 2010 09:55:41 +0000  (20:25 +1030)] 
tdb2: get rid of zones
Rusty Russell  [Wed, 17 Nov 2010 10:00:07 +0000  (20:30 +1030)] 
tdb2: fix bucket search
Rusty Russell  [Wed, 17 Nov 2010 09:52:19 +0000  (20:22 +1030)] 
tdb2: only adjust size once when growing
Rusty Russell  [Wed, 17 Nov 2010 09:50:35 +0000  (20:20 +1030)] 
tdb2: remove tailer
Rusty Russell  [Mon, 15 Nov 2010 07:24:15 +0000  (17:54 +1030)] 
tdb2: fix tdb_chainlock
Rusty Russell  [Mon, 15 Nov 2010 07:25:45 +0000  (17:55 +1030)] 
tdb2: fix coalesce race #3
Rusty Russell  [Mon, 15 Nov 2010 07:25:34 +0000  (17:55 +1030)] 
tdb2: add TDB_COALESCING_MAGIC to solve coalescing race.
Rusty Russell  [Mon, 15 Nov 2010 08:32:42 +0000  (19:02 +1030)] 
tdb2: fix coalesce race #2
Rusty Russell  [Mon, 15 Nov 2010 07:10:47 +0000  (17:40 +1030)] 
tdb2: coalescing race fix #1
Rusty Russell  [Mon, 15 Nov 2010 07:19:11 +0000  (17:49 +1030)] 
tdb2: minor optimization for set_header
Rusty Russell  [Mon, 15 Nov 2010 07:26:57 +0000  (17:56 +1030)] 
tdb2: hoist adjust_size
Rusty Russell  [Mon, 15 Nov 2010 07:07:03 +0000  (17:37 +1030)] 
tdb2: clean up makefile for tools
Rusty Russell  [Mon, 15 Nov 2010 07:31:48 +0000  (18:01 +1030)] 
tdb2: extra debugging checks
Rusty Russell  [Wed, 17 Nov 2010 09:59:13 +0000  (20:29 +1030)] 
ccanlint: add ccanlint section to _info
Rusty Russell  [Wed, 17 Nov 2010 09:57:37 +0000  (20:27 +1030)] 
ccanlint: override _info's Fails: with --target
Rusty Russell  [Wed, 17 Nov 2010 09:53:30 +0000  (20:23 +1030)] 
ccanlint: run tests in alphabetical order
Rusty Russell  [Mon, 15 Nov 2010 09:46:40 +0000  (20:16 +1030)] 
config: add HAVE_BUILTIN_FFSLL
Rusty Russell  [Mon, 15 Nov 2010 02:47:55 +0000  (13:17 +1030)] 
nfs: remove trailing whitespace
Rusty Russell  [Mon, 15 Nov 2010 02:47:12 +0000  (13:17 +1030)] 
nfs: make headers idempotent
Rusty Russell  [Mon, 15 Nov 2010 02:46:46 +0000  (13:16 +1030)] 
nfs: Remove _U_, use ccan/compiler and UNUSED
Rusty Russell  [Mon, 15 Nov 2010 02:45:36 +0000  (13:15 +1030)] 
nfs: Add _info, remove -D_FILE_OFFSET_BITS=64, use nfs_off_t
Rusty Russell  [Mon, 15 Nov 2010 02:00:48 +0000  (12:30 +1030)] 
ccanlint: remove -Werror, use output of compile command to detect warnings.
Rusty Russell  [Sun, 14 Nov 2010 11:40:04 +0000  (22:10 +1030)] 
ccanlint: make compile commands return output.
Rusty Russell  [Mon, 15 Nov 2010 02:23:00 +0000  (12:53 +1030)] 
ccanlint: fix idempotent handler
Rusty Russell  [Sun, 14 Nov 2010 11:53:52 +0000  (22:23 +1030)] 
ccanlint: only print 5 lines of output unless -vv
Rusty Russell  [Mon, 15 Nov 2010 02:29:52 +0000  (12:59 +1030)] 
ccanlint: print error information even if we pass.
Rusty Russell  [Sun, 14 Nov 2010 11:48:12 +0000  (22:18 +1030)] 
ccanlint: minor print formatting cleanup.
Rusty Russell  [Mon, 15 Nov 2010 02:48:57 +0000  (13:18 +1030)] 
ccanlint: don't skip every second question
Rusty Russell  [Thu, 11 Nov 2010 02:18:09 +0000  (12:48 +1030)] 
ciniparser: add LICENSE symlink
Rusty Russell  [Wed, 10 Nov 2010 12:45:14 +0000  (23:15 +1030)] 
foreach, iscsi, jbitset, jmap, opt, rbtree, sparse_bsearch, tally, tdb2: add LICENSE symlinks
Rusty Russell  [Wed, 10 Nov 2010 12:44:30 +0000  (23:14 +1030)] 
ccanlint: check license and LICENSE symlink.
Rusty Russell  [Wed, 10 Nov 2010 12:16:12 +0000  (22:46 +1030)] 
ccanlint: clarify different -v levels.
Rusty Russell  [Wed, 10 Nov 2010 12:08:02 +0000  (22:38 +1030)] 
ccanlint: fix --target=examples-compile
Rusty Russell  [Wed, 10 Nov 2010 11:51:06 +0000  (22:21 +1030)] 
ccanlint: use isspace instead of isblank
Rusty Russell  [Wed, 10 Nov 2010 11:40:03 +0000  (22:10 +1030)] 
ccan_tokenizer, check_type, container_of, typesafe_cb: handle !HAVE_TYPEOF
Rusty Russell  [Wed, 10 Nov 2010 11:38:15 +0000  (22:08 +1030)] 
ccanlint: typo fix and fix errant description parsing.
Rusty Russell  [Wed, 10 Nov 2010 06:38:29 +0000  (17:08 +1030)] 
ccanlint: tweak example compilation.
Rusty Russell  [Wed, 10 Nov 2010 06:37:29 +0000  (17:07 +1030)] 
list: fix uninitialized variable in list_add example.
Rusty Russell  [Wed, 10 Nov 2010 06:25:24 +0000  (16:55 +1030)] 
ccanlint: list file errors in order they are encountered.
Rusty Russell  [Wed, 10 Nov 2010 06:24:59 +0000  (16:54 +1030)] 
ccanlint: fix abort when -vv used and examples don't compile.
Rusty Russell  [Wed, 10 Nov 2010 05:18:31 +0000  (15:48 +1030)] 
Makefile: exclude Judy-depending libraries as well as nfs
Rusty Russell  [Wed, 10 Nov 2010 05:17:12 +0000  (15:47 +1030)] 
Merge branch 'ronnie'
Rusty Russell  [Tue, 9 Nov 2010 22:35:58 +0000  (09:05 +1030)] 
compiler: shorten names of attributes, add UNUSED
Rusty Russell  [Tue, 9 Nov 2010 11:37:58 +0000  (22:07 +1030)] 
nfs: add generates C files
Rusty Russell  [Tue, 9 Nov 2010 08:24:45 +0000  (18:54 +1030)] 
nfs: ccanize a little more.
Rusty Russell  [Tue, 9 Nov 2010 08:04:21 +0000  (18:34 +1030)] 
nfs: initial import.
Rusty Russell  [Tue, 9 Nov 2010 02:44:39 +0000  (13:14 +1030)] 
ccanlint: rework so checks have more structure.
Rusty Russell  [Mon, 8 Nov 2010 22:20:21 +0000  (08:50 +1030)] 
ccanlint: fix up creation of test/run.c
Rusty Russell  [Mon, 8 Nov 2010 11:35:42 +0000  (22:05 +1030)] 
likely: switch from using ccan/hashtable to ccan/htable
Rusty Russell  [Mon, 8 Nov 2010 11:30:04 +0000  (22:00 +1030)] 
rbtree: new module from Ronnie.
Rusty Russell  [Mon, 8 Nov 2010 11:27:41 +0000  (21:57 +1030)] 
hashtable: replaced by htable.
Rusty Russell  [Mon, 8 Nov 2010 10:14:06 +0000  (20:44 +1030)] 
talloc: define TALLOC_CTX
Rusty Russell  [Mon, 8 Nov 2010 09:59:17 +0000  (20:29 +1030)] 
iscsi: add LICENCE link
Rusty Russell  [Mon, 8 Nov 2010 09:54:47 +0000  (20:24 +1030)] 
iscsi: ccanize a little more, add silly simple test case.
Rusty Russell  [Mon, 8 Nov 2010 09:19:41 +0000  (19:49 +1030)] 
iscsi: new module from Ronnie.
Rusty Russell  [Mon, 8 Nov 2010 03:02:51 +0000  (13:32 +1030)] 
htable: push capacity limit from 66 to 75%
With the extra bits, long runs don't hurt our cache very much on search,
so we can pack quite a few in.  Here are the runs at maximal density before
and after:
Before:
$ ./speed 
3145000 
Initial insert:  248 ns
Details: hash size 
4194304 , mask bits 9, perfect 63%
Initial lookup (match):  122 ns
Initial lookup (miss):  142 ns
Initial lookup (random):  170 ns
Initial delete all:  134 ns
Details: rehashes 
3145000 
Initial re-inserting:  149 ns
Deleting first half:  73 ns
Details: rehashes 
1572500 , delete markers 
1572500 
Adding (a different) half:  128 ns
Details: delete markers 0, perfect 62%
Lookup after half-change (match):  129 ns
Lookup after half-change (miss):  145 ns
Details: initial churn
Churning second time:  703 ns
Churning third time:  725 ns
Churning fourth time:  717 ns
Churning fifth time:  710 ns
Details: reinserting with spread
Details: delete markers 149261, perfect 57%
Details: worst run 254 (2 deleted)
Lookup after churn & spread (match):  132 ns
Lookup after churn & spread (miss):  159 ns
Lookup after churn & spread (random):  184 ns
Deleting half after churn & spread:  71 ns
Adding (a different) half after churn & spread:  129 ns
Details: delete markers 0, perfect 62%
After:
$ ./speed 
3145727 
Initial insert:  232 ns
Details: hash size 
4194304 , mask bits 9, perfect 63%
Initial lookup (match):  122 ns
Initial lookup (miss):  141 ns
Initial lookup (random):  234 ns
Initial delete all:  129 ns
Details: rehashes 
3145727 
Initial re-inserting:  153 ns
Deleting first half:  80 ns
Details: rehashes 
1572864 , delete markers 
1572864 
Adding (a different) half:  137 ns
Details: delete markers 0, perfect 62%
Lookup after half-change (match):  125 ns
Lookup after half-change (miss):  145 ns
Details: initial churn
Churning second time:  702 ns
Churning third time:  719 ns
Churning fourth time:  712 ns
Churning fifth time:  709 ns
Details: reinserting with spread
Details: delete markers 169474, perfect 56%
Details: worst run 248 (12 deleted)
Lookup after churn & spread (match):  129 ns
Lookup after churn & spread (miss):  159 ns
Lookup after churn & spread (random):  242 ns
Deleting half after churn & spread:  70 ns
Adding (a different) half after churn & spread:  133 ns
Details: delete markers 0, perfect 62%
Rusty Russell  [Mon, 8 Nov 2010 05:54:31 +0000  (16:24 +1030)] 
htable: restore perfect bit when resizing.
Rusty Russell  [Mon, 8 Nov 2010 05:54:06 +0000  (16:24 +1030)] 
htable: use "perfect" bit to reduce rehashes.
Steal one bit to indicate an entry is in its perfect position.  This
means we don't have to rehash it when we are rehashing the entire
table to get rid of deleted records, and we can still use it for
comparison during lookup.
Before: $ ./speed 
50000000 
Initial insert:  462 ns
Details: hash size 
134217728 , mask bits 5, perfect 81%
Initial lookup (match):  161 ns
Initial lookup (miss):  168 ns
Initial lookup (random):  326 ns
Initial delete all:  164 ns
Details: rehashes 
50000000 
Initial re-inserting:  167 ns
Deleting first half:  86 ns
Details: rehashes 
25000000 , delete markers 
25000000 
Adding (a different) half:  217 ns
Details: delete markers 0, perfect 81%
Lookup after half-change (match):  169 ns
Lookup after half-change (miss):  180 ns
Details: initial churn
Churning second time:  593 ns
Churning third time:  611 ns
Churning fourth time:  619 ns
Churning fifth time:  622 ns
Details: reinserting with spread
Details: delete markers 
13800468 , perfect 73%
Details: worst run 48 (4 deleted)
Lookup after churn & spread (match):  192 ns
Lookup after churn & spread (miss):  211 ns
Lookup after churn & spread (random):  373 ns
Deleting half after churn & spread:  103 ns
Adding (a different) half after churn & spread:  102 ns
Details: delete markers 
29539689 , perfect 72%
After:
Initial insert:  467 ns
Details: hash size 
134217728 , mask bits 5, perfect 81%
Initial lookup (match):  163 ns
Initial lookup (miss):  171 ns
Initial lookup (random):  326 ns
Initial delete all:  170 ns
Details: rehashes 
50000000 
Initial re-inserting:  169 ns
Deleting first half:  88 ns
Details: rehashes 
25000000 , delete markers 
25000000 
Adding (a different) half:  141 ns
Details: delete markers 0, perfect 81%
Lookup after half-change (match):  166 ns
Lookup after half-change (miss):  171 ns
Details: initial churn
Churning second time:  441 ns
Churning third time:  469 ns
Churning fourth time:  466 ns
Churning fifth time:  490 ns
Details: reinserting with spread
Details: delete markers 
13800468 , perfect 73%
Details: worst run 48 (4 deleted)
Lookup after churn & spread (match):  197 ns
Lookup after churn & spread (miss):  209 ns
Lookup after churn & spread (random):  369 ns
Deleting half after churn & spread:  98 ns
Adding (a different) half after churn & spread:  100 ns
Details: delete markers 
29539689 , perfect 72%
Rusty Russell  [Mon, 8 Nov 2010 05:53:17 +0000  (16:23 +1030)] 
htable: rehash to clear delete markers
Delete markers build up over time, even if we try to clean as we go.
So just garbage collect them when there are too many.
Before:
rusty@vivaldi:~/devel/cvs/ccan/ccan/htable/tools (htable)$ ./speed 
50000000 
Initial insert:  467 ns
Details: hash size 
134217728 , mask bits 5, perfect 81%
Initial lookup (match):  160 ns
Initial lookup (miss):  169 ns
Initial lookup (random):  328 ns
Initial delete all:  165 ns
Details: rehashes 
50000000 
Initial re-inserting:  317 ns
Deleting first half:  86 ns
Details: rehashes 
25000000 , delete markers 
25000000 
Adding (a different) half:  89 ns
Details: delete markers 
18894324 , perfect 76%
Lookup after half-change (match):  174 ns
Lookup after half-change (miss):  203 ns
Details: initial churn
Churning second time:  816 ns
Churning third time:  615 ns
Churning fourth time:  621 ns
Churning fifth time:  846 ns
Details: reinserting with spread
Details: delete markers 
11078719 , perfect 74%
Details: worst run 48 (4 deleted)
Lookup after churn & spread (match):  191 ns
Lookup after churn & spread (miss):  208 ns
Lookup after churn & spread (random):  374 ns
Deleting half after churn & spread:  102 ns
Adding (a different) half after churn & spread:  103 ns
Details: delete markers 
27442234 , perfect 73%
After:
Initial insert:  462 ns
Details: hash size 
134217728 , mask bits 5, perfect 81%
Initial lookup (match):  161 ns
Initial lookup (miss):  168 ns
Initial lookup (random):  326 ns
Initial delete all:  164 ns
Details: rehashes 
50000000 
Initial re-inserting:  167 ns
Deleting first half:  86 ns
Details: rehashes 
25000000 , delete markers 
25000000 
Adding (a different) half:  217 ns
Details: delete markers 0, perfect 81%
Lookup after half-change (match):  169 ns
Lookup after half-change (miss):  180 ns
Details: initial churn
Churning second time:  593 ns
Churning third time:  611 ns
Churning fourth time:  619 ns
Churning fifth time:  622 ns
Details: reinserting with spread
Details: delete markers 
13800468 , perfect 73%
Details: worst run 48 (4 deleted)
Lookup after churn & spread (match):  192 ns
Lookup after churn & spread (miss):  211 ns
Lookup after churn & spread (random):  373 ns
Deleting half after churn & spread:  103 ns
Adding (a different) half after churn & spread:  102 ns
Details: delete markers 
29539689 , perfect 72%
Rusty Russell  [Mon, 8 Nov 2010 05:51:20 +0000  (16:21 +1030)] 
htable: speed benchmark
Rusty Russell  [Mon, 8 Nov 2010 05:52:19 +0000  (16:22 +1030)] 
htable: first implementation
Rusty Russell  [Mon, 8 Nov 2010 05:51:06 +0000  (16:21 +1030)] 
jmap: a speed benchmark
Rusty Russell  [Mon, 8 Nov 2010 05:51:58 +0000  (16:21 +1030)] 
jmap: fix incorrect prototype in header documentation.
Rusty Russell  [Sun, 7 Nov 2010 01:45:10 +0000  (12:15 +1030)] 
jmap: just use unsigned long, not size_t
Rusty Russell  [Sun, 7 Nov 2010 01:44:55 +0000  (12:14 +1030)] 
jbitset: just use unsigned long, not size_t
Rusty Russell  [Sun, 7 Nov 2010 01:42:31 +0000  (12:12 +1030)] 
ccanlint: fix compilation of chained examples.
Broken in 
5378c864f9c37f39d906f599285da25a7db0c9fe : we were trying to
recompile the previous failed version.  And the message we printed out
was unclear.
Rusty Russell  [Thu, 4 Nov 2010 10:22:42 +0000  (20:52 +1030)] 
antithread, foreach, grab_file, hashtable, str_talloc: fix _info depends.
Rusty Russell  [Thu, 4 Nov 2010 10:14:00 +0000  (20:44 +1030)] 
ccanlint: add --target
Rusty Russell  [Thu, 4 Nov 2010 10:13:17 +0000  (20:43 +1030)] 
ccanlint: add test to look for modules we use but don't list in _info.
Rusty Russell  [Thu, 4 Nov 2010 10:11:44 +0000  (20:41 +1030)] 
ccanlint: fix wrong initialization in example compilation.
Rusty Russell  [Thu, 4 Nov 2010 10:10:52 +0000  (20:40 +1030)] 
Makefile: make non-optimized variant comment a bit clearer.
Rusty Russell  [Thu, 4 Nov 2010 04:32:13 +0000  (15:02 +1030)] 
alignof, array_size, crc: provide comments to allow testing examples.
Rusty Russell  [Thu, 4 Nov 2010 03:25:15 +0000  (13:55 +1030)] 
ccanlint: try running example code.
Rusty Russell  [Thu, 4 Nov 2010 02:11:13 +0000  (12:41 +1030)] 
opt: fix junk after string in opt_show_charp.
Rusty Russell  [Wed, 3 Nov 2010 22:34:58 +0000  (09:04 +1030)] 
cleanup: get rid of unwanted tap/ toplevel which crept in.
Rusty Russell  [Wed, 3 Nov 2010 13:14:48 +0000  (23:44 +1030)] 
web: point to the configurator to generate config.h
Rusty Russell  [Wed, 3 Nov 2010 13:07:33 +0000  (23:37 +1030)] 
.gitignore: ignore configurator
Rusty Russell  [Wed, 3 Nov 2010 12:48:10 +0000  (23:18 +1030)] 
makefiles: add "scores" target.
Rusty Russell  [Wed, 3 Nov 2010 12:48:10 +0000  (23:18 +1030)] 
alloc: fix missing header in compilation of example.