|
|
1.1 root 1: /*
2: * Random page access benchmark.
3: */
4: #include <sys/vadvise.h>
5:
6: char *valloc();
7: int rand();
8:
9: main(argc, argv)
10: char *argv[];
11: {
12: register int npages = 4096, pagesize, pn, i, niter;
13: int vflag = 0, debug = 0;
14: char *pages, *name;
15:
16: name = argv[0];
17: argc--, argv++;
18: again:
19: if (argc < 1) {
20: usage:
21: printf("usage: %s [ -d ] [ -v ] [ -k #Kb ] niter\n", name);
22: exit(1);
23: }
24: if (strcmp(*argv, "-k") == 0) {
25: argc--, argv++;
26: if (argc < 1)
27: goto usage;
28: npages = atoi(*argv);
29: if (npages <= 0) {
30: printf("%s: Bad virtual memory size.\n", *argv);
31: exit(2);
32: }
33: argc--, argv++;
34: goto again;
35: }
36: if (strcmp(*argv, "-v") == 0) {
37: argc--, argv++;
38: vflag++;
39: goto again;
40: }
41: if (strcmp(*argv, "-d") == 0) {
42: argc--, argv++;
43: debug++;
44: goto again;
45: }
46: niter = atoi(*argv);
47: pagesize = getpagesize();
48: npages /= pagesize / 1024;
49: pages = valloc(npages, pagesize);
50: if (pages == (char *)0) {
51: printf("Can't allocate %d pages (%2.1f megabytes).\n",
52: npages, (npages * pagesize) / (1024. * 1024.));
53: exit(3);
54: }
55: if (pagesize != 1024)
56: printf("Pagesize %dKb\n", pagesize / 1024);
57: if (vflag)
58: vadvise(VA_ANOM);
59: for (i = 0; i < niter; i++) {
60: pn = random() % npages;
61: if (debug)
62: printf("touch page %d\n", pn);
63: pages[pagesize * pn] = 1;
64: }
65: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.