Пример #1
0
int ft_run_test()
{
	int ret;

	ret = ft_init_control();
	if (ret) {
		FT_PRINTERR("ft_init_control", ret);
		goto cleanup;
	}

	ret = ft_open_control();
	if (ret) {
		FT_PRINTERR("ft_open_control", ret);
		goto cleanup;
	}
	if (test_info.ep_type == FI_EP_MSG && listen_sock >= 0) {
		ret = ft_open_passive();
		if (ret) {
			FT_PRINTERR("ft_open_passive", ret);
			goto cleanup;
		}
	}
	else {
		ret = ft_open_active();
		if (ret) {
			FT_PRINTERR("ft_open_active", ret);
			goto cleanup;
		}
	}

	ft_sock_sync(0);

	ret = ft_enable_comm();
	if (ret) {
		FT_PRINTERR("ft_enable_comm", ret);
		goto cleanup;
	}

	switch (test_info.test_type) {
	case FT_TEST_LATENCY:
		ret = ft_run_latency();
		if (ret)
			FT_PRINTERR("ft_run_latency", ret);
		break;
	case FT_TEST_BANDWIDTH:
		ret = ft_run_bandwidth();
		if (ret)
			FT_PRINTERR("ft_run_bandwidth", ret);
		break;
	default:
		ret = -FI_ENOSYS;
		break;
	}

	ft_sync_test(0);
cleanup:
	ft_cleanup();

	return ret ? ret : -ft_ctrl.error;
}
Пример #2
0
static int ft_sync_test(int value)
{
	int ret;

	ret = ft_reset_ep();
	if (ret)
		return ret;

	return ft_sock_sync(value);
}
Пример #3
0
static int run(void)
{
	char *node, *service;
	uint64_t flags;
	int ret;
	size_t i;

	ret = ft_read_addr_opts(&node, &service, hints, &flags, &opts);
	if (ret)
		return ret;

	ret = opts.dst_addr ? client_setup() : server_setup();
	if (ret) {
		fprintf(stderr, "error: %s\n", fi_strerror(-ret));
		return ret;
	}

	/* Leave extra space for invalid size test */
	cm_data = calloc(1, cm_data_size + 1);
	if (!cm_data)
		return -FI_ENOMEM;

	entry = calloc(1, sizeof(*entry) + cm_data_size);
	if (!entry)
		return -FI_ENOMEM;

	if (opts.dst_addr) {
		ret = ft_sock_connect(opts.dst_addr, sock_service);
		if (ret)
			goto err2;
	} else {
		ret = ft_sock_listen(sock_service);
		if (ret)
			goto err2;
		ret = ft_sock_accept();
		if (ret)
			goto err1;
	}

	for (i = 1; i <= cm_data_size; i <<= 1) {
		printf("trying with data size: %zu\n", i);

		if (opts.dst_addr)
			ret = client(i);
		else
			ret = server(i);

		if (ret)
			goto err1;

		ret = ft_sock_sync(0);
		if (ret)
			goto err1;
	}

	/* Despite server not being setup to handle this, the client should fail
	 * with -FI_EINVAL since this exceeds its max data size.
	 */
	if (opts.dst_addr) {
		printf("trying with data size exceeding maximum: %zu\n",
				cm_data_size + 1);
		/* Don't call client since it produces an error message. */
		ret = client_connect(cm_data_size + 1);
		if (ret != -FI_EINVAL) {
			FT_ERR("expected -FI_EINVAL, got: [%d]:%s\n", ret,
				fi_strerror(-ret));
		} else {
			ret = FI_SUCCESS;
		}
	}

err1:
	ft_sock_shutdown(sock);
err2:
	free(entry);
	return ret;
}