[openib-general] Re: PATCH] enhancement to rdma_bw and rdma_lat to utilize the RDMA CM
Steve Wise
swise at opengridcomputing.com
Tue May 16 07:46:52 PDT 2006
On Tue, 2006-05-16 at 17:41 +0300, Michael S. Tsirkin wrote:
> Quoting r. Steve Wise <swise at opengridcomputing.com>:
> > Subject: PATCH] enhancement to rdma_bw and rdma_lat to utilize the RDMA CM
> >
> > I don't know who maintains src/userspace/perftest, but here is a patch
> > set that enables rdma_bw and rdma_lat to use the RDMA_CM with the
> > addition of the -c or --cma flag.
> >
>
> I'm worried that this makes the program too big. Maybe this should be
> another test rather than an option?
>
ok. You want it as a separate pair of programs?
> > The rkey/addr info is exchanged in the private data, and SEND/RECV's are used
> > to sync the client/server before and after execution.
>
> Do we really need SEND/RECV messages for this?
> I think I get completion with error once the remote side has disconnected. No?
>
perhaps. I just thought it was cleaner to synch up at the end. Just
like the non-cma version does over the TCP socket (see
pp_client_exch_dest() / pp_server_exch_dest() at the end of the test).
> > Also, I added -P or --poll to rdma_bw to allow blocking for completion
> > events when none are ready (if you omit -P, it will block when no
> > completion is available, otherwise it will spin).
>
> Needs to be a separate patch.
ok.
>
> > Signed-off-by: Steve Wise <swise at opengridcomputing.com>
>
>
> > Index: rdma_lat.c
> > ===================================================================
> > --- rdma_lat.c (revision 7050)
> > +++ rdma_lat.c (working copy)
> > @@ -53,6 +53,7 @@
> > #include <time.h>
> >
> > #include <infiniband/verbs.h>
> > +#include <rdma/rdma_cma.h>
> >
> > #include "get_clock.h"
> >
> > @@ -71,7 +72,8 @@
> > struct ibv_context *context;
> > struct ibv_pd *pd;
> > struct ibv_mr *mr;
> > - struct ibv_cq *cq;
> > + struct ibv_cq *scq;
> > + struct ibv_cq *rcq;
>
> Why are you adding another CQ?
>
It makes waiting for a recv completion easier since you won't get a send
completion when the CQ is only for receives...
> > struct ibv_qp *qp;
> > void *buf;
> > volatile char *post_buf;
> > @@ -80,6 +82,7 @@
> > int tx_depth;
> > struct ibv_sge list;
> > struct ibv_send_wr wr;
> > + struct rdma_cm_id *cm_id;
> > };
> >
> > struct pingpong_dest {
> > @@ -323,16 +326,22 @@
> > return NULL;
> > }
> >
> > - ctx->cq = ibv_create_cq(ctx->context, tx_depth, NULL, NULL, 0);
> > - if (!ctx->cq) {
> > + ctx->rcq = ibv_create_cq(ctx->context, 1, NULL, NULL, 0);
> > + if (!ctx->rcq) {
> > fprintf(stderr, "Couldn't create CQ\n");
> > return NULL;
> > }
>
> CQ of depth 1?
>
Yes, there is only ever one outstanding send/recv exchange...
More information about the general
mailing list