xref: /dflybsd-src/test/sysperf/lockmgr2.c (revision 367612aa80b4fde9fb3dfd4922a93d0547222a7a)
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