added some more speed tests to tdbtool
authorAndrew Tridgell <tridge@samba.org>
Mon, 25 May 2009 23:24:37 +0000 (09:24 +1000)
committerStefan Metzmacher <metze@samba.org>
Wed, 16 Dec 2009 07:03:48 +0000 (08:03 +0100)
This adds 3 simple speed tests to tdbtool, for transaction store,
store and fetch.

On my laptop this shows transactions costing about 10ms
(cherry picked from samba commit e15027155d3d880abde83124e252b3dd10a9aae4)

Signed-off-by: Stefan Metzmacher <metze@samba.org>
lib/tdb/tools/tdbtool.c

index cef4ee8d35543007f5c2df397513fec2503f9019..334c3435fa9729c12c1864fa324c53ce811b0ede 100644 (file)
@@ -402,15 +402,68 @@ static void speed_tdb(const char *tlimit)
 {
        unsigned timelimit = tlimit?atoi(tlimit):0;
        double t;
-       int ops=0;
-       if (timelimit == 0) timelimit = 10;
+       int ops;
+       if (timelimit == 0) timelimit = 5;
+
+       ops = 0;
+       printf("Testing store speed for %u seconds\n", timelimit);
+       _start_timer();
+       do {
+               long int r = random();
+               TDB_DATA key, dbuf;
+               key.dptr = "store test";
+               key.dsize = strlen(key.dptr);
+               dbuf.dptr = (unsigned char *)&r;
+               dbuf.dsize = sizeof(r);
+               tdb_store(tdb, key, dbuf, TDB_REPLACE);
+               t = _end_timer();
+               ops++;
+       } while (t < timelimit);
+       printf("%10.3f ops/sec\n", ops/t);
+
+       ops = 0;
+       printf("Testing fetch speed for %u seconds\n", timelimit);
+       _start_timer();
+       do {
+               long int r = random();
+               TDB_DATA key, dbuf;
+               key.dptr = "store test";
+               key.dsize = strlen(key.dptr);
+               dbuf.dptr = (unsigned char *)&r;
+               dbuf.dsize = sizeof(r);
+               tdb_fetch(tdb, key);
+               t = _end_timer();
+               ops++;
+       } while (t < timelimit);
+       printf("%10.3f ops/sec\n", ops/t);
+
+       ops = 0;
+       printf("Testing transaction speed for %u seconds\n", timelimit);
+       _start_timer();
+       do {
+               long int r = random();
+               TDB_DATA key, dbuf;
+               key.dptr = "transaction test";
+               key.dsize = strlen(key.dptr);
+               dbuf.dptr = (unsigned char *)&r;
+               dbuf.dsize = sizeof(r);
+               tdb_transaction_start(tdb);
+               tdb_store(tdb, key, dbuf, TDB_REPLACE);
+               tdb_transaction_commit(tdb);
+               t = _end_timer();
+               ops++;
+       } while (t < timelimit);
+       printf("%10.3f ops/sec\n", ops/t);
+
+       ops = 0;
        printf("Testing traverse speed for %u seconds\n", timelimit);
        _start_timer();
-       while ((t=_end_timer()) < timelimit) {
+       do {
                tdb_traverse(tdb, traverse_fn, NULL);
-               printf("%10.3f ops/sec\r", (++ops)/t);
-       }
-       printf("\n");
+               t = _end_timer();
+               ops++;
+       } while (t < timelimit);
+       printf("%10.3f ops/sec\n", ops/t);
 }
 
 static void toggle_mmap(void)