Пример #1
0
static na_return_t
msg_unexpected_send_cb(const struct na_cb_info *callback_info)
{
    struct na_test_params *params = (struct na_test_params *) callback_info->arg;
    na_return_t ret = NA_SUCCESS;

    if (callback_info->ret == NA_CANCELED) {
        /* Try again */
        printf("NA_Msg_send_unexpected() was successfully canceled\n");
        sprintf(params->send_buf, "Hello again Server!");
        ret = NA_Msg_send_unexpected(params->na_class, params->context,
            NULL, NULL, params->send_buf, params->send_buf_len, params->server_addr,
            NA_TEST_SEND_TAG, NA_OP_ID_IGNORE);
        if (ret != NA_SUCCESS) {
            fprintf(stderr, "Could not start send of unexpected message\n");
        }
        return ret;
    } else {
        printf("NA_Msg_send_unexpected() was not canceled\n");
    }

    if (callback_info->ret != NA_SUCCESS) {
        return ret;
    }

    return ret;
}
Пример #2
0
/* NA test routines */
static int
test_send(struct na_test_params *params, na_tag_t send_tag)
{
    na_return_t na_ret;

    /* Send a message to addr */
    sprintf(params->send_buf, "Hello Server!");

    /* Preposting response */
    na_ret = NA_Msg_recv_expected(params->network_class, params->context,
            &msg_expected_recv_cb, params, params->recv_buf,
            params->recv_buf_len, params->server_addr, send_tag + 1,
            NA_OP_ID_IGNORE);
    if (na_ret != NA_SUCCESS) {
        fprintf(stderr, "Could not prepost recv of expected message\n");
        return EXIT_FAILURE;
    }

    na_ret = NA_Msg_send_unexpected(params->network_class, params->context,
            NULL, NULL, params->send_buf, params->send_buf_len,
            params->server_addr, send_tag, NA_OP_ID_IGNORE);
    if (na_ret != NA_SUCCESS) {
        fprintf(stderr, "Could not start send of unexpected message\n");
        return EXIT_FAILURE;
    }

    return EXIT_SUCCESS;
}
Пример #3
0
/* NA test routines */
static int
test_send(struct na_test_params *params)
{
    na_tag_t send_tag = NA_TEST_SEND_TAG;
    na_op_id_t op_id = NA_OP_ID_NULL;
    na_return_t na_ret;

    /* Send a message to addr */
    sprintf(params->send_buf, "Hello Server!");

    /* Preposting response */
    na_ret = NA_Msg_recv_expected(params->na_class, params->context,
        msg_expected_recv_cb, params, params->recv_buf, params->recv_buf_len,
        params->recv_buf_plugin_data, params->server_addr, 0, send_tag + 1,
        &op_id);
    if (na_ret != NA_SUCCESS) {
        fprintf(stderr, "Could not prepost recv of expected message\n");
        return EXIT_FAILURE;
    }

    /* Cancel and repost message */
    na_ret = NA_Cancel(params->na_class, params->context, op_id);
    if (na_ret != NA_SUCCESS) {
        fprintf(stderr, "Could not cancel recv of expected message\n");
        return EXIT_FAILURE;
    }

    na_ret = NA_Msg_recv_expected(params->na_class, params->context,
        msg_expected_recv_cb, params, params->recv_buf, params->recv_buf_len,
        params->recv_buf_plugin_data, params->server_addr, 0, send_tag + 1,
        NA_OP_ID_IGNORE);
    if (na_ret != NA_SUCCESS) {
        fprintf(stderr, "Could not prepost recv of expected message\n");
        return EXIT_FAILURE;
    }

    /* Try to cancel unexpected send */
    op_id = NA_OP_ID_NULL;
    na_ret = NA_Msg_send_unexpected(params->na_class, params->context,
        msg_unexpected_send_cb, params, params->send_buf, params->send_buf_len,
        params->send_buf_plugin_data, params->server_addr, 0, send_tag, &op_id);
    if (na_ret != NA_SUCCESS) {
        fprintf(stderr, "Could not start send of unexpected message\n");
        return EXIT_FAILURE;
    }

    na_ret = NA_Cancel(params->na_class, params->context, op_id);
    if (na_ret != NA_SUCCESS) {
        fprintf(stderr, "Could not cancel send of unexpected message\n");
        return EXIT_FAILURE;
    }

    return EXIT_SUCCESS;
}
Пример #4
0
/*---------------------------------------------------------------------------*/
static na_return_t
na_test_send_finalize(struct na_test_lat_info *na_test_lat_info)
{
    char *send_buf = NULL, *recv_buf = NULL;
    void *send_buf_data, *recv_buf_data;
    hg_request_t *recv_request = NULL;
    na_size_t unexpected_header_size =
        NA_Msg_get_unexpected_header_size(na_test_lat_info->na_class);
    na_size_t buf_size =
        (unexpected_header_size) ? unexpected_header_size + 1 : 1;
    na_return_t ret = NA_SUCCESS;

    /* Prepare send_buf */
    send_buf = NA_Msg_buf_alloc(na_test_lat_info->na_class, buf_size,
        &send_buf_data);
    NA_Msg_init_unexpected(na_test_lat_info->na_class, send_buf, buf_size);

    /* Prepare recv buf */
    recv_buf = NA_Msg_buf_alloc(na_test_lat_info->na_class, buf_size,
        &recv_buf_data);
    memset(recv_buf, 0, buf_size);

    recv_request = hg_request_create(na_test_lat_info->request_class);

    /* Post recv */
    ret = NA_Msg_recv_expected(na_test_lat_info->na_class,
        na_test_lat_info->context, na_test_recv_expected_cb, recv_request,
        recv_buf, buf_size, recv_buf_data, na_test_lat_info->target_addr, 0,
        NA_TEST_TAG_DONE, NA_OP_ID_IGNORE);
    if (ret != NA_SUCCESS) {
        NA_LOG_ERROR("NA_Msg_recv_expected() failed");
        goto done;
    }

    /* Post send */
    ret = NA_Msg_send_unexpected(na_test_lat_info->na_class,
        na_test_lat_info->context, NULL, NULL, send_buf, buf_size,
        send_buf_data, na_test_lat_info->target_addr, 0, NA_TEST_TAG_DONE,
        NA_OP_ID_IGNORE);
    if (ret != NA_SUCCESS) {
        NA_LOG_ERROR("NA_Msg_send_unexpected() failed");
        goto done;
    }

    hg_request_wait(recv_request, NA_MAX_IDLE_TIME, NULL);

done:
    /* Clean up resources */
    hg_request_destroy(recv_request);
    NA_Msg_buf_free(na_test_lat_info->na_class, send_buf, send_buf_data);
    NA_Msg_buf_free(na_test_lat_info->na_class, recv_buf, recv_buf_data);
    return ret;
}
Пример #5
0
/* NA test routines */
static int
test_msg_forward(struct na_test_params *params)
{
    na_return_t na_ret;
    int ret = EXIT_SUCCESS;

    /* Send a message to addr */
    NA_Msg_init_unexpected(params->na_class, params->send_buf,
        params->send_buf_len);
    sprintf(params->send_buf +
        NA_Msg_get_unexpected_header_size(params->na_class), "Hello Server!");

    /* Preposting response */
    na_ret = NA_Msg_recv_expected(params->na_class, params->context,
        msg_expected_recv_cb, params, params->recv_buf, params->recv_buf_len,
        params->recv_buf_plugin_data, params->server_addr, 0,
        NA_TEST_SEND_TAG + 1, NA_OP_ID_IGNORE);
    if (na_ret != NA_SUCCESS) {
        NA_LOG_ERROR("Could not prepost recv of expected message");
        ret = EXIT_FAILURE;
        goto done;
    }

    na_ret = NA_Msg_send_unexpected(params->na_class, params->context,
        msg_unexpected_send_cb, params, params->send_buf, params->send_buf_len,
        params->send_buf_plugin_data, params->server_addr, 0, NA_TEST_SEND_TAG,
        NA_OP_ID_IGNORE);
    if (na_ret != NA_SUCCESS) {
        NA_LOG_ERROR("Could not start send of unexpected message");
        ret = EXIT_FAILURE;
        goto done;
    }

done:
    return ret;
}
Пример #6
0
/*---------------------------------------------------------------------------*/
static na_return_t
na_test_measure_latency(struct na_test_lat_info *na_test_lat_info,
    na_size_t size)
{
    char *send_buf = NULL, *recv_buf = NULL;
    void *send_buf_data, *recv_buf_data;
    size_t loop = (size_t) na_test_lat_info->na_test_info.loop * 100;
    size_t skip = SMALL_SKIP;
    na_op_id_t send_op_id;
    na_op_id_t recv_op_id;
    hg_request_t *recv_request = NULL;
    na_size_t unexpected_header_size =
        NA_Msg_get_unexpected_header_size(na_test_lat_info->na_class);
    na_size_t buf_size =
        size < unexpected_header_size ? unexpected_header_size : size;
    size_t avg_iter;
    double time_read = 0, read_lat;
    na_return_t ret = NA_SUCCESS;
    size_t i;

    /* Prepare send_buf */
    if (buf_size == unexpected_header_size)
        buf_size++;
    send_buf = NA_Msg_buf_alloc(na_test_lat_info->na_class, buf_size,
        &send_buf_data);
    NA_Msg_init_unexpected(na_test_lat_info->na_class, send_buf, buf_size);
    for (i = unexpected_header_size; i < buf_size; i++)
        send_buf[i] = (char) i;

    /* Prepare recv buf */
    recv_buf = NA_Msg_buf_alloc(na_test_lat_info->na_class, buf_size,
        &recv_buf_data);
    memset(recv_buf, 0, buf_size);

    /* Create operation IDs */
    send_op_id = NA_Op_create(na_test_lat_info->na_class);
    recv_op_id = NA_Op_create(na_test_lat_info->na_class);

    recv_request = hg_request_create(na_test_lat_info->request_class);

    /* Warm up */
    for (i = 0; i < skip; i++) {
        /* Post recv */
        ret = NA_Msg_recv_expected(na_test_lat_info->na_class,
            na_test_lat_info->context, na_test_recv_expected_cb, recv_request,
            recv_buf, buf_size, recv_buf_data, na_test_lat_info->target_addr, 0,
            0, &recv_op_id);
        if (ret != NA_SUCCESS) {
            NA_LOG_ERROR("NA_Msg_recv_expected() failed");
            goto done;
        }

        /* Post send */
        ret = NA_Msg_send_unexpected(na_test_lat_info->na_class,
            na_test_lat_info->context, NULL, NULL, send_buf, buf_size,
            send_buf_data, na_test_lat_info->target_addr, 0, 0, &send_op_id);
        if (ret != NA_SUCCESS) {
            NA_LOG_ERROR("NA_Msg_send_unexpected() failed");
            goto done;
        }

        hg_request_wait(recv_request, NA_MAX_IDLE_TIME, NULL);
        hg_request_reset(recv_request);
    }

    NA_Test_barrier(&na_test_lat_info->na_test_info);

    /* Actual benchmark */
    for (avg_iter = 0; avg_iter < loop; avg_iter++) {
        hg_time_t t1, t2;

        hg_time_get_current(&t1);

        /* Post recv */
        ret = NA_Msg_recv_expected(na_test_lat_info->na_class,
            na_test_lat_info->context, na_test_recv_expected_cb, recv_request,
            recv_buf, buf_size, recv_buf_data, na_test_lat_info->target_addr, 0,
            1, &recv_op_id);
        if (ret != NA_SUCCESS) {
            NA_LOG_ERROR("NA_Msg_recv_expected() failed");
            goto done;
        }

        /* Post send */
        ret = NA_Msg_send_unexpected(na_test_lat_info->na_class,
            na_test_lat_info->context, NULL, NULL, send_buf, buf_size,
            send_buf_data, na_test_lat_info->target_addr, 0, 1,
            &send_op_id);
        if (ret != NA_SUCCESS) {
            NA_LOG_ERROR("NA_Msg_send_unexpected() failed");
            goto done;
        }

        hg_request_wait(recv_request, NA_MAX_IDLE_TIME, NULL);
        NA_Test_barrier(&na_test_lat_info->na_test_info);
        hg_time_get_current(&t2);
        time_read += hg_time_to_double(hg_time_subtract(t2, t1));

        hg_request_reset(recv_request);

#ifdef MERCURY_TESTING_HAS_VERIFY_DATA
    /* Check recv buf */
    const char *recv_buf_ptr = (const char*) recv_buf;

    for (i = NA_Msg_get_unexpected_header_size(na_test_lat_info->na_class);
        i < buf_size; i++) {
        if (recv_buf_ptr[i] != (char) i) {
            fprintf(stderr, "Error detected in bulk transfer, buf[%d] = %d, "
                "was expecting %d!\n", (int) i, (char) recv_buf_ptr[i],
                (char) i);
            break;
        }
    }
#endif

    /* At this point we have received everything so work out the bandwidth */
#ifdef MERCURY_TESTING_PRINT_PARTIAL
        read_lat = time_read * 1.0e6
            / (double) ((avg_iter + 1) * 2 *
                (unsigned int) na_test_lat_info->na_test_info.mpi_comm_size);
        if (na_test_lat_info->na_test_info.mpi_comm_rank == 0)
            fprintf(stdout, "%-*d%*.*f\r", 10, (int) size, NWIDTH,
                NDIGITS, read_lat);
#endif
    }
#ifndef MERCURY_TESTING_PRINT_PARTIAL
    read_lat = time_read * 1.0e6
        / (double) (loop * 2 *
            (unsigned int) na_test_lat_info->na_test_info.mpi_comm_size);
    if (na_test_lat_info->na_test_info.mpi_comm_rank == 0)
        fprintf(stdout, "%-*d%*.*f", 10, (int) size, NWIDTH, NDIGITS,
            read_lat);
#endif
    if (na_test_lat_info->na_test_info.mpi_comm_rank == 0)
        fprintf(stdout, "\n");

done:
    /* Clean up resources */
    hg_request_destroy(recv_request);
    NA_Op_destroy(na_test_lat_info->na_class, send_op_id);
    NA_Op_destroy(na_test_lat_info->na_class, recv_op_id);
    NA_Msg_buf_free(na_test_lat_info->na_class, send_buf, send_buf_data);
    NA_Msg_buf_free(na_test_lat_info->na_class, recv_buf, recv_buf_data);
    return ret;
}