From: Ronnie Sahlberg Date: Mon, 30 Jul 2007 00:50:35 +0000 (+1000) Subject: add a small tool to compare rb tree with a timeval_compare()+add an X-Git-Tag: tevent-0.9.20~348^2~2445^2~4 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=64f61364a7f8ffd56e9cac043a19e0a2c30e5a0d;p=thirdparty%2Fsamba.git add a small tool to compare rb tree with a timeval_compare()+add an entry to the end of the list DLIST (worst case insert) (This used to be ctdb commit dcdf4a1f1c6675ae11ab26726c867d7782954fc6) --- diff --git a/ctdb/tests/rb_perftest.c b/ctdb/tests/rb_perftest.c new file mode 100644 index 00000000000..1760cd1149f --- /dev/null +++ b/ctdb/tests/rb_perftest.c @@ -0,0 +1,123 @@ +/* + simple rb vs dlist benchmark + + Copyright (C) Ronnie Sahlberg 2007 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see . +*/ + +#include "includes.h" +#include "lib/events/events.h" +#include "lib/util/dlinklist.h" +#include "system/filesys.h" +#include "popt.h" +#include "cmdline.h" + +#include +#include +#include "common/rb_tree.h" + +static struct timeval tp1,tp2; + +static void start_timer(void) +{ + gettimeofday(&tp1,NULL); +} + +static double end_timer(void) +{ + gettimeofday(&tp2,NULL); + return (tp2.tv_sec + (tp2.tv_usec*1.0e-6)) - + (tp1.tv_sec + (tp1.tv_usec*1.0e-6)); +} + + +static int num_records = 1000; + + +struct list_node { + struct list_node *prev, *next; +}; + +/* + main program +*/ +int main(int argc, const char *argv[]) +{ + struct poptOption popt_options[] = { + POPT_AUTOHELP + POPT_CTDB_CMDLINE + { "num-records", 'r', POPT_ARG_INT, &num_records, 0, "num_records", "integer" }, + POPT_TABLEEND + }; + int opt; + const char **extra_argv; + int extra_argc = 0; + int ret; + poptContext pc; + struct event_context *ev; + double elapsed; + int i; + trbt_tree_t *tree; + struct list_node *list, *list_new, *list_head=NULL; + + pc = poptGetContext(argv[0], argc, argv, popt_options, POPT_CONTEXT_KEEP_FIRST); + + while ((opt = poptGetNextOpt(pc)) != -1) { + switch (opt) { + default: + fprintf(stderr, "Invalid option %s: %s\n", + poptBadOption(pc, 0), poptStrerror(opt)); + exit(1); + } + } + + /* setup the remaining options for the main program to use */ + extra_argv = poptGetArgs(pc); + if (extra_argv) { + extra_argv++; + while (extra_argv[extra_argc]) extra_argc++; + } + + ev = event_context_init(NULL); + + + printf("testing tree insert for %d records\n", num_records); + tree = trbt_create(NULL); + start_timer(); + for (i=0;inext;list=list->next) { + /* the events code does a timeval_compare */ + timeval_compare(&tp1, &tp2); + } + + list_new=talloc(NULL, struct list_node); + DLIST_ADD_AFTER(list_head, list_new, list); + } + elapsed=end_timer(); + printf("%f seconds\n",(float)elapsed); + + return 0; +}