예제 #1
0
파일: bw.c 프로젝트: soniczhao/fabtests
static int run_test(void)
{
	int ret = 0, i;

	if ((ret = sync_test())) {
		goto out;
	}

	if (bidir || client) {
		gettimeofday(&start, NULL);
		for (i = 0; i < iterations; i++) {
			if ((ret = write_xfer(transfer_size))) {
				goto out;
			}
		}
		if ((ret = poll_all_sends())) {
			goto out;
		}
		gettimeofday(&end, NULL);
		show_perf();
	}

	if ((ret = sync_test())) {
		goto out;
	}

out:
	return ret;
}
예제 #2
0
파일: bw.c 프로젝트: soniczhao/fabtests
static int sync_test(void)
{
	int ret = 0;

	if (client) {
		*((uint64_t *)buf) = (uint64_t)buf;
		*((uint64_t *)buf + 1) = fi_mr_key(mr);
		if ((ret = send_xfer(sizeof(uint64_t)*2))) {
			return ret;
		}
		if ((ret = poll_all_sends())) {
			return ret;
		}
		if ((ret = recv_xfer(sizeof(uint64_t)*2))) {
			return ret;
		}
		if ((ret = poll_all_recvs())) {
			return ret;
		}
		rembuf = *((uint64_t *)buf);
		rkey = *((uint64_t *)buf + 1);
	} else {
		if ((ret = recv_xfer(sizeof(uint64_t)*2))) {
			return ret;
		}
		if ((ret = poll_all_recvs())) {
			return ret;
		}
		rembuf = *((uint64_t *)buf);
		rkey = *((uint64_t *)buf + 1);
		*((uint64_t *)buf) = (uint64_t)buf;
		*((uint64_t *)buf + 1) = fi_mr_key(mr);
		if ((ret = send_xfer(sizeof(uint64_t)*2))) {
			return ret;
		}
		if ((ret = poll_all_sends())) {
			return ret;
		}
	}

	return ret;
}
예제 #3
0
static int sync_test(void)
{
	int ret;

	while (credits < max_credits)
		poll_all_sends();

	ret = opts.dst_addr ? send_xfer(16) : recv_xfer(16);
	if (ret)
		return ret;

	return opts.dst_addr ? recv_xfer(16) : send_xfer(16);
}
예제 #4
0
static int run(void)
{
	int i, ret = 0;

	ret = opts.dst_addr ? client_connect() : server_connect();
	if (ret)
		return ret;

	if (!(opts.user_options & FT_OPT_SIZE)) {
		for (i = 0; i < TEST_CNT; i++) {
			if (test_size[i].option > opts.size_option)
				continue;
			opts.transfer_size = test_size[i].size;
			init_test(&opts, test_name, sizeof(test_name));
			ret = run_test();
			if (ret)
				goto out;
		}
	} else {
		init_test(&opts, test_name, sizeof(test_name));
		ret = run_test();
		if (ret)
			goto out;
	}
	
	while (credits < max_credits)
		poll_all_sends();
	
	ft_finalize(ep, scq, rcq, remote_fi_addr);
out:
	free_ep_res();
	ret = fi_close(&av->fid);
	if (ret != 0) {
		FT_PRINTERR("fi_close", ret);
	}
	ret = fi_close(&dom->fid);
	if (ret != 0) {
		FT_PRINTERR("fi_close", ret);
	}
	ret = fi_close(&fab->fid);
	if (ret != 0) {
		FT_PRINTERR("fi_close", ret);
	}

	return ret;
}
예제 #5
0
static int run(void)
{
	int i, ret = 0;

	ret = dst_addr ? client_connect() : server_connect();
	if (ret)
		return ret;

	printf("%-10s%-8s%-8s%-8s%-8s%8s %10s%13s\n",
	       "name", "bytes", "xfers", "iters", "total", "time",
		   "Gb/sec", "usec/xfer");

	if (!custom) {
		for (i = 0; i < TEST_CNT; i++) {
			if (test_size[i].option > size_option ||
				(max_msg_size && test_size[i].size > max_msg_size)) {
				continue;
			}
			init_test(test_size[i].size);
			run_test();
		}
	} else {

		ret = run_test();
	}

	while (credits < max_credits)
		poll_all_sends();

	fi_shutdown(ep, 0);
	fi_close(&ep->fid);
	free_ep_res();
	fi_close(&dom->fid);
	fi_close(&fab->fid);
	return ret;
}