[openib-general] [PATCH] Add -m option to ping pong programs to set path MTU

Ralph Campbell ralphc at pathscale.com
Wed Jan 18 17:13:24 PST 2006


This patch adds a new -m <mtu_size> option to the ping pong
programs which have a path MTU parameter to ib_modify_qp().

Signed-off-by: Ralph Campbell <ralphc at pathscale.com>

Index: libibverbs/examples/rc_pingpong.c
===================================================================
--- libibverbs/examples/rc_pingpong.c	(revision 5065)
+++ libibverbs/examples/rc_pingpong.c	(working copy)
@@ -59,6 +59,7 @@
 };
 
 static int page_size;
+static int path_mtu;
 
 struct pingpong_context {
 	struct ibv_context	*context;
@@ -94,7 +95,7 @@
 {
 	struct ibv_qp_attr attr = {
 		.qp_state		= IBV_QPS_RTR,
-		.path_mtu		= IBV_MTU_1024,
+		.path_mtu		= path_mtu,
 		.dest_qp_num		= dest->qpn,
 		.rq_psn 		= dest->psn,
 		.max_dest_rd_atomic	= 1,
@@ -440,6 +441,7 @@
 	printf("  -d, --ib-dev=<dev>     use IB device <dev> (default first device found)\n");
 	printf("  -i, --ib-port=<port>   use port <port> of IB device (default 1)\n");
 	printf("  -s, --size=<size>      size of message to exchange (default 4096)\n");
+	printf("  -m, --mtu=<size>       path MTU (default 1024)\n");
 	printf("  -r, --rx-depth=<dep>   number of receives to post at a time (default 500)\n");
 	printf("  -n, --iters=<iters>    number of exchanges (default 1000)\n");
 	printf("  -e, --events           sleep on CQ events (default poll)\n");
@@ -458,6 +460,7 @@
 	int                      port = 18515;
 	int                      ib_port = 1;
 	int                      size = 4096;
+	int                      mtu = 1024;
 	int                      rx_depth = 500;
 	int                      iters = 1000;
 	int                      use_event = 0;
@@ -474,13 +477,14 @@
 			{ .name = "ib-dev",   .has_arg = 1, .val = 'd' },
 			{ .name = "ib-port",  .has_arg = 1, .val = 'i' },
 			{ .name = "size",     .has_arg = 1, .val = 's' },
+			{ .name = "mtu",      .has_arg = 1, .val = 'm' },
 			{ .name = "rx-depth", .has_arg = 1, .val = 'r' },
 			{ .name = "iters",    .has_arg = 1, .val = 'n' },
 			{ .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:m:r:n:e", long_options, NULL);
 		if (c == -1)
 			break;
 
@@ -509,6 +513,10 @@
 			size = strtol(optarg, NULL, 0);
 			break;
 
+		case 'm':
+			mtu = strtol(optarg, NULL, 0);
+			break;
+
 		case 'r':
 			rx_depth = strtol(optarg, NULL, 0);
 			break;
@@ -534,6 +542,32 @@
 		return 1;
 	}
 
+	switch (mtu) {
+	case 256:
+		path_mtu = IBV_MTU_256;
+		break;
+
+	case 512:
+		path_mtu = IBV_MTU_512;
+		break;
+
+	case 1024:
+		path_mtu = IBV_MTU_1024;
+		break;
+
+	case 2048:
+		path_mtu = IBV_MTU_2048;
+		break;
+
+	case 4096:
+		path_mtu = IBV_MTU_4096;
+		break;
+
+	default:
+		usage(argv[0]);
+		return 1;
+	}
+
 	page_size = sysconf(_SC_PAGESIZE);
 
 	dev_list = ibv_get_device_list(NULL);
Index: libibverbs/examples/uc_pingpong.c
===================================================================
--- libibverbs/examples/uc_pingpong.c	(revision 5065)
+++ libibverbs/examples/uc_pingpong.c	(working copy)
@@ -59,6 +59,7 @@
 };
 
 static int page_size;
+static int path_mtu;
 
 struct pingpong_context {
 	struct ibv_context	*context;
@@ -94,7 +95,7 @@
 {
 	struct ibv_qp_attr attr = {
 		.qp_state		= IBV_QPS_RTR,
-		.path_mtu		= IBV_MTU_1024,
+		.path_mtu		= path_mtu,
 		.dest_qp_num		= dest->qpn,
 		.rq_psn 		= dest->psn,
 		.ah_attr		= {
@@ -428,6 +429,7 @@
 	printf("  -d, --ib-dev=<dev>     use IB device <dev> (default first device found)\n");
 	printf("  -i, --ib-port=<port>   use port <port> of IB device (default 1)\n");
 	printf("  -s, --size=<size>      size of message to exchange (default 4096)\n");
+	printf("  -m, --mtu=<size>       path MTU (default 1024)\n");
 	printf("  -r, --rx-depth=<dep>   number of receives to post at a time (default 500)\n");
 	printf("  -n, --iters=<iters>    number of exchanges (default 1000)\n");
 	printf("  -e, --events           sleep on CQ events (default poll)\n");
@@ -446,6 +448,7 @@
 	int                      port = 18515;
 	int                      ib_port = 1;
 	int                      size = 4096;
+	int                      mtu = 1024;
 	int                      rx_depth = 500;
 	int                      iters = 1000;
 	int                      use_event = 0;
@@ -462,13 +465,14 @@
 			{ .name = "ib-dev",   .has_arg = 1, .val = 'd' },
 			{ .name = "ib-port",  .has_arg = 1, .val = 'i' },
 			{ .name = "size",     .has_arg = 1, .val = 's' },
+			{ .name = "mtu",      .has_arg = 1, .val = 'm' },
 			{ .name = "rx-depth", .has_arg = 1, .val = 'r' },
 			{ .name = "iters",    .has_arg = 1, .val = 'n' },
 			{ .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:m:r:n:e", long_options, NULL);
 		if (c == -1)
 			break;
 
@@ -497,6 +501,10 @@
 			size = strtol(optarg, NULL, 0);
 			break;
 
+		case 'm':
+			mtu = strtol(optarg, NULL, 0);
+			break;
+
 		case 'r':
 			rx_depth = strtol(optarg, NULL, 0);
 			break;
@@ -522,6 +530,32 @@
 		return 1;
 	}
 
+	switch (mtu) {
+	case 256:
+		path_mtu = IBV_MTU_256;
+		break;
+
+	case 512:
+		path_mtu = IBV_MTU_512;
+		break;
+
+	case 1024:
+		path_mtu = IBV_MTU_1024;
+		break;
+
+	case 2048:
+		path_mtu = IBV_MTU_2048;
+		break;
+
+	case 4096:
+		path_mtu = IBV_MTU_4096;
+		break;
+
+	default:
+		usage(argv[0]);
+		return 1;
+	}
+
 	page_size = sysconf(_SC_PAGESIZE);
 
 	dev_list = ibv_get_device_list(NULL);
Index: libibverbs/examples/srq_pingpong.c
===================================================================
--- libibverbs/examples/srq_pingpong.c	(revision 5065)
+++ libibverbs/examples/srq_pingpong.c	(working copy)
@@ -61,6 +61,7 @@
 };
 
 static int page_size;
+static int path_mtu;
 
 struct pingpong_context {
 	struct ibv_context	*context;
@@ -102,7 +103,7 @@
 	for (i = 0; i < ctx->num_qp; ++i) {
 		struct ibv_qp_attr attr = {
 			.qp_state		= IBV_QPS_RTR,
-			.path_mtu		= IBV_MTU_1024,
+			.path_mtu		= path_mtu,
 			.dest_qp_num		= dest[i].qpn,
 			.rq_psn 		= dest[i].psn,
 			.max_dest_rd_atomic	= 1,
@@ -501,6 +502,7 @@
 	printf("  -d, --ib-dev=<dev>     use IB device <dev> (default first device found)\n");
 	printf("  -i, --ib-port=<port>   use port <port> of IB device (default 1)\n");
 	printf("  -s, --size=<size>      size of message to exchange (default 4096)\n");
+	printf("  -m, --mtu=<size>       path MTU (default 1024)\n");
 	printf("  -q, --num-qp=<num>     number of QPs to use (default 16)\n");
 	printf("  -r, --rx-depth=<dep>   number of receives to post at a time (default 500)\n");
 	printf("  -n, --iters=<iters>    number of exchanges per QP(default 1000)\n");
@@ -521,6 +523,7 @@
 	int                      port = 18515;
 	int                      ib_port = 1;
 	int                      size = 4096;
+	int                      mtu = 1024;
 	int                      num_qp = 16;
 	int                      rx_depth = 500;
 	int                      iters = 1000;
@@ -540,6 +543,7 @@
 			{ .name = "ib-dev",   .has_arg = 1, .val = 'd' },
 			{ .name = "ib-port",  .has_arg = 1, .val = 'i' },
 			{ .name = "size",     .has_arg = 1, .val = 's' },
+			{ .name = "mtu",      .has_arg = 1, .val = 'm' },
 			{ .name = "num-qp",   .has_arg = 1, .val = 'q' },
 			{ .name = "rx-depth", .has_arg = 1, .val = 'r' },
 			{ .name = "iters",    .has_arg = 1, .val = 'n' },
@@ -547,7 +551,7 @@
 			{ 0 }
 		};
 
-		c = getopt_long(argc, argv, "p:d:i:s:q:r:n:e", long_options, NULL);
+		c = getopt_long(argc, argv, "p:d:i:s:m:q:r:n:e", long_options, NULL);
 		if (c == -1)
 			break;
 
@@ -576,6 +580,10 @@
 			size = strtol(optarg, NULL, 0);
 			break;
 
+		case 'm':
+			mtu = strtol(optarg, NULL, 0);
+			break;
+
 		case 'q':
 			num_qp = strtol(optarg, NULL, 0);
 			break;
@@ -605,6 +613,32 @@
 		return 1;
 	}
 
+	switch (mtu) {
+	case 256:
+		path_mtu = IBV_MTU_256;
+		break;
+
+	case 512:
+		path_mtu = IBV_MTU_512;
+		break;
+
+	case 1024:
+		path_mtu = IBV_MTU_1024;
+		break;
+
+	case 2048:
+		path_mtu = IBV_MTU_2048;
+		break;
+
+	case 4096:
+		path_mtu = IBV_MTU_4096;
+		break;
+
+	default:
+		usage(argv[0]);
+		return 1;
+	}
+
 	if (num_qp > rx_depth) {
 		fprintf(stderr, "rx_depth %d is too small for %d QPs -- "
 			"must have at least one receive per QP.\n",

-- 
Ralph Campbell <ralphc at pathscale.com>




More information about the general mailing list