xref: /dflybsd-src/test/sysperf/lockmgr3.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 	fd = open("/tmp/lockmgr3.test", O_RDWR|O_CREAT, 0666);
31*367612aaSMatthew Dillon 	assert(fd >= 0);
32*367612aaSMatthew Dillon 	start_timing();
33*367612aaSMatthew Dillon 	while (stop_timing(0, NULL) == 0) {
34*367612aaSMatthew Dillon 		fstat(fd, &st);
35*367612aaSMatthew Dillon 		fstat(fd, &st);
36*367612aaSMatthew Dillon 		fstat(fd, &st);
37*367612aaSMatthew Dillon 		fstat(fd, &st);
38*367612aaSMatthew Dillon 		++count;
39*367612aaSMatthew Dillon 	}
40*367612aaSMatthew Dillon 	max = count * 4;
41*367612aaSMatthew Dillon 	close(fd);
42*367612aaSMatthew Dillon 
43*367612aaSMatthew Dillon 	if (ac > 1)
44*367612aaSMatthew Dillon 		n = strtol(av[1], NULL, 0);
45*367612aaSMatthew Dillon 	else
46*367612aaSMatthew Dillon 		n = 1;
47*367612aaSMatthew Dillon 
48*367612aaSMatthew Dillon 	start_timing();
49*367612aaSMatthew Dillon 	for (i = 0; i < n; ++i) {
50*367612aaSMatthew Dillon 		if (fork() == 0) {
51*367612aaSMatthew Dillon 			asprintf(&path, "/tmp/lockmgr.test");
52*367612aaSMatthew Dillon 			fd = open(path, O_RDWR|O_CREAT, 0666);
53*367612aaSMatthew Dillon 			assert(fd >= 0);
54*367612aaSMatthew Dillon 			for (count = 0; count < max; ++count) {
55*367612aaSMatthew Dillon 				fstat(fd, &st);
56*367612aaSMatthew Dillon 				fstat(fd, &st);
57*367612aaSMatthew Dillon 				fstat(fd, &st);
58*367612aaSMatthew Dillon 				fstat(fd, &st);
59*367612aaSMatthew Dillon 			}
60*367612aaSMatthew Dillon 			_exit(0);
61*367612aaSMatthew Dillon 		}
62*367612aaSMatthew Dillon 	}
63*367612aaSMatthew Dillon 	while (wait3(&status, 0, NULL) >= 0 || errno == EINTR)
64*367612aaSMatthew Dillon 		;
65*367612aaSMatthew Dillon 	stop_timing(max * n * 4, "lockmgr3");
66*367612aaSMatthew Dillon 
67*367612aaSMatthew Dillon 	return(0);
68*367612aaSMatthew Dillon }
69