Date: Thu, 21 Oct 2010 21:08:12 +0000 (UTC) From: Robert Watson <rwatson@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r214185 - head/tools/tools/syscall_timing Message-ID: <201010212108.o9LL8CYF004307@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: rwatson Date: Thu Oct 21 21:08:12 2010 New Revision: 214185 URL: http://svn.freebsd.org/changeset/base/214185 Log: Universally use uintmax_t in syscall_timing; rearrange arithmetic to suffer fewer rounding errors with smaller numbers; fix argc validation so multiple tests run on a single command line. Sponsored by: Google, Inc. MFC after: 2 weeks Modified: head/tools/tools/syscall_timing/syscall_timing.c Modified: head/tools/tools/syscall_timing/syscall_timing.c ============================================================================== --- head/tools/tools/syscall_timing/syscall_timing.c Thu Oct 21 20:34:29 2010 (r214184) +++ head/tools/tools/syscall_timing/syscall_timing.c Thu Oct 21 21:08:12 2010 (r214185) @@ -87,10 +87,10 @@ benchmark_stop(void) assert(clock_gettime(CLOCK_REALTIME, &ts_end) == 0); } -uint64_t -test_getuid(uint64_t num, uint64_t int_arg, const char *path) +uintmax_t +test_getuid(uintmax_t num, uintmax_t int_arg, const char *path) { - uint64_t i; + uintmax_t i; /* * Thread-local data should require no locking if system @@ -106,10 +106,10 @@ test_getuid(uint64_t num, uint64_t int_a return (i); } -uint64_t -test_getppid(uint64_t num, uint64_t int_arg, const char *path) +uintmax_t +test_getppid(uintmax_t num, uintmax_t int_arg, const char *path) { - uint64_t i; + uintmax_t i; /* * This is process-local, but can change, so will require a @@ -125,11 +125,11 @@ test_getppid(uint64_t num, uint64_t int_ return (i); } -uint64_t -test_clock_gettime(uint64_t num, uint64_t int_arg, const char *path) +uintmax_t +test_clock_gettime(uintmax_t num, uintmax_t int_arg, const char *path) { struct timespec ts; - uint64_t i; + uintmax_t i; benchmark_start(); for (i = 0; i < num; i++) { @@ -141,8 +141,8 @@ test_clock_gettime(uint64_t num, uint64_ return (i); } -uint64_t -test_pipe(uint64_t num, uint64_t int_arg, const char *path) +uintmax_t +test_pipe(uintmax_t num, uintmax_t int_arg, const char *path) { int fd[2], i; @@ -169,10 +169,10 @@ test_pipe(uint64_t num, uint64_t int_arg return (i); } -uint64_t -test_socket_stream(uint64_t num, uint64_t int_arg, const char *path) +uintmax_t +test_socket_stream(uintmax_t num, uintmax_t int_arg, const char *path) { - uint64_t i, so; + uintmax_t i, so; so = socket(int_arg, SOCK_STREAM, 0); if (so < 0) @@ -191,10 +191,10 @@ test_socket_stream(uint64_t num, uint64_ return (i); } -uint64_t -test_socket_dgram(uint64_t num, uint64_t int_arg, const char *path) +uintmax_t +test_socket_dgram(uintmax_t num, uintmax_t int_arg, const char *path) { - uint64_t i, so; + uintmax_t i, so; so = socket(int_arg, SOCK_DGRAM, 0); if (so < 0) @@ -213,10 +213,10 @@ test_socket_dgram(uint64_t num, uint64_t return (i); } -uint64_t -test_socketpair_stream(uint64_t num, uint64_t int_arg, const char *path) +uintmax_t +test_socketpair_stream(uintmax_t num, uintmax_t int_arg, const char *path) { - uint64_t i; + uintmax_t i; int so[2]; if (socketpair(PF_LOCAL, SOCK_STREAM, 0, so) == -1) @@ -236,10 +236,10 @@ test_socketpair_stream(uint64_t num, uin return (i); } -uint64_t -test_socketpair_dgram(uint64_t num, uint64_t int_arg, const char *path) +uintmax_t +test_socketpair_dgram(uintmax_t num, uintmax_t int_arg, const char *path) { - uint64_t i; + uintmax_t i; int so[2]; if (socketpair(PF_LOCAL, SOCK_DGRAM, 0, so) == -1) @@ -259,10 +259,10 @@ test_socketpair_dgram(uint64_t num, uint return (i); } -uint64_t -test_open_close(uint64_t num, uint64_t int_arg, const char *path) +uintmax_t +test_open_close(uintmax_t num, uintmax_t int_arg, const char *path) { - uint64_t i; + uintmax_t i; int fd; fd = open(path, O_RDONLY); @@ -283,11 +283,11 @@ test_open_close(uint64_t num, uint64_t i return (i); } -uint64_t -test_open_read_close(uint64_t num, uint64_t int_arg, const char *path) +uintmax_t +test_open_read_close(uintmax_t num, uintmax_t int_arg, const char *path) { char buf[int_arg]; - uint64_t i; + uintmax_t i; int fd; fd = open(path, O_RDONLY); @@ -310,8 +310,8 @@ test_open_read_close(uint64_t num, uint6 return (i); } -uint64_t -test_dup(uint64_t num, uint64_t int_arg, const char *path) +uintmax_t +test_dup(uintmax_t num, uintmax_t int_arg, const char *path) { int fd, i, shmfd; @@ -334,10 +334,10 @@ test_dup(uint64_t num, uint64_t int_arg, return (i); } -uint64_t -test_shmfd(uint64_t num, uint64_t int_arg, const char *path) +uintmax_t +test_shmfd(uintmax_t num, uintmax_t int_arg, const char *path) { - uint64_t i, shmfd; + uintmax_t i, shmfd; shmfd = shm_open(SHM_ANON, O_CREAT | O_RDWR, 0600); if (shmfd < 0) @@ -356,11 +356,11 @@ test_shmfd(uint64_t num, uint64_t int_ar return (i); } -uint64_t -test_fstat_shmfd(uint64_t num, uint64_t int_arg, const char *path) +uintmax_t +test_fstat_shmfd(uintmax_t num, uintmax_t int_arg, const char *path) { struct stat sb; - uint64_t i, shmfd; + uintmax_t i, shmfd; shmfd = shm_open(SHM_ANON, O_CREAT | O_RDWR, 0600); if (shmfd < 0) @@ -378,11 +378,11 @@ test_fstat_shmfd(uint64_t num, uint64_t return (i); } -uint64_t -test_fork(uint64_t num, uint64_t int_arg, const char *path) +uintmax_t +test_fork(uintmax_t num, uintmax_t int_arg, const char *path) { pid_t pid; - uint64_t i; + uintmax_t i; pid = fork(); if (pid < 0) @@ -407,11 +407,11 @@ test_fork(uint64_t num, uint64_t int_arg return (i); } -uint64_t -test_vfork(uint64_t num, uint64_t int_arg, const char *path) +uintmax_t +test_vfork(uintmax_t num, uintmax_t int_arg, const char *path) { pid_t pid; - uint64_t i; + uintmax_t i; pid = vfork(); if (pid < 0) @@ -440,11 +440,11 @@ test_vfork(uint64_t num, uint64_t int_ar static char *execve_args[] = { USR_BIN_TRUE, NULL}; extern char **environ; -uint64_t -test_fork_exec(uint64_t num, uint64_t int_arg, const char *path) +uintmax_t +test_fork_exec(uintmax_t num, uintmax_t int_arg, const char *path) { pid_t pid; - uint64_t i; + uintmax_t i; pid = fork(); if (pid < 0) @@ -473,11 +473,11 @@ test_fork_exec(uint64_t num, uint64_t in return (i); } -uint64_t -test_vfork_exec(uint64_t num, uint64_t int_arg, const char *path) +uintmax_t +test_vfork_exec(uintmax_t num, uintmax_t int_arg, const char *path) { pid_t pid; - uint64_t i; + uintmax_t i; pid = vfork(); if (pid < 0) @@ -506,10 +506,10 @@ test_vfork_exec(uint64_t num, uint64_t i return (i); } -uint64_t -test_chroot(uint64_t num, uint64_t int_arg, const char *path) +uintmax_t +test_chroot(uintmax_t num, uintmax_t int_arg, const char *path) { - uint64_t i; + uintmax_t i; if (chroot("/") < 0) err(-1, "test_chroot: chroot"); @@ -524,11 +524,11 @@ test_chroot(uint64_t num, uint64_t int_a return (i); } -uint64_t -test_setuid(uint64_t num, uint64_t int_arg, const char *path) +uintmax_t +test_setuid(uintmax_t num, uintmax_t int_arg, const char *path) { uid_t uid; - uint64_t i; + uintmax_t i; uid = getuid(); if (setuid(uid) < 0) @@ -546,8 +546,8 @@ test_setuid(uint64_t num, uint64_t int_a struct test { const char *t_name; - uint64_t (*t_func)(uint64_t, uint64_t, const char *); - uint64_t t_int; + uintmax_t (*t_func)(uintmax_t, uintmax_t, const char *); + uintmax_t t_int; }; static const struct test tests[] = { @@ -601,7 +601,7 @@ main(int argc, char *argv[]) long long ll; char *endp; int ch, i, j, k; - uint64_t iterations, loops; + uintmax_t iterations, loops; alarm_timeout = 0; iterations = 0; @@ -649,16 +649,16 @@ main(int argc, char *argv[]) if (loops < 1) loops = 1; - if (argc != 1) + if (argc < 1) usage(); assert(clock_getres(CLOCK_REALTIME, &ts_res) == 0); - printf("Clock resolution: %ju.%08ju\n", (uintmax_t)ts_res.tv_sec, + printf("Clock resolution: %ju.%09ju\n", (uintmax_t)ts_res.tv_sec, (uintmax_t)ts_res.tv_nsec); printf("test\tloop\ttotal\titerations\tperiteration\n"); for (j = 0; j < argc; j++) { - uint64_t calls; + uintmax_t calls, nsecsperit; the_test = NULL; for (i = 0; i < tests_count; i++) { @@ -687,9 +687,10 @@ main(int argc, char *argv[]) * the room in our arithmetic unit. Fine for system calls, * but not for long things. */ - ts_end.tv_sec *= 1000000000 / calls; - printf("0.%09ju\n", (uintmax_t)(ts_end.tv_sec + - ts_end.tv_nsec / calls)); + nsecsperit = ts_end.tv_sec * 1000000000; + nsecsperit += ts_end.tv_nsec; + nsecsperit /= calls; + printf("0.%09ju\n", (uintmax_t)nsecsperit); } } return (0);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201010212108.o9LL8CYF004307>