* Random page access with
* a gaussian distribution.
* Allocate a large (zero fill on demand) address
* space and fault the pages in a random gaussian
float sqrt(), log(), rnd(), cos(), gauss();
register int pn
, i
, niter
, delta
;
int npages
= 4096, pagesize
, debug
= 0;
"usage: %s [ -d ] [ -p #pages ] [ -s standard-deviation ] iterations\n", name
);
if (strcmp(*argv
, "-s") == 0) {
sscanf(*argv
, "%f", &sd
);
printf("%s: Bad standard deviation.\n", *argv
);
if (strcmp(*argv
, "-p") == 0) {
printf("%s: Bad page count.\n", *argv
);
if (strcmp(*argv
, "-d") == 0) {
pagesize
= getpagesize();
pages
= valloc(npages
*pagesize
);
if (pages
== (char *)0) {
printf("Can't allocate %d pages (%2.1f megabytes).\n",
npages
, (npages
*pagesize
) / (1024. * 1024.));
for (i
= 0; i
< niter
; i
++) {
while (pn
+ delta
< 0 || pn
+ delta
> npages
)
printf("touch page %d\n", pn
);
pages
[pn
* pagesize
] = 1;
qa
= sqrt(log(rnd()) * -2.0);
return (qa
* cos(qb
) * sd
+ mean
);
static int biggest
= 0x7fffffff;
return ((float)rand(seed
) / (float)biggest
);