static void benchmark_compare(const char *a, const char *b) { int bma = find_benchmark(a); int bmb = find_benchmark(b); int data = bm.list[bmb]->allocated - bm.list[bma]->allocated; out(_("Clock: %d\n"), (int)(bm.list[bmb]->clock - bm.list[bma]->clock)); out(_("Time: %lf\n"), difftime(bm.list[bmb]->time, bm.list[bma]->time)); out(_("Memory: %i bytes"), data); print_memsize(data); }
void bm_end(const char* name) { benchmark_t* benchmark; struct rusage rs; int ret = getrusage(RUSAGE_SELF, &rs); if (ret != 0) { perror("rusage failed"); exit(-1); } benchmark = find_benchmark(name); benchmark->end = rs; struct timeval utime; timeval_subtract(&utime, &benchmark->end.ru_utime, &benchmark->begin.ru_utime); struct timeval stime; timeval_subtract(&stime, &benchmark->end.ru_stime, &benchmark->begin.ru_stime); printf("Benchmark: %s\n", benchmark->name); printf("User time used : %ld.%06ld\n", utime.tv_sec, (long int)utime.tv_usec); printf("System time used: %ld.%06ld\n", stime.tv_sec, (long int)stime.tv_usec); printf("\n"); }
/** Main entry point for benchmark code: parse the command line, and run * some benchmarks. */ int main(int argc, const char **argv) { int i; int list=0, n_enabled=0; benchmark_t *b; char *errmsg; or_options_t *options; tor_threads_init(); for (i = 1; i < argc; ++i) { if (!strcmp(argv[i], "--list")) { list = 1; } else { benchmark_t *b = find_benchmark(argv[i]); ++n_enabled; if (b) { b->enabled = 1; } else { printf("No such benchmark as %s\n", argv[i]); } } } reset_perftime(); if (crypto_seed_rng() < 0) { printf("Couldn't seed RNG; exiting.\n"); return 1; } crypto_init_siphash_key(); options = options_new(); init_logging(1); options->command = CMD_RUN_UNITTESTS; options->DataDirectory = tor_strdup(""); options_init(options); if (set_options(options, &errmsg) < 0) { printf("Failed to set initial options: %s\n", errmsg); tor_free(errmsg); return 1; } for (b = benchmarks; b->name; ++b) { if (b->enabled || n_enabled == 0) { printf("===== %s =====\n", b->name); if (!list) b->fn(); } } return 0; }
void bm_register(const char* name, void (*func)(int), int iters) { benchmark_t benchmark; int length = global_benchmarks_length(); benchmark.name = name; benchmark.func = func; benchmark.iters = iters; assert(!find_benchmark(name)); global_benchmarks = (benchmark_t *)realloc( global_benchmarks, (length + 2)*sizeof(benchmark_t)); global_benchmarks[length] = benchmark; memset(&benchmark, 0, sizeof(benchmark_t)); // pivot global_benchmarks[length + 1] = benchmark; }
void bm_start(const char* name) { benchmark_t* benchmark; struct rusage rs; benchmark = find_benchmark(name); assert(benchmark); int ret = getrusage(RUSAGE_SELF, &rs); if (ret != 0) { perror("rusage failed"); exit(-1); } benchmark->begin = rs; (*benchmark->func)(benchmark->iters); }
/** Main entry point for benchmark code: parse the command line, and run * some benchmarks. */ int main(int argc, const char **argv) { int i; int list=0, n_enabled=0; benchmark_t *b; tor_threads_init(); for (i = 1; i < argc; ++i) { if (!strcmp(argv[i], "--list")) { list = 1; } else { benchmark_t *b = find_benchmark(argv[i]); ++n_enabled; if (b) { b->enabled = 1; } else { printf("No such benchmark as %s\n", argv[i]); } } } reset_perftime(); crypto_seed_rng(1); for (b = benchmarks; b->name; ++b) { if (b->enabled || n_enabled == 0) { printf("===== %s =====\n", b->name); if (!list) b->fn(); } } return 0; }
static void benchmark_save(const char *name) { struct mallinfo info; int i; i = find_benchmark(name); if (i == NOT_FOUND) { if (bm.count == MAX_BENCHMARKS) { error(_("Reached maximum of benchmarks\n")); return; } i = bm.count++; { struct benchmark_data *nbm; nbm = TALLOC(struct benchmark_data); bm.list[i] = nbm; strcpy(bm.list[i]->name, name); } } info = mallinfo(); bm.list[i]->clock = clock(); bm.list[i]->allocated = info.uordblks; bm.list[i]->time = time(NULL); }