コード例 #1
0
ファイル: lat_ctx.c プロジェクト: Toendex/relay
int
create_pipes(int p[][2], int procs)
{
	int	i;
	/*
	 * Get a bunch of pipes.
	 */
	morefds();
     	for (i = 0; i < procs; ++i) {
		if (pipe(p[i]) == -1) {
			return i;
		}
	}
	return procs;
}
コード例 #2
0
ファイル: lat_select.c プロジェクト: Maxlufs/CSE221
int
main(int ac, char **av)
{
	state_t state;
	int parallel = 1;
	int warmup = 0;
	int repetitions = -1;
	int c;
	char* usage = "[-n <#descriptors>] [-P <parallelism>] [-W <warmup>] [-N <repetitions>] file|tcp\n";
	char	buf[256];

	morefds();  /* bump fd_cur to fd_max */
	state.num = 200;
	while (( c = getopt(ac, av, "P:W:N:n:")) != EOF) {
		switch(c) {
		case 'P':
			parallel = atoi(optarg);
			if (parallel <= 0) lmbench_usage(ac, av, usage);
			break;
		case 'W':
			warmup = atoi(optarg);
			break;
		case 'N':
			repetitions = atoi(optarg);
			break;
		case 'n':
			state.num = bytes(optarg);
			break;
		default:
			lmbench_usage(ac, av, usage);
			break;
		}
	}

	if (optind + 1 != ac) {
		lmbench_usage(ac, av, usage);
	}

	if (streq("tcp", av[optind])) {
		state.fid_f = open_socket;
		server(&state);
		benchmp(initialize, doit, cleanup, 0, parallel, 
			warmup, repetitions, &state);
		sprintf(buf, "Select on %d tcp fd's", state.num);
		kill(state.pid, SIGKILL);
		waitpid(state.pid, NULL, 0);
		micro(buf, get_n());
	} else if (streq("file", av[optind])) {
		state.fid_f = open_file;
		server(&state);
		benchmp(initialize, doit, cleanup, 0, parallel, 
			warmup, repetitions, &state);
		unlink(state.fname);
		sprintf(buf, "Select on %d fd's", state.num);
		micro(buf, get_n());
	} else {
		lmbench_usage(ac, av, usage);
	}

	exit(0);
}
コード例 #3
0
int
benchmark_initworker(void *tsd)
{
    // pulls in code from lmbench main and initialize
    int		n = 0;
    /*
     *	initialize your state variables here first
     */
    tsd_t			*ts = (tsd_t *)tsd;
    int	N, fid, fd;

    /*
     * default number of file descriptors
     */
    //(void) fprintf(stderr, "benchmark_initworker\n");
    ts->num = 200;
    if (optn > 0) {
        ts->num = optn;
    }
    N = ts->num;
    //(void) fprintf(stderr, "benchmark_initworker ts->num is %i\n",ts->num);

    /*
     *	grab more file descriptors
     */

    morefds();

    ts->fid_f = open_file;
    server(ts);
    //(void) fprintf(stderr, "benchmark_initworker: returned from server call\n");
    /*
     * Initialize function from lmbench
     * for this test
     */
    fid = (*ts->fid_f)(ts);
    //(void) fprintf(stderr, "initworker: fid is %i\n",fid);
    if (fid <= 0) {
        perror("Could not open device");
        exit(1);
    }
    ts->max = 0;
    FD_ZERO(&(ts->set));
    //(void) fprintf(stderr, "initworker FD_ZERO: ts->set result is %i\n",ts->set);
    //(void) fprintf(stderr, "initworker: N is %i\n",N);
    for (n = 0; n < N; n++) {
        //(void) fprintf(stderr, "benchmark_initworker: in the loop - N is %i: n is %i\n",N, n);
        fd = dup(fid);
        //(void) fprintf(stderr, "benchmark_initworker: dup result is %i\n",fd);
        //(void) fprintf(stderr, "benchmark_initworker: errno result is %d - \"%s\"\n",errno, strerror(errno));

        if (fd == -1) break;
        if (fd > ts->max)
            ts->max = fd;
        FD_SET(fd, &(ts->set));
        //(void) fprintf(stderr, "initworker FD_SET: ts->set result is %i\n",ts->set);

    }
    //(void) fprintf(stderr, "benchmark_initworker: after second macro/loop\n");

    ts->max++;
    close(fid);
    //(void) fprintf(stderr, "benchmark_initworker: N is %i: n is %i\n",N, n);
    if (n != N)
        exit(1);
    /* end of initialize function */
    //(void) fprintf(stderr, "benchmark_initworker: about to exit\n");
    return (0);
}
コード例 #4
0
ファイル: lat_select.c プロジェクト: ash9211/graphene
int
main(int ac, char **av)
{
	char	c;
	int	n, N, fd, fid;
	pid_t	pid, ppid;
	char	buf[L_tmpnam+256];
	char	fname[L_tmpnam];
	char*	report_file = "Select on %d fd's";
	char*	report_tcp  = "Select on %d tcp fd's";
	char*	report;
	char*	usage = "lat_select tcp|file [n]\n";

	morefds();
	N = 200;
	fname[0] = 0;
	pid = 0;
	c = 0;
	nfds = 0;
	FD_ZERO(&set);
	report = report_file;

	if (ac != 2 && ac != 3) {
		fprintf(stderr, usage);
		exit(1);
	}

	if (streq(av[1], "tcp")) {
		report = report_tcp;
		
		/* Create a socket for clients to connect to */
		fd = tcp_server(TCP_SELECT, SOCKOPT_REUSE);
		if (fd <= 0) {
			perror("lat_select: Could not open tcp server socket");
			exit(1);
		}

		/* Start server process to accept client connections */
		ppid = getpid();
		switch(pid = fork()) {
		case 0:
			/* child server process */
			if (signal(SIGTERM, sigterm) == SIG_ERR) {
				perror("signal(SIGTERM, sigterm) failed");
				exit(1);
			}
			FD_SET(fd, &set);
			while (ppid == getppid()) {
				int newsock = tcp_accept(fd, SOCKOPT_NONE);
				if (newsock >= nfds) nfds = newsock + 1;
				FD_SET(newsock, &set);
			}
			sigterm(SIGTERM);
			/* NOTREACHED */
		case -1:
			/* error */
			perror("lat_select::server(): fork() failed");
			exit(1);
		default:
			break;
		}
		close(fd);
		fd = tcp_connect("127.0.0.1", TCP_SELECT, SOCKOPT_NONE);
		if (fd <= 0) {
			perror("lat_select: Could not open socket");
			exit(1);
		}
	} else if (streq(av[1], "file")) {
		/* Create a temporary file for clients to open */
		tmpnam(fname);
		fd = open(fname, O_RDWR|O_APPEND|O_CREAT, 0666);
		unlink(fname);
		if (fd <= 0) {
			char buf[L_tmpnam+128];
			sprintf(buf, 
				"lat_select: Could not create temp file %s", fname);
			perror(buf);
			exit(1);
		}
	} else {
		fprintf(stderr, usage);
		exit(1);
	}

	if (ac == 3) N = atoi(av[2]);

	for (n = 0; n < N; n++) {
		fid = dup(fd);
		if (fid == -1) break;
		if (fid >= nfds) nfds = fid + 1;
		FD_SET(fid, &set);
	}
	BENCH(doit(nfds, &set), 0);
	sprintf(buf, report, n);
	micro(buf, get_n());

	for (fid = 0; fid < nfds; fid++) {
		if (FD_ISSET(fid, &set)) {
			close(fid);
		}
	}
	close(fd);
	if (pid) kill(pid, SIGTERM);

	exit(0);
}