Annotation of Net2/tests/benchmarks/gausspage.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Random page access with
                      3:  * a gaussian distribution.
                      4:  *
                      5:  * Allocate a large (zero fill on demand) address
                      6:  * space and fault the pages in a random gaussian
                      7:  * order.
                      8:  */
                      9: #include <math.h>
                     10: 
                     11: float  rnd(), gauss();
                     12: char   *valloc();
                     13: int    rand();
                     14: 
                     15: main(argc, argv)
                     16:        char *argv[];
                     17: {
                     18:        register int pn, i, niter, delta;
                     19:        register char *pages;
                     20:        float sd = 10.0;
                     21:        int npages = 4096, pagesize, debug = 0;
                     22:        char *name;
                     23: 
                     24:        name = argv[0];
                     25:        argc--, argv++;
                     26: again:
                     27:        if (argc < 1) {
                     28: usage:
                     29:                printf(
                     30: "usage: %s [ -d ] [ -k #Kb ] [ -s standard-deviation ] iterations\n", name);
                     31:                exit(1);
                     32:        }
                     33:        if (strcmp(*argv, "-s") == 0) {
                     34:                argc--, argv++;
                     35:                if (argc < 1)
                     36:                        goto usage;
                     37:                sscanf(*argv, "%f", &sd);
                     38:                if (sd <= 0) {
                     39:                        printf("%s: Bad standard deviation.\n", *argv);
                     40:                        exit(2);
                     41:                }
                     42:                argc--, argv++;
                     43:                goto again;
                     44:        }
                     45:        if (strcmp(*argv, "-k") == 0) {
                     46:                argc--, argv++;
                     47:                if (argc < 1)
                     48:                        goto usage;
                     49:                npages = atoi(*argv);
                     50:                if (npages <= 0) {
                     51:                        printf("%s: Bad virtual memory size.\n", *argv);
                     52:                        exit(2);
                     53:                }
                     54:                argc--, argv++;
                     55:                goto again;
                     56:        }
                     57:        if (strcmp(*argv, "-d") == 0) {
                     58:                argc--, argv++;
                     59:                debug++;
                     60:                goto again;
                     61:        }
                     62:        niter = atoi(*argv);
                     63:        pagesize = getpagesize();
                     64:        npages /= pagesize / 1024;
                     65:        pages = valloc(npages, pagesize);
                     66:        if (pages == (char *)0) {
                     67:                printf("Can't allocate %d pages (%2.1f megabytes).\n",
                     68:                    npages, (npages*pagesize) / (1024. * 1024.));
                     69:                exit(3);
                     70:        }
                     71:        if (pagesize != 1024)
                     72:                printf("Pagesize %dKb\n", pagesize / 1024);
                     73:        pn = 0;
                     74:        for (i = 0; i < niter; i++) {
                     75:                delta = gauss(sd, 0.0);
                     76:                while (pn + delta < 0 || pn + delta > npages)
                     77:                        delta = gauss(sd, 0.0);
                     78:                pn += delta;
                     79:                if (debug)
                     80:                        printf("touch page %d\n", pn);
                     81:                else
                     82:                        pages[pn * pagesize] = 1;
                     83:        }
                     84: }
                     85: 
                     86: float
                     87: gauss(sd, mean)
                     88:        float sd, mean;
                     89: {
                     90:        register float qa, qb;
                     91: 
                     92:        qa = sqrt(log(rnd()) * -2.0);
                     93:        qb = 3.14159 * rnd();
                     94:        return (qa * cos(qb) * sd + mean);
                     95: }
                     96: 
                     97: float
                     98: rnd()
                     99: {
                    100:        static int seed = 1;
                    101:        static int biggest = 0x7fffffff;
                    102: 
                    103:        return ((float)rand(seed) / (float)biggest);
                    104: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.