|
|
1.1 root 1: /*
2: * Context switching benchmark.
3: *
4: * Force system to context switch 2*nsigs
5: * times by forking and exchanging signals.
6: * To calculate system overhead for a context
7: * switch, the signocsw program must be run
8: * with nsigs. Overhead is then estimated by
9: * t1 = time csw <n>
10: * t2 = time signocsw <n>
11: * overhead = t1 - 2 * t2;
12: */
13: #include <signal.h>
14:
15: int sigsub();
16: int otherpid;
17: int nsigs;
18:
19: main(argc, argv)
20: char *argv[];
21: {
22: int pid;
23:
24: if (argc < 2) {
25: printf("usage: %s nsignals\n", argv[0]);
26: exit(1);
27: }
28: nsigs = atoi(argv[1]);
29: signal(SIGALRM, sigsub);
30: otherpid = getpid();
31: pid = fork();
32: if (pid != 0) {
33: otherpid = pid;
34: kill(otherpid, SIGALRM);
35: }
36: for (;;)
37: sigpause(0);
38: }
39:
40: sigsub()
41: {
42: static mustreset = 1;
43: int (*osig)();
44:
45: if (mustreset) {
46: osig = signal(SIGALRM, sigsub);
47: if (osig == sigsub)
48: mustreset = 0;
49: }
50: kill(otherpid, SIGALRM);
51: if (--nsigs <= 0)
52: exit(0);
53: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.