
/* Code covered under 3-Clause BSD License - see LICENSE file for details */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#include "conf.h"

#define DEBUG 0		/* set to 1 to switch on */

int	rand();
void	usage(char *);


void
usage(name)
	char	*name;
{
	printf("usage: %s [ -p #pages ] [ #iterations ]\n", name);
}


int
main(argc, argv)
	int	argc;
	char	*argv[];
{
	register int npages, pagesize, pn, i, niter;
	char *pages, *name;

	npages = DEFAULT_NPAGES;

	name = argv[0];
	argc--, argv++;

	if ((argc < 2) || (argc > 2)) {
		usage(name);
		exit(1);
	}

	npages = atoi(*argv);

	if (npages <= 0) {
		printf("%s: bad number of pages\n", *argv);
		exit(2);
	}

	argc--, argv++;
	niter = atoi(*argv);
	pagesize = getpagesize();
	pages = valloc(npages * pagesize);

	if (pages == (char *)0) {
		printf("cannot allocate %d pages (%2.1f megabytes)\n",
		    npages, (npages * pagesize) / (1024. * 1024.));
	}

	for (i = 0; i < niter; i++) {
		pn = random() % npages;
		if(DEBUG)
			printf("touch page %d\n", pn);
		pages[pagesize * pn] = 1;
	}

	return 0;
}


