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; }
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; }
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); }
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; }
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; }