From a82fb8ae3ecf661b424546bf7cd7d7c6d5f9c2b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Mon, 21 Nov 2011 20:57:17 -0800 Subject: [PATCH] perf counter --- kdc/kdc-tester.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/kdc/kdc-tester.c b/kdc/kdc-tester.c index d0c29cfcc..82b4fe825 100644 --- a/kdc/kdc-tester.c +++ b/kdc/kdc-tester.c @@ -35,6 +35,14 @@ #include "kdc_locl.h" +struct perf { + unsigned long as_req; + unsigned long tgs_req; + struct timeval start; + struct timeval stop; + struct perf *next; +} *ptop; + static krb5_kdc_configuration *kdc_config; static krb5_context kdc_context; @@ -71,6 +79,9 @@ eval_kinit(heim_dict_t o) krb5_principal client; krb5_error_code ret; + if (ptop) + ptop->as_req++; + user = heim_dict_get_value(o, HSTR("client")); if (user == NULL) krb5_errx(kdc_context, 1, "no client"); @@ -98,7 +109,9 @@ eval_kinit(heim_dict_t o) krb5_init_creds_free(kdc_context, ctx); +#if 0 printf("kinit success %s\n", heim_string_get_utf8(user)); +#endif } /* @@ -129,6 +142,13 @@ eval_object(heim_object_t o) heim_object_t or = heim_dict_get_value(o, HSTR("value")); heim_number_t n = heim_dict_get_value(o, HSTR("num")); int i, num; + struct perf perf; + + memset(&perf, 0, sizeof(perf)); + + gettimeofday(&perf.start, NULL); + perf.next = ptop; + ptop = &perf; heim_assert(or != NULL, "value missing"); heim_assert(n != NULL, "num missing"); @@ -139,6 +159,33 @@ eval_object(heim_object_t o) for (i = 0; i < num; i++) eval_object(or); + gettimeofday(&perf.stop, NULL); + ptop = perf.next; + + if (ptop) { + ptop->as_req += perf.as_req; + ptop->tgs_req += perf.tgs_req; + } + + timevalsub(&perf.stop, &perf.start); + printf("time: %lu.%06lu\n", + (unsigned long)perf.stop.tv_sec, + (unsigned long)perf.stop.tv_usec); + +#define USEC_PER_SEC 1000000 + + if (perf.as_req) { + double as_ps = 0.0; + as_ps = (perf.as_req * USEC_PER_SEC) / (double)((perf.stop.tv_sec * USEC_PER_SEC) + perf.stop.tv_usec); + printf("as-req/s %.2lf\n", as_ps); + } + + if (perf.tgs_req) { + double tgs_ps = 0.0; + tgs_ps = (perf.tgs_req * USEC_PER_SEC) / (double)((perf.stop.tv_sec * USEC_PER_SEC) + perf.stop.tv_usec); + printf("tgs-req/s %.2lf\n", tgs_ps); + } + } else if (strcmp(op, "kinit") == 0) { eval_kinit(o); } else {