From c606c293e6bbb9ddeb7b6942e5d8b4e461ba133a Mon Sep 17 00:00:00 2001 From: Dotan Barak Date: Tue, 23 Oct 2007 14:39:25 +0200 Subject: [PATCH] Add command line parameter to set SL for pingpong examples Add a --sl/-l command line parameter for the pingpong examples to set the SL of the QP/AH. This can be used to test a QoS setup. Signed-off-by: Dotan Barak Signed-off-by: Roland Dreier --- examples/rc_pingpong.c | 23 ++++++++++++++++------- examples/srq_pingpong.c | 22 +++++++++++++++------- examples/uc_pingpong.c | 23 ++++++++++++++++------- examples/ud_pingpong.c | 20 +++++++++++++------- man/ibv_rc_pingpong.1 | 9 ++++++--- man/ibv_srq_pingpong.1 | 7 +++++-- man/ibv_uc_pingpong.1 | 7 +++++-- man/ibv_ud_pingpong.1 | 7 +++++-- 8 files changed, 81 insertions(+), 37 deletions(-) diff --git a/examples/rc_pingpong.c b/examples/rc_pingpong.c index 81fd4a6..7181914 100644 --- a/examples/rc_pingpong.c +++ b/examples/rc_pingpong.c @@ -76,7 +76,8 @@ struct pingpong_dest { }; static int pp_connect_ctx(struct pingpong_context *ctx, int port, int my_psn, - enum ibv_mtu mtu, struct pingpong_dest *dest) + enum ibv_mtu mtu, int sl, + struct pingpong_dest *dest) { struct ibv_qp_attr attr = { .qp_state = IBV_QPS_RTR, @@ -88,7 +89,7 @@ static int pp_connect_ctx(struct pingpong_context *ctx, int port, int my_psn, .ah_attr = { .is_global = 0, .dlid = dest->lid, - .sl = 0, + .sl = sl, .src_path_bits = 0, .port_num = port } @@ -194,7 +195,8 @@ out: } static struct pingpong_dest *pp_server_exch_dest(struct pingpong_context *ctx, - int ib_port, enum ibv_mtu mtu, int port, + int ib_port, enum ibv_mtu mtu, + int port, int sl, const struct pingpong_dest *my_dest) { struct addrinfo *res, *t; @@ -263,7 +265,7 @@ static struct pingpong_dest *pp_server_exch_dest(struct pingpong_context *ctx, sscanf(msg, "%x:%x:%x", &rem_dest->lid, &rem_dest->qpn, &rem_dest->psn); - if (pp_connect_ctx(ctx, ib_port, my_dest->psn, mtu, rem_dest)) { + if (pp_connect_ctx(ctx, ib_port, my_dest->psn, mtu, sl, rem_dest)) { fprintf(stderr, "Couldn't connect to remote QP\n"); free(rem_dest); rem_dest = NULL; @@ -477,6 +479,7 @@ static void usage(const char *argv0) printf(" -m, --mtu= path MTU (default 1024)\n"); printf(" -r, --rx-depth= number of receives to post at a time (default 500)\n"); printf(" -n, --iters= number of exchanges (default 1000)\n"); + printf(" -l, --sl= service level value\n"); printf(" -e, --events sleep on CQ events (default poll)\n"); } @@ -500,6 +503,7 @@ int main(int argc, char *argv[]) int routs; int rcnt, scnt; int num_cq_events = 0; + int sl = 0; srand48(getpid() * time(NULL)); @@ -514,11 +518,12 @@ int main(int argc, char *argv[]) { .name = "mtu", .has_arg = 1, .val = 'm' }, { .name = "rx-depth", .has_arg = 1, .val = 'r' }, { .name = "iters", .has_arg = 1, .val = 'n' }, + { .name = "sl", .has_arg = 1, .val = 'l' }, { .name = "events", .has_arg = 0, .val = 'e' }, { 0 } }; - c = getopt_long(argc, argv, "p:d:i:s:m:r:n:e", long_options, NULL); + c = getopt_long(argc, argv, "p:d:i:s:m:r:n:l:e", long_options, NULL); if (c == -1) break; @@ -562,6 +567,10 @@ int main(int argc, char *argv[]) iters = strtol(optarg, NULL, 0); break; + case 'l': + sl = strtol(optarg, NULL, 0); + break; + case 'e': ++use_event; break; @@ -635,7 +644,7 @@ int main(int argc, char *argv[]) if (servername) rem_dest = pp_client_exch_dest(servername, port, &my_dest); else - rem_dest = pp_server_exch_dest(ctx, ib_port, mtu, port, &my_dest); + rem_dest = pp_server_exch_dest(ctx, ib_port, mtu, port, sl, &my_dest); if (!rem_dest) return 1; @@ -644,7 +653,7 @@ int main(int argc, char *argv[]) rem_dest->lid, rem_dest->qpn, rem_dest->psn); if (servername) - if (pp_connect_ctx(ctx, ib_port, my_dest.psn, mtu, rem_dest)) + if (pp_connect_ctx(ctx, ib_port, my_dest.psn, mtu, sl, rem_dest)) return 1; ctx->pending = PINGPONG_RECV_WRID; diff --git a/examples/srq_pingpong.c b/examples/srq_pingpong.c index 91fd566..bc869c9 100644 --- a/examples/srq_pingpong.c +++ b/examples/srq_pingpong.c @@ -80,7 +80,7 @@ struct pingpong_dest { }; static int pp_connect_ctx(struct pingpong_context *ctx, int port, enum ibv_mtu mtu, - const struct pingpong_dest *my_dest, + int sl, const struct pingpong_dest *my_dest, const struct pingpong_dest *dest) { int i; @@ -96,7 +96,7 @@ static int pp_connect_ctx(struct pingpong_context *ctx, int port, enum ibv_mtu m .ah_attr = { .is_global = 0, .dlid = dest[i].lid, - .sl = 0, + .sl = sl, .src_path_bits = 0, .port_num = port } @@ -216,7 +216,8 @@ out: } static struct pingpong_dest *pp_server_exch_dest(struct pingpong_context *ctx, - int ib_port, enum ibv_mtu mtu, int port, + int ib_port, enum ibv_mtu mtu, + int port, int sl, const struct pingpong_dest *my_dest) { struct addrinfo *res, *t; @@ -295,7 +296,7 @@ static struct pingpong_dest *pp_server_exch_dest(struct pingpong_context *ctx, &rem_dest[i].lid, &rem_dest[i].qpn, &rem_dest[i].psn); } - if (pp_connect_ctx(ctx, ib_port, mtu, my_dest, rem_dest)) { + if (pp_connect_ctx(ctx, ib_port, mtu, sl, my_dest, rem_dest)) { fprintf(stderr, "Couldn't connect to remote QP\n"); free(rem_dest); rem_dest = NULL; @@ -548,6 +549,7 @@ static void usage(const char *argv0) printf(" -q, --num-qp= number of QPs to use (default 16)\n"); printf(" -r, --rx-depth= number of receives to post at a time (default 500)\n"); printf(" -n, --iters= number of exchanges per QP(default 1000)\n"); + printf(" -l, --sl= service level value\n"); printf(" -e, --events sleep on CQ events (default poll)\n"); } @@ -575,6 +577,7 @@ int main(int argc, char *argv[]) int num_wc; int i; int num_cq_events = 0; + int sl = 0; srand48(getpid() * time(NULL)); @@ -590,11 +593,12 @@ int main(int argc, char *argv[]) { .name = "num-qp", .has_arg = 1, .val = 'q' }, { .name = "rx-depth", .has_arg = 1, .val = 'r' }, { .name = "iters", .has_arg = 1, .val = 'n' }, + { .name = "sl", .has_arg = 1, .val = 'l' }, { .name = "events", .has_arg = 0, .val = 'e' }, { 0 } }; - c = getopt_long(argc, argv, "p:d:i:s:m:q:r:n:e", long_options, NULL); + c = getopt_long(argc, argv, "p:d:i:s:m:q:r:n:l:e", long_options, NULL); if (c == -1) break; @@ -643,6 +647,10 @@ int main(int argc, char *argv[]) iters = strtol(optarg, NULL, 0); break; + case 'l': + sl = strtol(optarg, NULL, 0); + break; + case 'e': ++use_event; break; @@ -730,7 +738,7 @@ int main(int argc, char *argv[]) if (servername) rem_dest = pp_client_exch_dest(servername, port, my_dest); else - rem_dest = pp_server_exch_dest(ctx, ib_port, mtu, port, my_dest); + rem_dest = pp_server_exch_dest(ctx, ib_port, mtu, port, sl, my_dest); if (!rem_dest) return 1; @@ -740,7 +748,7 @@ int main(int argc, char *argv[]) rem_dest[i].lid, rem_dest[i].qpn, rem_dest[i].psn); if (servername) - if (pp_connect_ctx(ctx, ib_port, mtu, my_dest, rem_dest)) + if (pp_connect_ctx(ctx, ib_port, mtu, sl, my_dest, rem_dest)) return 1; if (servername) diff --git a/examples/uc_pingpong.c b/examples/uc_pingpong.c index 32652f5..6135030 100644 --- a/examples/uc_pingpong.c +++ b/examples/uc_pingpong.c @@ -76,7 +76,8 @@ struct pingpong_dest { }; static int pp_connect_ctx(struct pingpong_context *ctx, int port, int my_psn, - enum ibv_mtu mtu, struct pingpong_dest *dest) + enum ibv_mtu mtu, int sl, + struct pingpong_dest *dest) { struct ibv_qp_attr attr = { .qp_state = IBV_QPS_RTR, @@ -86,7 +87,7 @@ static int pp_connect_ctx(struct pingpong_context *ctx, int port, int my_psn, .ah_attr = { .is_global = 0, .dlid = dest->lid, - .sl = 0, + .sl = sl, .src_path_bits = 0, .port_num = port } @@ -182,7 +183,8 @@ out: } static struct pingpong_dest *pp_server_exch_dest(struct pingpong_context *ctx, - int ib_port, enum ibv_mtu mtu, int port, + int ib_port, enum ibv_mtu mtu, + int port, int sl, const struct pingpong_dest *my_dest) { struct addrinfo *res, *t; @@ -251,7 +253,7 @@ static struct pingpong_dest *pp_server_exch_dest(struct pingpong_context *ctx, sscanf(msg, "%x:%x:%x", &rem_dest->lid, &rem_dest->qpn, &rem_dest->psn); - if (pp_connect_ctx(ctx, ib_port, my_dest->psn, mtu, rem_dest)) { + if (pp_connect_ctx(ctx, ib_port, my_dest->psn, mtu, sl, rem_dest)) { fprintf(stderr, "Couldn't connect to remote QP\n"); free(rem_dest); rem_dest = NULL; @@ -465,6 +467,7 @@ static void usage(const char *argv0) printf(" -m, --mtu= path MTU (default 1024)\n"); printf(" -r, --rx-depth= number of receives to post at a time (default 500)\n"); printf(" -n, --iters= number of exchanges (default 1000)\n"); + printf(" -l, --sl= service level value\n"); printf(" -e, --events sleep on CQ events (default poll)\n"); } @@ -488,6 +491,7 @@ int main(int argc, char *argv[]) int routs; int rcnt, scnt; int num_cq_events = 0; + int sl = 0; srand48(getpid() * time(NULL)); @@ -502,11 +506,12 @@ int main(int argc, char *argv[]) { .name = "mtu", .has_arg = 1, .val = 'm' }, { .name = "rx-depth", .has_arg = 1, .val = 'r' }, { .name = "iters", .has_arg = 1, .val = 'n' }, + { .name = "sl", .has_arg = 1, .val = 'l' }, { .name = "events", .has_arg = 0, .val = 'e' }, { 0 } }; - c = getopt_long(argc, argv, "p:d:i:s:m:r:n:e", long_options, NULL); + c = getopt_long(argc, argv, "p:d:i:s:m:r:n:l:e", long_options, NULL); if (c == -1) break; @@ -550,6 +555,10 @@ int main(int argc, char *argv[]) iters = strtol(optarg, NULL, 0); break; + case 'l': + sl = strtol(optarg, NULL, 0); + break; + case 'e': ++use_event; break; @@ -623,7 +632,7 @@ int main(int argc, char *argv[]) if (servername) rem_dest = pp_client_exch_dest(servername, port, &my_dest); else - rem_dest = pp_server_exch_dest(ctx, ib_port, mtu, port, &my_dest); + rem_dest = pp_server_exch_dest(ctx, ib_port, mtu, port, sl, &my_dest); if (!rem_dest) return 1; @@ -632,7 +641,7 @@ int main(int argc, char *argv[]) rem_dest->lid, rem_dest->qpn, rem_dest->psn); if (servername) - if (pp_connect_ctx(ctx, ib_port, my_dest.psn, mtu, rem_dest)) + if (pp_connect_ctx(ctx, ib_port, my_dest.psn, mtu, sl, rem_dest)) return 1; ctx->pending = PINGPONG_RECV_WRID; diff --git a/examples/ud_pingpong.c b/examples/ud_pingpong.c index baf69b7..aaee26c 100644 --- a/examples/ud_pingpong.c +++ b/examples/ud_pingpong.c @@ -77,12 +77,12 @@ struct pingpong_dest { }; static int pp_connect_ctx(struct pingpong_context *ctx, int port, int my_psn, - struct pingpong_dest *dest) + int sl, struct pingpong_dest *dest) { struct ibv_ah_attr ah_attr = { .is_global = 0, .dlid = dest->lid, - .sl = 0, + .sl = sl, .src_path_bits = 0, .port_num = port }; @@ -183,7 +183,7 @@ out: } static struct pingpong_dest *pp_server_exch_dest(struct pingpong_context *ctx, - int ib_port, int port, + int ib_port, int port, int sl, const struct pingpong_dest *my_dest) { struct addrinfo *res, *t; @@ -252,7 +252,7 @@ static struct pingpong_dest *pp_server_exch_dest(struct pingpong_context *ctx, sscanf(msg, "%x:%x:%x", &rem_dest->lid, &rem_dest->qpn, &rem_dest->psn); - if (pp_connect_ctx(ctx, ib_port, my_dest->psn, rem_dest)) { + if (pp_connect_ctx(ctx, ib_port, my_dest->psn, sl, rem_dest)) { fprintf(stderr, "Couldn't connect to remote QP\n"); free(rem_dest); rem_dest = NULL; @@ -499,6 +499,7 @@ int main(int argc, char *argv[]) int routs; int rcnt, scnt; int num_cq_events = 0; + int sl = 0; srand48(getpid() * time(NULL)); @@ -512,11 +513,12 @@ int main(int argc, char *argv[]) { .name = "size", .has_arg = 1, .val = 's' }, { .name = "rx-depth", .has_arg = 1, .val = 'r' }, { .name = "iters", .has_arg = 1, .val = 'n' }, + { .name = "sl", .has_arg = 1, .val = 'l' }, { .name = "events", .has_arg = 0, .val = 'e' }, { 0 } }; - c = getopt_long(argc, argv, "p:d:i:s:r:n:e", long_options, NULL); + c = getopt_long(argc, argv, "p:d:i:s:r:n:l:e", long_options, NULL); if (c == -1) break; @@ -553,6 +555,10 @@ int main(int argc, char *argv[]) iters = strtol(optarg, NULL, 0); break; + case 'l': + sl = strtol(optarg, NULL, 0); + break; + case 'e': ++use_event; break; @@ -626,7 +632,7 @@ int main(int argc, char *argv[]) if (servername) rem_dest = pp_client_exch_dest(servername, port, &my_dest); else - rem_dest = pp_server_exch_dest(ctx, ib_port, port, &my_dest); + rem_dest = pp_server_exch_dest(ctx, ib_port, port, sl, &my_dest); if (!rem_dest) return 1; @@ -635,7 +641,7 @@ int main(int argc, char *argv[]) rem_dest->lid, rem_dest->qpn, rem_dest->psn); if (servername) - if (pp_connect_ctx(ctx, ib_port, my_dest.psn, rem_dest)) + if (pp_connect_ctx(ctx, ib_port, my_dest.psn, sl, rem_dest)) return 1; ctx->pending = PINGPONG_RECV_WRID; diff --git a/man/ibv_rc_pingpong.1 b/man/ibv_rc_pingpong.1 index e83d635..d213c6f 100644 --- a/man/ibv_rc_pingpong.1 +++ b/man/ibv_rc_pingpong.1 @@ -6,11 +6,11 @@ ibv_rc_pingpong \- simple InfiniBand RC transport test .SH SYNOPSIS .B ibv_rc_pingpong [\-p port] [\-d device] [\-i ib port] [\-s size] [\-r rx depth] -[\-n iters] [\-e] \fBHOSTNAME\fR +[\-n iters] [\-l sl] [\-e] \fBHOSTNAME\fR .B ibv_rc_pingpong [\-p port] [\-d device] [\-i ib port] [\-s size] [\-r rx depth] -[\-n iters] [\-e] +[\-n iters] [\-l sl] [\-e] .SH DESCRIPTION .PP @@ -38,7 +38,10 @@ post \fIDEPTH\fR receives at a time (default 1000) .TP \fB\-n\fR, \fB\-\-iters\fR=\fIITERS\fR perform \fIITERS\fR message exchanges (default 1000) -.Tp +.TP +\fB\-l\fR, \fB\-\-sl\fR=\fISL\fR +use \fISL\fR as the service level value of the QP (default 0) +.TP \fB\-e\fR, \fB\-\-events\fR sleep while waiting for work completion events (default is to poll for completions) diff --git a/man/ibv_srq_pingpong.1 b/man/ibv_srq_pingpong.1 index 3624c6b..d50f70e 100644 --- a/man/ibv_srq_pingpong.1 +++ b/man/ibv_srq_pingpong.1 @@ -6,11 +6,11 @@ ibv_srq_pingpong \- simple InfiniBand shared receive queue test .SH SYNOPSIS .B ibv_srq_pingpong [\-p port] [\-d device] [\-i ib port] [\-s size] [\-q num QPs] [\-r rx depth] -[\-n iters] [\-e] \fBHOSTNAME\fR +[\-n iters] [\-l sl] [\-e] \fBHOSTNAME\fR .B ibv_srq_pingpong [\-p port] [\-d device] [\-i ib port] [\-s size] [\-q num QPs] [\-r rx depth] -[\-n iters] [\-e] +[\-n iters] [\-l sl] [\-e] .SH DESCRIPTION .PP @@ -43,6 +43,9 @@ post \fIDEPTH\fR receives at a time (default 1000) \fB\-n\fR, \fB\-\-iters\fR=\fIITERS\fR perform \fIITERS\fR message exchanges (default 1000) .TP +\fB\-l\fR, \fB\-\-sl\fR=\fISL\fR +use \fISL\fR as the service level value of the QPs (default 0) +.TP \fB\-e\fR, \fB\-\-events\fR sleep while waiting for work completion events (default is to poll for completions) diff --git a/man/ibv_uc_pingpong.1 b/man/ibv_uc_pingpong.1 index 6b535dc..ec97eb0 100644 --- a/man/ibv_uc_pingpong.1 +++ b/man/ibv_uc_pingpong.1 @@ -6,11 +6,11 @@ ibv_uc_pingpong \- simple InfiniBand UC transport test .SH SYNOPSIS .B ibv_uc_pingpong [\-p port] [\-d device] [\-i ib port] [\-s size] [\-r rx depth] -[\-n iters] [\-e] \fBHOSTNAME\fR +[\-n iters] [\-l sl] [\-e] \fBHOSTNAME\fR .B ibv_uc_pingpong [\-p port] [\-d device] [\-i ib port] [\-s size] [\-r rx depth] -[\-n iters] [\-e] +[\-n iters] [\-l sl] [\-e] .SH DESCRIPTION .PP @@ -39,6 +39,9 @@ post \fIDEPTH\fR receives at a time (default 1000) \fB\-n\fR, \fB\-\-iters\fR=\fIITERS\fR perform \fIITERS\fR message exchanges (default 1000) .TP +\fB\-l\fR, \fB\-\-sl\fR=\fISL\fR +use \fISL\fR as the service level value of the QP (default 0) +.TP \fB\-e\fR, \fB\-\-events\fR sleep while waiting for work completion events (default is to poll for completions) diff --git a/man/ibv_ud_pingpong.1 b/man/ibv_ud_pingpong.1 index e5c0faa..a05af8d 100644 --- a/man/ibv_ud_pingpong.1 +++ b/man/ibv_ud_pingpong.1 @@ -6,11 +6,11 @@ ibv_ud_pingpong \- simple InfiniBand UD transport test .SH SYNOPSIS .B ibv_ud_pingpong [\-p port] [\-d device] [\-i ib port] [\-s size] [\-r rx depth] -[\-n iters] [\-e] \fBHOSTNAME\fR +[\-n iters] [\-l sl] [\-e] \fBHOSTNAME\fR .B ibv_ud_pingpong [\-p port] [\-d device] [\-i ib port] [\-s size] [\-r rx depth] -[\-n iters] [\-e] +[\-n iters] [\-l sl] [\-e] .SH DESCRIPTION .PP @@ -39,6 +39,9 @@ post \fIDEPTH\fR receives at a time (default 500) \fB\-n\fR, \fB\-\-iters\fR=\fIITERS\fR perform \fIITERS\fR message exchanges (default 1000) .TP +\fB\-l\fR, \fB\-\-sl\fR=\fISL\fR +send messages with service level \fISL\fR (default 0) +.TP \fB\-e\fR, \fB\-\-events\fR sleep while waiting for work completion events (default is to poll for completions) -- 2.46.0