1. 02 Apr, 2011 8 commits
  2. 28 Mar, 2011 4 commits
  3. 25 Mar, 2011 3 commits
    • Rusty Russell's avatar
      tdb2: speed up transaction code by making page size a constant. · b556ef1f
      Rusty Russell authored
      Turning getpagesize() into a constant 4096 really helps gcc optimize, and
      not just on 64 bit.
      
      Here are the results of running "tools/speed --transaction --no-sync 2000000":
      
      i386 with gcc 4.4.5:
      Before:
      	$ ./speed --transaction --no-sync 2000000
      	Adding 2000000 records:  1195 ns (93594224 bytes)
      	Finding 2000000 records:  719 ns (93594224 bytes)
      	Missing 2000000 records:  429 ns (93594224 bytes)
      	Traversing 2000000 records:  523 ns (93594224 bytes)
      	Deleting 2000000 records:  901 ns (93594224 bytes)
      	Re-adding 2000000 records:  1032 ns (93594224 bytes)
      	Appending 2000000 records:  1711 ns (182801232 bytes)
      	Churning 2000000 records:  3233 ns (182801232 bytes)
      
      After:
      	Adding 2000000 records:  868 ns (93594224 bytes)
      	Finding 2000000 records:  569 ns (93594224 bytes)
      	Missing 2000000 records:  369 ns (93594224 bytes)
      	Traversing 2000000 records:  406 ns (93594224 bytes)
      	Deleting 2000000 records:  674 ns (93594224 bytes)
      	Re-adding 2000000 records:  730 ns (93594224 bytes)
      	Appending 2000000 records:  1144 ns (182801232 bytes)
      	Churning 2000000 records:  2085 ns (182801232 bytes)
      
      Here's the effect (average of 10) on x8664 with gcc 4.1.2, with an earlier
      tree and 1000000:
      	Before:
      		Adding 830.1ns
      		Finding 428.3ns
      		Missing 250.3ns
      		Traversing 387.4ns
      		Deleting 588.8ns
      		Re-adding 737.2ns
      		Appending 1141.4ns
      		Churning 1792ns
      
      	After:
      		Adding 562.8ns
      		Finding 362.1ns
      		Missing 226.4ns
      		Traversing 276.5ns
      		Deleting 426.7ns
      		Re-adding 489.8ns
      		Appending 736.4ns
      		Churning 1112.7ns
      
      b556ef1f
    • Rusty Russell's avatar
      tdb2: fix traversal bug in free list lock_and_alloc() · 1444b09c
      Rusty Russell authored
      We keep looking even if the current best is exactly right.  This is
      really bad, because our smaller free lists hold exactly one size: with
      this bug we iterate to the end of the list before hitting the end and
      deciding we can use it after all.
      
      Before:
      	$ ./speed --transaction --no-sync 2000000
      	Adding 2000000 records:  1179 ns (93594224 bytes)
      	Finding 2000000 records:  694 ns (93594224 bytes)
      	Missing 2000000 records:  429 ns (93594224 bytes)
      	Traversing 2000000 records:  519 ns (93594224 bytes)
      	Deleting 2000000 records:  896 ns (93594224 bytes)
      	Re-adding 2000000 records:  1129 ns (93594224 bytes)
      	Appending 2000000 records:  1713 ns (182801232 bytes)
      	Churning 2000000 records:  32612 ns (182801232 bytes)
      
      After:
      	$ ./speed --transaction --no-sync 2000000
      	Adding 2000000 records:  1195 ns (93594224 bytes)
      	Finding 2000000 records:  719 ns (93594224 bytes)
      	Missing 2000000 records:  429 ns (93594224 bytes)
      	Traversing 2000000 records:  523 ns (93594224 bytes)
      	Deleting 2000000 records:  901 ns (93594224 bytes)
      	Re-adding 2000000 records:  1032 ns (93594224 bytes)
      	Appending 2000000 records:  1711 ns (182801232 bytes)
      	Churning 2000000 records:  3233 ns (182801232 bytes)
      1444b09c
    • Rusty Russell's avatar
      tdb2: add --summary and logging to tools/speed. · 4bde5a87
      Rusty Russell authored
      This helps us see where the problems are.
      4bde5a87
  4. 28 Mar, 2011 1 commit
  5. 24 Mar, 2011 2 commits
    • Rusty Russell's avatar
      tdb2: fix use after free on error message · 40bab4d5
      Rusty Russell authored
      We use "r" after we call tdb_access_release() when we find corruption
      in the free list.  "r" may be a pointer into malloced memory, freed
      by tdb_access_release().
      40bab4d5
    • Rusty Russell's avatar
      tdb2: fix two transaction bugs. · e1fd1d96
      Rusty Russell authored
      One but were we didn't update the map_size if we expanded the
      transaction but didn't create a new recovery area (most easily
      reproduced by setting the TDB_NOSYNC flag).
      
      Another out-by-one bug in transaction_direct where we would give
      read-access to the underlying file despite the last block having been
      modified.
      
      Both these were found by tdbtorture.
      e1fd1d96
  6. 23 Mar, 2011 1 commit
  7. 24 Mar, 2011 1 commit
  8. 23 Mar, 2011 2 commits
  9. 24 Mar, 2011 1 commit
    • Rusty Russell's avatar
      tdb2: check PID if we are holding a lock. · e6862ec8
      Rusty Russell authored
      tdb1 has tdb_reopen/tdb_reopen_all, which you are supposed to call
      after a fork().  But we can detect PID changes whenever we grab a lock,
      which is to say, before we do anything.
      
      We currently assume that pread and pwrite work, so the only problem
      with fork() is if we are holding locks and expect them to still be
      there in the child.  This is unusual, but most likely caused by a
      fork() inside a transaction.  In such cases, allow the child to unlock
      without complaint; they can then use the TDB as expected.
      
      Performance before and after shows no measurable speed difference:
      
      Total of 5 runs of tools/speed 100000:
      Before:
      	Adding: 18899ns
      	Finding: 7040ns
      	Missing: 5802ns
      	Traversing: 6466ns
      	Deleting: 12607ns
      	Re-adding: 14185ns
      	Appending: 20770ns
      	Churning: 93845ns
      
      After:
      	Adding: 18073ns
      	Finding: 6795ns
      	Missing: 5549ns
      	Traversing: 6333ns
      	Deleting: 12313ns
      	Re-adding: 13835ns
      	Appending: 20343ns
      	Churning: 92208ns
      e6862ec8
  10. 22 Mar, 2011 1 commit
  11. 28 Mar, 2011 1 commit
  12. 25 Mar, 2011 2 commits
    • Rusty Russell's avatar
      failtest: handle EINTR from poll. · b0a59bdc
      Rusty Russell authored
      I don't quite know why, but this started happening to me.  We should
      handle it anyway.
      b0a59bdc
    • Rusty Russell's avatar
      ccanlint: fix listing of dependencies · 94b797a5
      Rusty Russell authored
      gcc gave a warning:
      	tools/ccanlint/ccanlint.c:230:19: error: ‘c’ may be used uninitialized in this function
      
      Which indicated that test dependency printing was broken: we need to
      loop through the tests!  Also, we haven't parsed options yet, so
      verbose is never true: move it to later and make it depend on -vvv.
      94b797a5
  13. 24 Mar, 2011 1 commit
  14. 22 Mar, 2011 12 commits