Author: vlendec
Date: 2007-05-29 10:15:01 +0000 (Tue, 29 May 2007)
New Revision: 23184

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=23184

Log:
Checkin for Tridge: Add a speed test to tdbtool

Modified:
   branches/SAMBA_3_0/source/lib/tdb/tools/tdbtool.c
   branches/SAMBA_3_0_26/source/lib/tdb/tools/tdbtool.c


Changeset:
Modified: branches/SAMBA_3_0/source/lib/tdb/tools/tdbtool.c
===================================================================
--- branches/SAMBA_3_0/source/lib/tdb/tools/tdbtool.c   2007-05-29 09:30:34 UTC 
(rev 23183)
+++ branches/SAMBA_3_0/source/lib/tdb/tools/tdbtool.c   2007-05-29 10:15:01 UTC 
(rev 23184)
@@ -35,6 +35,7 @@
 char *line;
 TDB_DATA iterate_kbuf;
 char cmdline[1024];
+static int disable_mmap;
 
 enum commands {
        CMD_CREATE_TDB,
@@ -51,6 +52,8 @@
        CMD_LIST_HASH_FREE,
        CMD_LIST_FREE,
        CMD_INFO,
+       CMD_MMAP,
+       CMD_SPEED,
        CMD_FIRST,
        CMD_NEXT,
        CMD_SYSTEM,
@@ -78,6 +81,8 @@
        {"list",        CMD_LIST_HASH_FREE},
        {"free",        CMD_LIST_FREE},
        {"info",        CMD_INFO},
+       {"speed",       CMD_SPEED},
+       {"mmap",        CMD_MMAP},
        {"first",       CMD_FIRST},
        {"1",           CMD_FIRST},
        {"next",        CMD_NEXT},
@@ -88,6 +93,20 @@
        {NULL,          CMD_HELP}
 };
 
+struct timeval tp1,tp2;
+
+static void _start_timer(void)
+{
+       gettimeofday(&tp1,NULL);
+}
+
+static double _end_timer(void)
+{
+       gettimeofday(&tp2,NULL);
+       return((tp2.tv_sec - tp1.tv_sec) + 
+              (tp2.tv_usec - tp1.tv_usec)*1.0e-6);
+}
+
 /* a tdb tool for manipulating a tdb database */
 
 static TDB_CONTEXT *tdb;
@@ -176,7 +195,7 @@
 static void create_tdb(const char *tdbname)
 {
        if (tdb) tdb_close(tdb);
-       tdb = tdb_open(tdbname, 0, TDB_CLEAR_IF_FIRST,
+       tdb = tdb_open(tdbname, 0, TDB_CLEAR_IF_FIRST | 
(disable_mmap?TDB_NOMMAP:0),
                       O_RDWR | O_CREAT | O_TRUNC, 0600);
        if (!tdb) {
                printf("Could not create %s: %s\n", tdbname, strerror(errno));
@@ -186,7 +205,7 @@
 static void open_tdb(const char *tdbname)
 {
        if (tdb) tdb_close(tdb);
-       tdb = tdb_open(tdbname, 0, 0, O_RDWR, 0600);
+       tdb = tdb_open(tdbname, 0, disable_mmap?TDB_NOMMAP:0, O_RDWR, 0600);
        if (!tdb) {
                printf("Could not open %s: %s\n", tdbname, strerror(errno));
        }
@@ -366,6 +385,31 @@
                printf("%d records totalling %d bytes\n", count, total_bytes);
 }
 
+static void speed_tdb(const char *tlimit)
+{
+       unsigned timelimit = tlimit?atoi(tlimit):0;
+       double t;
+       int ops=0;
+       if (timelimit == 0) timelimit = 10;
+       printf("Testing traverse speed for %u seconds\n", timelimit);
+       _start_timer();
+       while ((t=_end_timer()) < timelimit) {
+               tdb_traverse(tdb, traverse_fn, NULL);
+               printf("%10.3f ops/sec\r", (++ops)/t);
+       }
+       printf("\n");
+}
+
+static void toggle_mmap(void)
+{
+       disable_mmap = !disable_mmap;
+       if (disable_mmap) {
+               printf("mmap is disabled\n");
+       } else {
+               printf("mmap is enabled\n");
+       }
+}
+
 static char *tdb_getline(const char *prompt)
 {
        static char thisline[1024];
@@ -494,6 +538,12 @@
            case CMD_INFO:
                info_tdb();
                return 0;
+           case CMD_SPEED:
+               speed_tdb(arg1);
+               return 0;
+           case CMD_MMAP:
+               toggle_mmap();
+               return 0;
            case CMD_FIRST:
                bIterate = 1;
                first_record(tdb, &iterate_kbuf);

Modified: branches/SAMBA_3_0_26/source/lib/tdb/tools/tdbtool.c
===================================================================
--- branches/SAMBA_3_0_26/source/lib/tdb/tools/tdbtool.c        2007-05-29 
09:30:34 UTC (rev 23183)
+++ branches/SAMBA_3_0_26/source/lib/tdb/tools/tdbtool.c        2007-05-29 
10:15:01 UTC (rev 23184)
@@ -35,6 +35,7 @@
 char *line;
 TDB_DATA iterate_kbuf;
 char cmdline[1024];
+static int disable_mmap;
 
 enum commands {
        CMD_CREATE_TDB,
@@ -51,6 +52,8 @@
        CMD_LIST_HASH_FREE,
        CMD_LIST_FREE,
        CMD_INFO,
+       CMD_MMAP,
+       CMD_SPEED,
        CMD_FIRST,
        CMD_NEXT,
        CMD_SYSTEM,
@@ -78,6 +81,8 @@
        {"list",        CMD_LIST_HASH_FREE},
        {"free",        CMD_LIST_FREE},
        {"info",        CMD_INFO},
+       {"speed",       CMD_SPEED},
+       {"mmap",        CMD_MMAP},
        {"first",       CMD_FIRST},
        {"1",           CMD_FIRST},
        {"next",        CMD_NEXT},
@@ -88,6 +93,20 @@
        {NULL,          CMD_HELP}
 };
 
+struct timeval tp1,tp2;
+
+static void _start_timer(void)
+{
+       gettimeofday(&tp1,NULL);
+}
+
+static double _end_timer(void)
+{
+       gettimeofday(&tp2,NULL);
+       return((tp2.tv_sec - tp1.tv_sec) + 
+              (tp2.tv_usec - tp1.tv_usec)*1.0e-6);
+}
+
 /* a tdb tool for manipulating a tdb database */
 
 static TDB_CONTEXT *tdb;
@@ -176,7 +195,7 @@
 static void create_tdb(const char *tdbname)
 {
        if (tdb) tdb_close(tdb);
-       tdb = tdb_open(tdbname, 0, TDB_CLEAR_IF_FIRST,
+       tdb = tdb_open(tdbname, 0, TDB_CLEAR_IF_FIRST | 
(disable_mmap?TDB_NOMMAP:0),
                       O_RDWR | O_CREAT | O_TRUNC, 0600);
        if (!tdb) {
                printf("Could not create %s: %s\n", tdbname, strerror(errno));
@@ -186,7 +205,7 @@
 static void open_tdb(const char *tdbname)
 {
        if (tdb) tdb_close(tdb);
-       tdb = tdb_open(tdbname, 0, 0, O_RDWR, 0600);
+       tdb = tdb_open(tdbname, 0, disable_mmap?TDB_NOMMAP:0, O_RDWR, 0600);
        if (!tdb) {
                printf("Could not open %s: %s\n", tdbname, strerror(errno));
        }
@@ -366,6 +385,31 @@
                printf("%d records totalling %d bytes\n", count, total_bytes);
 }
 
+static void speed_tdb(const char *tlimit)
+{
+       unsigned timelimit = tlimit?atoi(tlimit):0;
+       double t;
+       int ops=0;
+       if (timelimit == 0) timelimit = 10;
+       printf("Testing traverse speed for %u seconds\n", timelimit);
+       _start_timer();
+       while ((t=_end_timer()) < timelimit) {
+               tdb_traverse(tdb, traverse_fn, NULL);
+               printf("%10.3f ops/sec\r", (++ops)/t);
+       }
+       printf("\n");
+}
+
+static void toggle_mmap(void)
+{
+       disable_mmap = !disable_mmap;
+       if (disable_mmap) {
+               printf("mmap is disabled\n");
+       } else {
+               printf("mmap is enabled\n");
+       }
+}
+
 static char *tdb_getline(const char *prompt)
 {
        static char thisline[1024];
@@ -494,6 +538,12 @@
            case CMD_INFO:
                info_tdb();
                return 0;
+           case CMD_SPEED:
+               speed_tdb(arg1);
+               return 0;
+           case CMD_MMAP:
+               toggle_mmap();
+               return 0;
            case CMD_FIRST:
                bIterate = 1;
                first_record(tdb, &iterate_kbuf);

Reply via email to