X-Git-Url: http://nsz.repo.hu/git/?p=libc-test;a=blobdiff_plain;f=common%2Fb.c;h=07b299c5f08cc5fb864dac581cfbc5deb3056f5e;hp=ee0650d06c7bd0a67d5f78ad693e3c32d379ebd0;hb=1b83d1e7175007b2e44d440eaa7ebaa6f2fe5546;hpb=3a72706b330e7396bd3ea22e48ffb21f17a000a3 diff --git a/common/b.c b/common/b.c index ee0650d..07b299c 100644 --- a/common/b.c +++ b/common/b.c @@ -16,7 +16,7 @@ static int verbose = 1; void error__(const char *n, int l, const char *s, ...) { - fprintf(stderr, "use error in tests only\n"); + dprintf(1, "use error in tests only\n"); } static int N; @@ -26,12 +26,13 @@ static unsigned long long dt; #define SEC 1000000000ULL #define MAXN 500000000 +#define MINT (SEC/5) static unsigned long long tic() { struct timespec ts; if (clock_gettime(CLOCK_REALTIME, &ts) < 0) { - fprintf(stderr, "bench: clock_gettime failed: %s\n", strerror(errno)); + dprintf(1, "bench: clock_gettime failed: %s\n", strerror(errno)); return 0; } return ts.tv_sec*SEC + ts.tv_nsec; @@ -59,9 +60,9 @@ static int nextN() { unsigned long long i; if (n) - n = SEC/2/n; + n = MINT/n; else - n = SEC/2; + n = MINT; n += n/2; if (n > N*100ULL) n = N*100ULL; @@ -88,7 +89,7 @@ void vmstats() { f = fopen("/proc/self/smaps", "rb"); if (f) while (fgets(buf, sizeof buf, f)) { - if (sscanf(buf, "%*lx-%*lx %*s %*lx %x:%x %*lu %*s", &maj, &min)==2) + if (sscanf(buf, "%*x-%*x %*s %*x %x:%x %*u %*s", &maj, &min)==2) in_heap = (!maj && !min && !strstr(buf, "---p") && (strstr(buf, "[heap]") || !strchr(buf, '['))); if (in_heap) { if (sscanf(buf, "Size: %lu", &l)==1) vm_size += l; @@ -97,17 +98,17 @@ void vmstats() { } } if (f) fclose(f); - fprintf(stderr, " %7zu virt %7zu res %7zu dirty", vm_size, vm_rss, vm_priv_dirty); + dprintf(1, " %7zu virt %7zu res %7zu dirty", vm_size, vm_rss, vm_priv_dirty); } void stats() { - if (dt/N > 100) - fprintf(stderr, "%10d N %10llu ns/op ", N, dt/N); + if (dt/N >= 100) + dprintf(1, "%10d N %10llu ns/op ", N, dt/N); else - fprintf(stderr, "%10d N %13.2f ns/op", N, (double)dt/N); + dprintf(1, "%10d N %13.2f ns/op", N, (double)dt/N); if (verbose) vmstats(); - fputc('\n', stderr); + dprintf(1, "\n"); } static void run(const char *name, void (*f)(int)) { @@ -115,23 +116,23 @@ static void run(const char *name, void (*f)(int)) { if (p) { int s; if (p<0 || wait(&s)<0 || !WIFEXITED(s) || WEXITSTATUS(s)) - fprintf(stderr, "benchmark %s failed\n", name); + dprintf(1, "benchmark %s failed\n", name); return; } - fprintf(stderr, "%-32s", name); + dprintf(1, "%-32s", name); for (N=1; ; N=nextN()) { // TODO: fork at each iteration and pass N,dt..? reset_timer(); start_timer(); f(N); stop_timer(); -// fprintf(stderr, "%10d%12llu next: %d\n", N, dt, nextN()); +// dprintf(1, "%10d%12llu next: %d\n", N, dt, nextN()); if (dt >= SEC/2 || N >= MAXN) { stats(); exit(0); } if (N <= 0) { - fprintf(stderr, "bench: fatal: N <= 0\n"); + dprintf(1, "bench: fatal: N <= 0\n"); exit(1); } }