Whamcloud - gitweb
git://git.whamcloud.com
/
fs
/
lustre-release.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
LU-5435 lnet: lustre network latency simulation
[fs/lustre-release.git]
/
lnet
/
utils
/
portals.c
diff --git
a/lnet/utils/portals.c
b/lnet/utils/portals.c
index
8f1b2c5
..
a2a9f31
100644
(file)
--- a/
lnet/utils/portals.c
+++ b/
lnet/utils/portals.c
@@
-1355,6
+1355,7
@@
fault_simul_rule_add(__u32 opc, char *name, int argc, char **argv)
{"dest", required_argument, 0, 'd'},
{"rate", required_argument, 0, 'r'},
{"interval", required_argument, 0, 'i'},
+ {"latency", required_argument, 0, 'l'},
{"portal", required_argument, 0, 'p'},
{"message", required_argument, 0, 'm'},
{0, 0, 0, 0}
@@
-1366,7
+1367,7
@@
fault_simul_rule_add(__u32 opc, char *name, int argc, char **argv)
return -1;
}
- optstr =
"s:d:r:i
:p:m:";
+ optstr =
opc == LNET_CTL_DROP_ADD ? "s:d:r:i:p:m:" : "s:d:r:l
:p:m:";
memset(&attr, 0, sizeof(attr));
while (1) {
char c = getopt_long(argc, argv, optstr, opts, NULL);
@@
-1388,11
+1389,23
@@
fault_simul_rule_add(__u32 opc, char *name, int argc, char **argv)
break;
case 'r': /* drop rate */
- attr.u.drop.da_rate = strtoul(optarg, NULL, 0);
+ if (opc == LNET_CTL_DROP_ADD)
+ attr.u.drop.da_rate = strtoul(optarg, NULL, 0);
+ else
+ attr.u.delay.la_rate = strtoul(optarg, NULL, 0);
break;
case 'i': /* time interval (# seconds) for message drop */
- attr.u.drop.da_interval = strtoul(optarg, NULL, 0);
+ if (opc == LNET_CTL_DROP_ADD)
+ attr.u.drop.da_interval = strtoul(optarg,
+ NULL, 0);
+ else
+ attr.u.delay.la_interval = strtoul(optarg,
+ NULL, 0);
+ break;
+
+ case 'l': /* seconds to wait before activating rule */
+ attr.u.delay.la_latency = strtoul(optarg, NULL, 0);
break;
case 'p': /* portal to filter */
@@
-1415,9
+1428,28
@@
fault_simul_rule_add(__u32 opc, char *name, int argc, char **argv)
}
optind = 1;
- if ((attr.u.drop.da_rate == 0) == (attr.u.drop.da_interval == 0)) {
- fprintf(stderr, "please provide drop rate or interval\n");
- return -1;
+ if (opc == LNET_CTL_DROP_ADD) {
+ /* NB: drop rate and interval are exclusive to each other */
+ if (!((attr.u.drop.da_rate == 0) ^
+ (attr.u.drop.da_interval == 0))) {
+ fprintf(stderr,
+ "please provide either drop rate or interval "
+ "but not both at the same time.\n");
+ return -1;
+ }
+ } else if (opc == LNET_CTL_DELAY_ADD) {
+ if (!((attr.u.delay.la_rate == 0) ^
+ (attr.u.delay.la_interval == 0))) {
+ fprintf(stderr,
+ "please provide either delay rate or interval "
+ "but not both at the same time.\n");
+ return -1;
+ }
+
+ if (attr.u.delay.la_latency == 0) {
+ fprintf(stderr, "latency cannot be zero\n");
+ return -1;
+ }
}
if (attr.fa_src == 0 || attr.fa_dst == 0) {
@@
-1443,8
+1475,9
@@
fault_simul_rule_add(__u32 opc, char *name, int argc, char **argv)
}
printf("Added %s rule %s->%s (1/%d)\n",
- name, libcfs_nid2str(attr.fa_src),
- libcfs_nid2str(attr.fa_dst), attr.u.drop.da_rate);
+ name, libcfs_nid2str(attr.fa_src), libcfs_nid2str(attr.fa_dst),
+ opc == LNET_CTL_DROP_ADD ?
+ attr.u.drop.da_rate : attr.u.delay.la_rate);
return 0;
getopt_failed:
@@
-1458,6
+1491,12
@@
jt_ptl_drop_add(int argc, char **argv)
return fault_simul_rule_add(LNET_CTL_DROP_ADD, "drop", argc, argv);
}
+int
+jt_ptl_delay_add(int argc, char **argv)
+{
+ return fault_simul_rule_add(LNET_CTL_DELAY_ADD, "delay", argc, argv);
+}
+
static int
fault_simul_rule_del(__u32 opc, char *name, int argc, char **argv)
{
@@
-1541,6
+1580,12
@@
jt_ptl_drop_del(int argc, char **argv)
return fault_simul_rule_del(LNET_CTL_DROP_DEL, "drop", argc, argv);
}
+int
+jt_ptl_delay_del(int argc, char **argv)
+{
+ return fault_simul_rule_del(LNET_CTL_DELAY_DEL, "delay", argc, argv);
+}
+
static int
fault_simul_rule_reset(__u32 opc, char *name, int argc, char **argv)
{
@@
-1565,6
+1610,13
@@
jt_ptl_drop_reset(int argc, char **argv)
return fault_simul_rule_reset(LNET_CTL_DROP_RESET, "drop", argc, argv);
}
+int
+jt_ptl_delay_reset(int argc, char **argv)
+{
+ return fault_simul_rule_reset(LNET_CTL_DELAY_RESET, "delay",
+ argc, argv);
+}
+
static int
fault_simul_rule_list(__u32 opc, char *name, int argc, char **argv)
{
@@
-1608,6
+1660,19
@@
fault_simul_rule_list(__u32 opc, char *name, int argc, char **argv)
stat.u.drop.ds_dropped, stat.fs_count,
stat.fs_put, stat.fs_ack,
stat.fs_get, stat.fs_reply);
+
+ } else if (opc == LNET_CTL_DELAY_LIST) {
+ printf("%s->%s (1/%d | %d, latency %d) ptl "LPX64
+ ", msg %x, "LPU64"/"LPU64", PUT "LPU64
+ ", ACK "LPU64", GET "LPU64", REP "LPU64"\n",
+ libcfs_nid2str(attr.fa_src),
+ libcfs_nid2str(attr.fa_dst),
+ attr.u.delay.la_rate, attr.u.delay.la_interval,
+ attr.u.delay.la_latency,
+ attr.fa_ptl_mask, attr.fa_msg_mask,
+ stat.u.delay.ls_delayed, stat.fs_count,
+ stat.fs_put, stat.fs_ack, stat.fs_get,
+ stat.fs_reply);
}
}
printf("found total %d\n", pos);
@@
-1621,6
+1686,12
@@
jt_ptl_drop_list(int argc, char **argv)
return fault_simul_rule_list(LNET_CTL_DROP_LIST, "drop", argc, argv);
}
+int
+jt_ptl_delay_list(int argc, char **argv)
+{
+ return fault_simul_rule_list(LNET_CTL_DELAY_LIST, "delay", argc, argv);
+}
+
double
get_cycles_per_usec ()
{