1*367612aaSMatthew Dillon /*
2*367612aaSMatthew Dillon * varsym..c
3*367612aaSMatthew Dillon *
4*367612aaSMatthew Dillon * varsym [threads]
5*367612aaSMatthew Dillon *
6*367612aaSMatthew Dillon * tests shared lock using varsym_get()
7*367612aaSMatthew Dillon */
8*367612aaSMatthew Dillon
9*367612aaSMatthew Dillon #include "blib.h"
10*367612aaSMatthew Dillon #include <sys/file.h>
11*367612aaSMatthew Dillon #include <assert.h>
12*367612aaSMatthew Dillon
13*367612aaSMatthew Dillon int
main(int ac,char ** av)14*367612aaSMatthew Dillon main(int ac, char **av)
15*367612aaSMatthew Dillon {
16*367612aaSMatthew Dillon long long count = 0;
17*367612aaSMatthew Dillon long long max;
18*367612aaSMatthew Dillon char c;
19*367612aaSMatthew Dillon int n;
20*367612aaSMatthew Dillon int i;
21*367612aaSMatthew Dillon int j;
22*367612aaSMatthew Dillon int fd;
23*367612aaSMatthew Dillon int status;
24*367612aaSMatthew Dillon char *path;
25*367612aaSMatthew Dillon char buf[256];
26*367612aaSMatthew Dillon struct stat st;
27*367612aaSMatthew Dillon
28*367612aaSMatthew Dillon printf("timing standard fstat() syscall\n");
29*367612aaSMatthew Dillon
30*367612aaSMatthew Dillon close(open("/tmp/lockmgr2.test", O_RDWR|O_CREAT, 0666));
31*367612aaSMatthew Dillon start_timing();
32*367612aaSMatthew Dillon while (stop_timing(0, NULL) == 0) {
33*367612aaSMatthew Dillon fd = open("/tmp/lockmgr2.test", O_RDONLY, 0666);
34*367612aaSMatthew Dillon assert(fd >= 0);
35*367612aaSMatthew Dillon fstat(fd, &st);
36*367612aaSMatthew Dillon close(fd);
37*367612aaSMatthew Dillon ++count;
38*367612aaSMatthew Dillon }
39*367612aaSMatthew Dillon max = count;
40*367612aaSMatthew Dillon close(fd);
41*367612aaSMatthew Dillon
42*367612aaSMatthew Dillon if (ac > 1)
43*367612aaSMatthew Dillon n = strtol(av[1], NULL, 0);
44*367612aaSMatthew Dillon else
45*367612aaSMatthew Dillon n = 1;
46*367612aaSMatthew Dillon
47*367612aaSMatthew Dillon start_timing();
48*367612aaSMatthew Dillon for (i = 0; i < n; ++i) {
49*367612aaSMatthew Dillon asprintf(&path, "/tmp/lockmgr.test");
50*367612aaSMatthew Dillon close(open(path, O_RDWR|O_CREAT, 0666));
51*367612aaSMatthew Dillon if (fork() == 0) {
52*367612aaSMatthew Dillon for (count = 0; count < max; ++count) {
53*367612aaSMatthew Dillon fd = open(path, O_RDONLY, 0666);
54*367612aaSMatthew Dillon assert(fd >= 0);
55*367612aaSMatthew Dillon fstat(fd, &st);
56*367612aaSMatthew Dillon close(fd);
57*367612aaSMatthew Dillon }
58*367612aaSMatthew Dillon _exit(0);
59*367612aaSMatthew Dillon }
60*367612aaSMatthew Dillon }
61*367612aaSMatthew Dillon while (wait3(&status, 0, NULL) >= 0 || errno == EINTR)
62*367612aaSMatthew Dillon ;
63*367612aaSMatthew Dillon stop_timing(max * n, "lockmgr2");
64*367612aaSMatthew Dillon
65*367612aaSMatthew Dillon return(0);
66*367612aaSMatthew Dillon }
67