summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2005-08-30 01:51:36 +0000
committerAndrew Tridgell <tridge@samba.org>2005-08-30 01:51:36 +0000
commit0b0de1036ff8a85c0374e167e3c32b61653d472c (patch)
tree8664ec0076f391e18530765be59318f3013a82e8
parentcf10def61d40d7ecf7c42d9509a8f659a73b81f3 (diff)
downloadsamba-0b0de1036ff8a85c0374e167e3c32b61653d472c.tar.gz
samba-0b0de1036ff8a85c0374e167e3c32b61653d472c.tar.xz
samba-0b0de1036ff8a85c0374e167e3c32b61653d472c.zip
r9773: r11599@blu: tridge | 2005-08-30 11:55:57 +1000
optimise this case a bit more. The total speedup using non-indexed ldbtest is now around a factor of 80x. The code is ugly as hell, but I think this speed is worth it. Of course, if we only ever do indexed searches in ldb then this doesn't help, but it seems all too common that we get unindexable searches, so the optimisation is worthwhile
-rw-r--r--source/lib/tdb/common/tdb.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/source/lib/tdb/common/tdb.c b/source/lib/tdb/common/tdb.c
index 8e8e3ce3b36..d6861efe134 100644
--- a/source/lib/tdb/common/tdb.c
+++ b/source/lib/tdb/common/tdb.c
@@ -1276,14 +1276,22 @@ static int tdb_next_lock(TDB_CONTEXT *tdb, struct tdb_traverse_lock *tlock,
semantics don't change.
With a non-indexed ldb search this trick gains us a
- factor of more than 10 in speed on a linux 2.6.x
- system.
+ factor of around 80 in speed on a linux 2.6.x
+ system (testing using ldbtest).
*/
if (!tlock->off && tlock->hash != 0) {
u32 off;
- if (ofs_read(tdb, TDB_HASH_TOP(tlock->hash), &off) == 0 &&
- off == 0) {
- continue;
+ if (tdb->map_ptr) {
+ for (;tlock->hash < tdb->header.hash_size;tlock->hash++) {
+ if (0 != *(u32 *)(TDB_HASH_TOP(tlock->hash) + (unsigned char *)tdb->map_ptr)) {
+ break;
+ }
+ }
+ } else {
+ if (ofs_read(tdb, TDB_HASH_TOP(tlock->hash), &off) == 0 &&
+ off == 0) {
+ continue;
+ }
}
}