Esempio n. 1
0
static int run_test(void)
{
	int ret, i;

	ret = sync_test();
	if (ret)
		return ret;

	clock_gettime(CLOCK_MONOTONIC, &start);
	for (i = 0; i < opts.iterations; i++) {
		ret = opts.dst_addr ? send_xfer(opts.transfer_size) :
				 recv_xfer(opts.transfer_size);
		if (ret)
			return ret;

		ret = opts.dst_addr ? recv_xfer(opts.transfer_size) :
				 send_xfer(opts.transfer_size);
		if (ret)
			return ret;
	}
	clock_gettime(CLOCK_MONOTONIC, &end);

	if (opts.machr)
		show_perf_mr(opts.transfer_size, opts.iterations, &start, &end, 2, opts.argc, opts.argv);
	else
		show_perf(test_name, opts.transfer_size, opts.iterations, &start, &end, 2);

	return 0;
}
Esempio n. 2
0
static int run_test(void)
{
	int ret, i, t;

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

	gettimeofday(&start, NULL);
	for (i = 0; i < iterations; i++) {
		for (t = 0; t < transfer_count; t++) {
			ret = dst_addr ? send_xfer(transfer_size) :
					 recv_xfer(transfer_size);
			if (ret)
				goto out;
		}

		for (t = 0; t < transfer_count; t++) {
			ret = dst_addr ? recv_xfer(transfer_size) :
					 send_xfer(transfer_size);
			if (ret)
				goto out;
		}
	}
	gettimeofday(&end, NULL);
	show_perf();
	ret = 0;

out:
	return ret;
}
Esempio n. 3
0
static int run_test(void)
{
	int ret, i;

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

	clock_gettime(CLOCK_MONOTONIC, &start);
	for (i = 0; i < iterations; i++) {
		ret = dst_addr ? send_xfer(transfer_size) :
				 recv_xfer(transfer_size);
		if (ret)
			goto out;

		ret = dst_addr ? recv_xfer(transfer_size) :
				 send_xfer(transfer_size);
		if (ret)
			goto out;
	}
	clock_gettime(CLOCK_MONOTONIC, &end);
	show_perf(test_name, transfer_size, iterations, &start, &end, 2);
	ret = 0;

out:
	return ret;
}
Esempio n. 4
0
static int sync_test(void)
{
	int ret;

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

	return dst_addr ? recv_xfer(16) : send_xfer(16);
}
Esempio n. 5
0
static int run_test(void)
{
	int ret, i, t;
	off_t offset;
	uint8_t marker = 0;

	poll_byte = buf + transfer_size - 1;
	*poll_byte = -1;
	offset = riomap(rs, buf, transfer_size, PROT_WRITE, 0, 0);
	if (offset ==  -1) {
		perror("riomap");
		ret = -1;
		goto out;
	}
	ret = sync_test();
	if (ret)
		goto out;

	gettimeofday(&start, NULL);
	for (i = 0; i < iterations; i++) {
		if (dst_addr) {
			for (t = 0; t < transfer_count - 1; t++) {
				ret = send_xfer(transfer_size);
				if (ret)
					goto out;
			}
			*poll_byte = (uint8_t) marker++;
			ret = send_xfer(transfer_size);
			if (ret)
				goto out;

			ret = recv_xfer(transfer_size, marker++);
		} else {
			ret = recv_xfer(transfer_size, marker++);
			if (ret)
				goto out;

			for (t = 0; t < transfer_count - 1; t++) {
				ret = send_xfer(transfer_size);
				if (ret)
					goto out;
			}
			*poll_byte = (uint8_t) marker++;
			ret = send_xfer(transfer_size);
		}
		if (ret)
			goto out;
	}
	gettimeofday(&end, NULL);
	show_perf();
	ret = riounmap(rs, buf, transfer_size);

out:
	return ret;
}
Esempio n. 6
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);
}
Esempio n. 7
0
static int sync_test(void)
{
	int ret;

	ret = wait_for_completion(scq, max_credits - credits);
	if (ret) {
		return ret;
	}
	credits = max_credits;

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

	return opts.dst_addr ? recv_xfer(16) : send_xfer(16);
}
Esempio n. 8
0
static int exchange_addr_key(void)
{
	local.addr = (uintptr_t) buf;
	local.key = fi_mr_key(mr);

	if (opts.dst_addr) {
		*(struct fi_rma_iov *)buf = local;
		send_xfer(sizeof local);
		recv_xfer(sizeof remote);
		remote = *(struct fi_rma_iov *)buf;
	} else {
		recv_xfer(sizeof remote);
		remote = *(struct fi_rma_iov *)buf;
		*(struct fi_rma_iov *)buf = local;
		send_xfer(sizeof local);
	}

	return 0;
}
Esempio n. 9
0
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;
}
Esempio n. 10
0
static int server_connect(void)
{
	int ret;
	struct fi_cq_entry comp;

	ret = common_setup();
	if (ret != 0)
		goto err;

	do {
		ret = fi_cq_read(rcq, &comp, 1);
		if (ret < 0 && ret != -FI_EAGAIN) {
			FT_PRINTERR("fi_cq_read", ret);
			return ret;
		}
	} while (ret == -FI_EAGAIN);

	ret = fi_av_insert(av, buf_ptr, 1, &remote_fi_addr, 0, NULL);
	if (ret != 1) {
		if (ret == 0) {
			fprintf(stderr, "Unable to resolve remote address 0x%x 0x%x\n",
				((uint32_t *)buf)[0], ((uint32_t *)buf)[1]);
			ret = -FI_EINVAL;
		} else {
			FT_PRINTERR("fi_av_insert", ret);
		}
		goto err;
	}

	ret = fi_recv(ep, buf, buffer_size, fi_mr_desc(mr), 0, buf);
	if (ret != 0) {
		FT_PRINTERR("fi_recv", ret);
		goto err;
	}

	ret = send_xfer(4);
	if (ret != 0)
		goto err;

	return 0;

err:
	free_ep_res();
	if (dom)
		fi_close(&dom->fid);

	if (fab)
		fi_close(&fab->fid);

	return ret;
}
Esempio n. 11
0
static int client_connect(void)
{
	int ret;
	socklen_t addrlen;
	struct sockaddr *sin;

	ret = common_setup();
	if (ret != 0)
		goto err;

	ret = getaddr(dst_addr, port, (struct sockaddr **) &sin,
			  (socklen_t *) &addrlen);
	if (ret != 0)
		goto err;

	ret = fi_connect(ep, sin, NULL, 0);
	if (ret) {
		printf("fi_connect %s\n", fi_strerror(-ret));
		goto err;
	}

	// send initial message to server
	ret = send_xfer(4);
	if (ret != 0)
		goto err;


	// wait for reply to know server is ready
	ret = recv_xfer(4);
	if (ret != 0)
		goto err;

	return 0;

err:
	free_ep_res();
	fi_close(&av->fid);
	fi_close(&ep->fid);
	fi_close(&dom->fid);
	fi_close(&fab->fid);
	return ret;
}
Esempio n. 12
0
static int client_connect(void)
{
	int ret;

	ret = common_setup();
	if (ret != 0)
		return ret;

	ret = ft_getdestaddr(opts.dst_addr, opts.dst_port, hints);
	if (ret != 0)
		goto err1;

	ret = fi_av_insert(av, hints->dest_addr, 1, &remote_fi_addr, 0, NULL);
	if (ret != 1) {
		FT_PRINTERR("fi_av_insert", ret);
		goto err2;
	}

	// send initial message to server with our local address
	memcpy(buf_ptr, fi->src_addr, fi->src_addrlen);
	ret = send_xfer(fi->src_addrlen);
	if (ret != 0)
		goto err2;

	// wait for reply to know server is ready
	ret = recv_xfer(4);
	if (ret != 0)
		goto err2;

	return 0;

err2:
	free(hints->dest_addr);
err1:
	free_ep_res();
	fi_close(&av->fid);
	fi_close(&dom->fid);
	fi_close(&fab->fid);

	return ret;
}
Esempio n. 13
0
static int server_connect(void)
{
	int ret;
	struct fi_cq_entry comp;

	ret = common_setup();
	if (ret != 0)
		goto err;

	do {
		ret = fi_cq_readfrom(rcq, &comp, sizeof comp, &client_addr);
		if (ret < 0) {
			printf("RCQ readfrom %d (%s)\n", ret, fi_strerror(-ret));
			return ret;
		}
	} while (ret == 0);

	if (client_addr == FI_ADDR_NOTAVAIL) {
		printf("Error getting address\n");
		goto err;
	}

	ret = fi_recv(ep, buf, buffer_size, fi_mr_desc(mr), buf);
	if (ret != 0) {
		printf("fi_recv %d (%s)\n", ret, fi_strerror(-ret));
		goto err;
	}

	ret = send_xfer(4);
	if (ret != 0)
		goto err;

	return 0;

err:
	free_ep_res();
	fi_close(&ep->fid);
	fi_close(&dom->fid);
	fi_close(&fab->fid);
	return ret;
}
static int init_av(void)
{
	int ret;

	if (opts.dst_addr) {
		/* Get local address blob. Find the addrlen first. We set addrlen
		 * as 0 and fi_getname will return the actual addrlen. */
		addrlen = 0;
		ret = fi_getname(&ep->fid, local_addr, &addrlen);
		if (ret != -FI_ETOOSMALL) {
			FT_PRINTERR("fi_getname", ret);
			return ret;
		}

		local_addr = malloc(addrlen);
		ret = fi_getname(&ep->fid, local_addr, &addrlen);
		if (ret) {
			FT_PRINTERR("fi_getname", ret);
			return ret;
		}

		ret = fi_av_insert(av, remote_addr, 1, &remote_fi_addr, 0,
				&fi_ctx_av);
		if (ret != 1) {
			FT_PRINTERR("fi_av_insert", ret);
			return ret;
		}

		/* Send local addr size and local addr */
		memcpy(tx_buf, &addrlen, sizeof(size_t));
		memcpy(tx_buf + sizeof(size_t), local_addr, addrlen);
		ret = send_xfer(sizeof(size_t) + addrlen);
		if (ret)
			return ret;

		/* Receive ACK from server */
		ret = recv_msg();
		if (ret)
			return ret;

	} else {
		/* Post a recv to get the remote address */
		ret = recv_msg();
		if (ret)
			return ret;

		memcpy(&addrlen, rx_buf, sizeof(size_t));
		remote_addr = malloc(addrlen);
		memcpy(remote_addr, rx_buf + sizeof(size_t), addrlen);

		ret = fi_av_insert(av, remote_addr, 1, &remote_fi_addr, 0,
				&fi_ctx_av);
		if (ret != 1) {
			FT_PRINTERR("fi_av_insert", ret);
			return ret;
		}

		/* Send ACK */
		ret = send_xfer(16);
		if (ret)
			return ret;
	}

	/* Post first recv */
	ret = fi_recv(ep, rx_buf, rx_size, fi_mr_desc(mr), remote_fi_addr,
			&fi_ctx_recv);
	if (ret)
		FT_PRINTERR("fi_recv", ret);

	return ret;
}