#if 0
#define PERF_ENTER printf("%s: ===>\n",__FUNCTION__);
#define PERF_EXIT printf("%s: <===\n",__FUNCTION__);
+#define PERF_DEBUG printf
#else
#define PERF_ENTER
#define PERF_EXIT
+#define PERF_DEBUG //
#endif
struct pingpong_context {
#define MAX_INLINE 400
struct user_parameters {
- const char *servername;
- int connection_type;
- int mtu;
- int all; /* run all msg size */
- int signal_comp;
- int iters;
- int tx_depth;
- int duplex;
+ const char *servername;
+ int connection_type;
+ int mtu;
+ int all; /* run all msg size */
+ int signal_comp;
+ int iters;
+ int tx_depth;
+ int duplex;
int use_event;
};
fprintf(stderr, "Couldn't post recv: counter=%d\n", i);
return 14;
}
+ PERF_DEBUG("rcnt = %d \n",i);
}
}
post_recv = user_parm->tx_depth;
}
static SOCKET pp_open_port(struct pingpong_context *ctx, const char * servername,
- int ib_port, int port, struct pingpong_dest **p_rem_dest,struct user_parameters *user_parm)
+ int ib_port, int port, struct pingpong_dest **p_my_dest,
+ struct pingpong_dest **p_rem_dest,struct user_parameters *user_parm)
{
struct pingpong_dest *my_dest;
struct pingpong_dest *rem_dest;
my_dest[i].rkey = ctx->rkey;
my_dest[i].vaddr = (uintptr_t)ctx->buf + ctx->size;
- printf(" local address: LID %#04x, QPN %#06x, PSN %#06x "
+ printf(" local address: LID %#04x, QPN %#06x, PSN %#06x, "
"RKey %#08x VAddr %#016Lx\n",
my_dest[i].lid, my_dest[i].qpn, my_dest[i].psn,
my_dest[i].rkey, my_dest[i].vaddr);
return INVALID_SOCKET;
}
*p_rem_dest = rem_dest;
+ *p_my_dest = my_dest;
return sockfd;
}
return 1;
}
++scnt;
-//printf("scnt = %d \n",scnt);
+ PERF_DEBUG("scnt = %d \n",scnt);
}
{
p_wc_free = p_wc_done;
p_wc_free->p_next = NULL;
p_wc_done = NULL;
+ PERF_DEBUG("ccnt = %d \n",ccnt);
+ PERF_DEBUG("rcnt = %d \n",rcnt);
}
} while (ib_status == IB_SUCCESS );
fprintf(stderr, "poll CQ failed %d\n", ib_status);
return 1;
}
-//printf("ccnt = %d \n",ccnt);
+
}
}
return(0);
ib_recv_wr_t *bad_wr_recv;
ib_api_status_t ib_status;
- if (user_param->connection_type==UD) {
- if (size > 2048) {
- size = 2048;
- }
- }
/* send */
if (user_param->connection_type==UD) {
scnt, ccnt);
return 1;
}
- ++rcnt;
+
ib_status = ib_post_recv(ctx->qp[0], &ctx->rwr, &bad_wr_recv);
if (ib_status != IB_SUCCESS)
{
rcnt);
return 15;
}
-//printf("rcnt = %d \n",rcnt);
+ ++rcnt;
+ ++ccnt;
+ PERF_DEBUG("ccnt = %d \n",ccnt);
+ PERF_DEBUG("rcnt = %d \n",rcnt);
+
p_wc_free = p_wc_done;
p_wc_free->p_next = NULL;
p_wc_done = NULL;
return 1;
}
++scnt;
-//printf("scnt = %d \n",scnt);
+ PERF_DEBUG("scnt = %d \n",scnt);
}
if (ccnt < user_param->iters) {
ib_wc_t wc;
p_wc_free->p_next = NULL;
p_wc_done = NULL;
}
+
} while (ib_status == IB_SUCCESS );
if (ib_status != IB_NOT_FOUND) {
fprintf(stderr, "poll CQ failed %d\n", ib_status);
return 1;
}
-//printf("ccnt = %d \n",ccnt);
+
+ PERF_DEBUG("ccnt = %d \n",ccnt);
}
}
}
int __cdecl main(int argc, char *argv[])
{
struct pingpong_context *ctx;
- struct pingpong_dest my_dest;
+ struct pingpong_dest *my_dest;
struct pingpong_dest *rem_dest;
struct user_parameters user_param;
char *ib_devname = NULL;
case 'b':
user_param.duplex = 1;
break;
-
+ case 'h':
default:
usage(argv[0]);
return 1;
return 1;
}
- if (user_param.all == ALL) {
+ if (user_param.all == ALL && user_param.connection_type!=UD) {
/*since we run all sizes */
+ printf("test\n");
size = 8388608; /*2^23 */
- } else {
- if (user_param.connection_type==UD) {
- if (size > 2048) {
- printf("Max msg size in UD is 2048 changing to 2048\n");
- size = 2048;
- }
- }
+ } else if (user_param.connection_type==UD ) {
+ printf("Max msg size in UD is 2048 changing to 2048\n");
+ size = 2048;
}
+
srand(GetCurrentProcessId() * GetTickCount());
//TODO: get pagesize from sysinfo
if (!ctx)
return 1;
- sockfd = pp_open_port(ctx, user_param.servername, ib_port, port,&rem_dest,&user_param);
+ sockfd = pp_open_port(ctx, user_param.servername, ib_port, port,&my_dest,&rem_dest,&user_param);
if (sockfd == INVALID_SOCKET)
return 9;
if (user_param.servername) {
print_report(user_param.iters, size, user_param.duplex, tposted, tcompleted);
/* sync again for the sake of UC/UC */
- pp_client_exch_dest(sockfd, &my_dest,rem_dest);
+ if(pp_client_exch_dest(sockfd, my_dest,rem_dest))
+ return 19;
+
} else {
- pp_server_exch_dest(sockfd, &my_dest,rem_dest);
+ if(pp_server_exch_dest(sockfd,my_dest,rem_dest))
+ return 19;
+
}
}
/* close sockets */
if (user_param.servername) {
- pp_client_exch_dest(sockfd, &my_dest,&rem_dest[0]);
+ pp_client_exch_dest(sockfd, my_dest,rem_dest);
} else {
- pp_server_exch_dest(sockfd, &my_dest,&rem_dest[0]);
+ pp_server_exch_dest(sockfd, my_dest,rem_dest);
}
send(sockfd, "done", sizeof "done",0);
}
static SOCKET pp_open_port(struct pingpong_context *ctx, const char * servername,
- int ib_port, int port, struct pingpong_dest **p_rem_dest,struct user_parameters *user_parm)
+ int ib_port, int port, struct pingpong_dest **p_my_dest,
+ struct pingpong_dest **p_rem_dest,struct user_parameters *user_parm)
{
struct pingpong_dest *my_dest;
struct pingpong_dest *rem_dest;
my_dest[i].rkey = ctx->rkey;
my_dest[i].vaddr = (uintptr_t)ctx->buf + ctx->size;
- printf(" local address: LID %#04x, QPN %#06x, PSN %#06x "
+ printf(" local address: LID %#04x, QPN %#06x, PSN %#06x, "
"RKey %#08x VAddr %#016Lx\n",
my_dest[i].lid, my_dest[i].qpn, my_dest[i].psn,
my_dest[i].rkey, my_dest[i].vaddr);
return INVALID_SOCKET;
}
*p_rem_dest = rem_dest;
+ *p_my_dest = my_dest;
return sockfd;
}
iters = user_param->iters;
tx_depth = user_param->tx_depth;
-
- if (user_param->connection_type==UD) {
- if (size > 2048) {
- size = 2048;
- }
- }
-
///send //
if (user_param->connection_type==UD) {
ctx->list.vaddr = (uintptr_t) ctx->buf + 40;
p_wc_free = &wc;
p_wc_done = NULL;
p_wc_free->p_next = NULL;
- //printf("rcnt %d\n",rcnt);
- //printf("scnt %d\n",scnt);
+ PERF_DEBUG("rcnt %d\n",rcnt);
+ PERF_DEBUG("scnt %d\n",scnt);
/*Server is polling on recieve first */
++rcnt;
if (ib_post_recv(qp, &rwr, &bad_wr_recv)) {
if (scnt < iters ) {
ib_send_wr_t *bad_wr;
- //printf("rcnt1 %d\n",rcnt);
- //printf("scnt1 %d\n",scnt);
+ PERF_DEBUG("rcnt1 %d\n",rcnt);
+ PERF_DEBUG("scnt1 %d\n",scnt);
if (ccnt == (tx_depth - 2) || (user_param->signal_comp == SIGNAL)
|| (scnt == (iters - 1)) ) {
ccnt = 0;
ib_wc_t wc;
ib_wc_t *p_wc_done,*p_wc_free;
- //printf("rcnt2 %d\n",rcnt);
- //printf("scnt2 %d\n",scnt);
+ PERF_DEBUG("rcnt2 %d\n",rcnt);
+ PERF_DEBUG("scnt2 %d\n",scnt);
p_wc_free = &wc;
p_wc_done = NULL;
p_wc_free->p_next = NULL;
{
struct pingpong_context *ctx;
+ struct pingpong_dest *my_dest;
struct pingpong_dest *rem_dest;
struct user_parameters user_param;
char *ib_devname = NULL;
return 1;
}
-
- if (user_param.all == ALL) {
- /*since we run all sizes lets allocate big enough buffer */
+
+ if (user_param.all == ALL && user_param.connection_type!=UD) {
+ /*since we run all sizes */
+ printf("test\n");
size = 8388608; /*2^23 */
+ } else if (user_param.connection_type==UD ) {
+ printf("Max msg size in UD is 2048 changing to 2048\n");
+ size = 2048;
}
+
srand(GetCurrentProcessId() * GetTickCount());
//TODO: get pagesize from sysinfo
if (!ctx)
return 8;
- sockfd = pp_open_port(ctx, user_param.servername, ib_port, port,&rem_dest,&user_param);
+ sockfd = pp_open_port(ctx, user_param.servername, ib_port, port,&my_dest,&rem_dest,&user_param);
if (sockfd == INVALID_SOCKET)
return 9;
}
static SOCKET pp_open_port(struct pingpong_context *ctx, const char * servername,
- int ib_port, int port, struct pingpong_dest **p_rem_dest,struct user_parameters *user_parm)
+ int ib_port, int port, struct pingpong_dest **p_my_dest,
+ struct pingpong_dest **p_rem_dest,struct user_parameters *user_parm)
{
struct pingpong_dest *my_dest;
struct pingpong_dest *rem_dest;
my_dest[i].rkey = ctx->rkey;
my_dest[i].vaddr = (uintptr_t)ctx->buf + ctx->size;
- printf(" local address: LID %#04x, QPN %#06x, PSN %#06x "
+ printf(" local address: LID %#04x, QPN %#06x, PSN %#06x, "
"RKey %#08x VAddr %#016Lx\n",
my_dest[i].lid, my_dest[i].qpn, my_dest[i].psn,
my_dest[i].rkey, my_dest[i].vaddr);
return INVALID_SOCKET;
}
*p_rem_dest = rem_dest;
+ *p_my_dest = my_dest;
return sockfd;
}
}
ctx->scnt[index]= ctx->scnt[index]+1;
++scnt;
-//printf("scnt = %d \n",scnt);
+ PERF_DEBUG("scnt = %d \n",scnt);
}
}
/*here the id is the index to the qp num */
ctx->ccnt[(int)wc.wr_id] = ctx->ccnt[(int)wc.wr_id]+1;
++ccnt;
-//printf("ccnt = %d \n",ccnt);
+ PERF_DEBUG("ccnt = %d \n",ccnt);
p_wc_free = p_wc_done;
p_wc_free->p_next = NULL;
p_wc_done = NULL;
int __cdecl main(int argc, char *argv[])
{
struct pingpong_context *ctx;
- struct pingpong_dest my_dest;
+ struct pingpong_dest *my_dest;
struct pingpong_dest *rem_dest;
struct user_parameters user_param;
char *ib_devname = NULL;
if (!ctx)
return 1;
- sockfd = pp_open_port(ctx, user_param.servername, ib_port, port,&rem_dest,&user_param);
+ sockfd = pp_open_port(ctx, user_param.servername, ib_port, port,&my_dest,&rem_dest,&user_param);
if (sockfd == INVALID_SOCKET)
return 9;
/* For half duplex tests, server just waits for client to exit */
/* use dummy my_dest struct*/
if (!user_param.servername && !duplex) {
- pp_server_exch_dest(sockfd, &my_dest,rem_dest);
+ pp_server_exch_dest(sockfd, my_dest,rem_dest);
send(sockfd, "done", sizeof "done",0);
closesocket(sockfd);
return 0;
/* use dummy my_dest struct*/
if (user_param.servername) {
- pp_client_exch_dest(sockfd, &my_dest,rem_dest);
+ pp_client_exch_dest(sockfd, my_dest,rem_dest);
} else {
- pp_server_exch_dest(sockfd, &my_dest,rem_dest);
+ pp_server_exch_dest(sockfd, my_dest,rem_dest);
}
send(sockfd, "done", sizeof "done",0);
closesocket(sockfd);
static SOCKET pp_open_port(struct pingpong_context *ctx, const char * servername,
- int ib_port, int port, struct pingpong_dest **p_rem_dest,struct user_parameters *user_parm)
+ int ib_port, int port, struct pingpong_dest **p_my_dest,
+ struct pingpong_dest **p_rem_dest,struct user_parameters *user_parm)
{
struct pingpong_dest *my_dest;
struct pingpong_dest *rem_dest;
my_dest[i].rkey = ctx->rkey;
my_dest[i].vaddr = (uintptr_t)ctx->buf + ctx->size;
- printf(" local address: LID %#04x, QPN %#06x, PSN %#06x "
+ printf(" local address: LID %#04x, QPN %#06x, PSN %#06x, "
"RKey %#08x VAddr %#016Lx\n",
my_dest[i].lid, my_dest[i].qpn, my_dest[i].psn,
my_dest[i].rkey, my_dest[i].vaddr);
return INVALID_SOCKET;
}
*p_rem_dest = rem_dest;
+ *p_my_dest = my_dest;
return sockfd;
}
++ccnt;
}
-//printf("ccnt = %d \n",ccnt);
+ PERF_DEBUG("ccnt = %d \n",ccnt);
}
return(0);
}
struct pingpong_context *ctx;
+ struct pingpong_dest *my_dest;
struct pingpong_dest *rem_dest;
struct user_parameters user_param;
char *ib_devname = NULL;
ctx = pp_init_ctx( size, ib_port,&user_param);
if (!ctx)
return 8;
- sockfd = pp_open_port(ctx, user_param.servername, ib_port, port, &rem_dest,&user_param);
+ sockfd = pp_open_port(ctx, user_param.servername, ib_port, port,&my_dest,&rem_dest,&user_param);
if (sockfd == INVALID_SOCKET)
return 9;
printf("------------------------------------------------------------------\n");