Flush and print entries on async, request, and receive queues after any data transfer error. Will help identify failing operation during operations without completion events requested. Fix -B0 so burst size of 0 works.
Signed-off-by: Arlin Davis <[email protected]> --- test/dtest/dtest.c | 61 ++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 48 insertions(+), 13 deletions(-) diff --git a/test/dtest/dtest.c b/test/dtest/dtest.c index d099c95..6ff7798 100755 --- a/test/dtest/dtest.c +++ b/test/dtest/dtest.c @@ -61,7 +61,7 @@ #define ntohll _byteswap_uint64 #define htonll _byteswap_uint64 -#else // _WIN32 || _WIN64 +#else // _WIN32 || _WIN64 #include <endian.h> #include <byteswap.h> @@ -89,7 +89,7 @@ #define ntohll(x) bswap_64(x) #endif -#endif // _WIN32 || _WIN64 +#endif // _WIN32 || _WIN64 /* Debug: 1 == connect & close only, otherwise full-meal deal */ #define CONNECT_ONLY 0 @@ -229,6 +229,37 @@ DAT_RETURN do_ping_pong_msg(void); #define LOGPRINTF if (verbose) printf +void flush_evds(void) +{ + DAT_EVENT event; + + /* Flush async error queue */ + printf("%d ERR: Checking ASYNC EVD...\n", getpid()); + while (dat_evd_dequeue(h_async_evd, &event) == DAT_SUCCESS) { + printf(" ASYNC EVD ENTRY: handle=%p reason=%d\n", + event.event_data.asynch_error_event_data.dat_handle, + event.event_data.asynch_error_event_data.reason); + } + /* Flush receive queue */ + printf("%d ERR: Checking RECEIVE EVD...\n", getpid()); + while (dat_evd_dequeue(h_dto_rcv_evd, &event) == DAT_SUCCESS) { + printf(" RCV EVD ENTRY: op=%d stat=%d ln=%d ck="F64x"\n", + event.event_data.dto_completion_event_data.operation, + event.event_data.dto_completion_event_data.status, + event.event_data.dto_completion_event_data.transfered_length, + event.event_data.dto_completion_event_data.user_cookie.as_64); + } + /* Flush request queue */ + printf("%d ERR: Checking REQUEST EVD...\n", getpid()); + while (dat_evd_dequeue(h_dto_req_evd, &event) == DAT_SUCCESS) { + printf(" REQ EVD ENTRY: op=%d stat=%d ln=%d ck="F64x"\n", + event.event_data.dto_completion_event_data.operation, + event.event_data.dto_completion_event_data.status, + event.event_data.dto_completion_event_data.transfered_length, + event.event_data.dto_completion_event_data.user_cookie.as_64); + } +} + int main(int argc, char **argv) { int i, c; @@ -305,8 +336,8 @@ int main(int argc, char **argv) fflush(stdout); /* allocate send and receive buffers */ - if (((rbuf = malloc(buf_len * burst)) == NULL) || - ((sbuf = malloc(buf_len * burst)) == NULL)) { + if (((rbuf = malloc(buf_len * (burst+1))) == NULL) || + ((sbuf = malloc(buf_len * (burst+1))) == NULL)) { perror("malloc"); exit(1); } @@ -446,7 +477,7 @@ int main(int argc, char **argv) goto cleanup; #endif - /*********** RDMA write data *************/ + /*********** RDMA write data *************/ ret = do_rdma_write_with_msg(); if (ret != DAT_SUCCESS) { fprintf(stderr, "%d Error do_rdma_write_with_msg: %s\n", @@ -455,7 +486,7 @@ int main(int argc, char **argv) } else LOGPRINTF("%d do_rdma_write_with_msg complete\n", getpid()); - /*********** RDMA read data *************/ + /*********** RDMA read data *************/ ret = do_rdma_read_with_msg(); if (ret != DAT_SUCCESS) { fprintf(stderr, "%d Error do_rdma_read_with_msg: %s\n", @@ -464,7 +495,7 @@ int main(int argc, char **argv) } else LOGPRINTF("%d do_rdma_read_with_msg complete\n", getpid()); - /*********** PING PING messages ************/ + /*********** PING PING messages ************/ ret = do_ping_pong_msg(); if (ret != DAT_SUCCESS) { fprintf(stderr, "%d Error do_ping_pong_msg: %s\n", @@ -475,9 +506,10 @@ int main(int argc, char **argv) goto complete; } - cleanup: +cleanup: + flush_evds(); failed++; - complete: +complete: /* disconnect and free EP resources */ if (h_ep != DAT_HANDLE_NULL) { @@ -541,7 +573,6 @@ int main(int argc, char **argv) if (ret != DAT_SUCCESS) { fprintf(stderr, "%d: Error Adaptor close: %s\n", getpid(), DT_RetToString(ret)); - exit(1); } else LOGPRINTF("%d Closed Interface Adaptor\n", getpid()); @@ -552,6 +583,9 @@ int main(int argc, char **argv) printf("\n%d: DAPL Test Complete. %s\n\n", getpid(), failed ? "FAILED" : "PASSED"); + fflush(stderr); + fflush(stdout); + if (!performance_times) exit(0); @@ -1751,7 +1785,7 @@ DAT_RETURN register_rdma_memory(void) ret = dat_lmr_create(h_ia, DAT_MEM_TYPE_VIRTUAL, region, - buf_len * burst, + buf_len * (burst+1), h_pz, DAT_MEM_PRIV_ALL_FLAG, DAT_VA_TYPE_VA, @@ -1778,7 +1812,7 @@ DAT_RETURN register_rdma_memory(void) ret = dat_lmr_create(h_ia, DAT_MEM_TYPE_VIRTUAL, region, - buf_len * burst, + buf_len * (burst + 1), h_pz, DAT_MEM_PRIV_ALL_FLAG, DAT_VA_TYPE_VA, @@ -1917,7 +1951,7 @@ DAT_RETURN create_events(void) /* create dto RCV EVD, with CNO if use_cno was set */ ret = dat_evd_create(h_ia, - MSG_BUF_COUNT, + MSG_BUF_COUNT + burst, h_dto_cno, DAT_EVD_DTO_FLAG, &h_dto_rcv_evd); if (ret != DAT_SUCCESS) { fprintf(stderr, "%d Error dat_evd_create RCV: %s\n", @@ -2110,3 +2144,4 @@ void print_usage(void) printf("P: provider name (default = OpenIB-cma)\n"); printf("\n"); } + -- 1.5.2.5 _______________________________________________ general mailing list [email protected] http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
