PERFORCE change 174202 for review
Robert Watson
rwatson at FreeBSD.org
Wed Feb 3 00:42:54 UTC 2010
http://p4web.freebsd.org/chv.cgi?CH=174202
Change 174202 by rwatson at rwatson_vimage_client on 2010/02/03 00:42:30
cap_enter, fork, pdfork benchmarks.
Affected files ...
.. //depot/projects/trustedbsd/capabilities/src/tools/tools/syscall_timing/syscall_timing.c#4 edit
Differences ...
==== //depot/projects/trustedbsd/capabilities/src/tools/tools/syscall_timing/syscall_timing.c#4 (text+ko) ====
@@ -29,9 +29,12 @@
#include <sys/types.h>
#include <sys/capability.h>
#include <sys/mman.h>
+#include <sys/poll.h>
+#include <sys/procdesc.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/time.h>
+#include <sys/wait.h>
#include <assert.h>
#include <err.h>
@@ -45,14 +48,14 @@
static struct timespec ts_start, ts_end;
#define timespecsub(vvp, uvp) \
- do { \
- (vvp)->tv_sec -= (uvp)->tv_sec; \
- (vvp)->tv_nsec -= (uvp)->tv_nsec; \
- if ((vvp)->tv_nsec < 0) { \
- (vvp)->tv_sec--; \
- (vvp)->tv_nsec += 1000000000; \
- } \
- } while (0)
+ do { \
+ (vvp)->tv_sec -= (uvp)->tv_sec; \
+ (vvp)->tv_nsec -= (uvp)->tv_nsec; \
+ if ((vvp)->tv_nsec < 0) { \
+ (vvp)->tv_sec--; \
+ (vvp)->tv_nsec += 1000000000; \
+ } \
+ } while (0)
static void
benchmark_start(void)
@@ -339,6 +342,91 @@
close(shmfd);
}
+void
+test_cap_enter(int num)
+{
+ int i;
+
+ /* XXXRW: Note that some tests will fail after this test. */
+
+ if (cap_enter() < 0)
+ err(-1, "test_cap_enter: cap_enter");
+ benchmark_start();
+ for (i = 0; i < num; i++) {
+ if (cap_enter() < 0)
+ err(-1, "test_cap_enter: cap_enter");
+ }
+ benchmark_stop();
+}
+
+void
+test_fork(int num)
+{
+ pid_t pid;
+ int i;
+
+ pid = fork();
+ if (pid < 0)
+ err(-1, "test_fork: fork");
+ if (pid == 0)
+ exit(0);
+ if (waitpid(pid, NULL, 0) < 0)
+ err(-1, "test_fork: waitpid");
+ benchmark_start();
+ for (i = 0; i < num; i++) {
+ pid = fork();
+ if (pid < 0)
+ err(-1, "test_fork: fork");
+ if (pid == 0)
+ exit(0);
+ if (waitpid(pid, NULL, 0) < 0)
+ err(-1, "test_fork: waitpid");
+ }
+ benchmark_stop();
+}
+
+void
+test_pdfork(int num)
+{
+ struct pollfd pollfd;
+ pid_t pid;
+ int fd, i, n;
+
+ pid = pdfork(&fd);
+ if (pid < 0)
+ err(-1, "test_pdfork: pdfork");
+ if (pid == 0)
+ exit(0);
+ pollfd.fd = fd;
+ pollfd.events = POLLHUP;
+ pollfd.revents = 0;
+ n = poll(&pollfd, 1, INFTIM);
+ if (n < 0)
+ err(-1, "poll");
+ if (n != 1)
+ errx(-1, "poll returned %d", n);
+ close(fd);
+
+ benchmark_start();
+ for (i = 0; i < num; i++) {
+ pid = pdfork(&fd);
+ if (pid < 0)
+ err(-1, "test_pdfork: pdfork");
+ if (pid == 0)
+ exit(0);
+ pollfd.fd = fd;
+ pollfd.events = POLLHUP;
+ pollfd.revents = 0;
+ n = poll(&pollfd, 1, INFTIM);
+ if (n < 0)
+ err(-1, "poll");
+ if (n != 1)
+ errx(-1, "poll returned %d", n);
+ close(fd);
+ }
+ benchmark_stop();
+}
+
struct test {
const char *t_name;
void (*t_func)(int);
@@ -359,6 +447,9 @@
{ "test_cap_shmfd", test_cap_shmfd },
{ "fstat_shmfd", test_fstat_shmfd },
{ "fstat_cap_shmfd", test_fstat_cap_shmfd },
+ { "cap_enter", test_cap_enter },
+ { "fork", test_fork },
+ { "pdfork", test_pdfork },
};
static const int tests_count = sizeof(tests) / sizeof(tests[0]);
More information about the p4-projects
mailing list