108 #define DESCRIBE(field, name, description) \ 109 static const char *msg_##field = description; \ 110 static const char opt_##field = name 115 "for the test servers");
117 "for the test clients");
120 DESCRIBE(data_servers,
'D',
"List of test server data endpoints");
121 DESCRIBE(data_clients,
'd',
"List of test client data endpoints");
123 DESCRIBE(msg_nr,
'n',
"Number of test messages for the " 124 "test client (for each server)");
125 DESCRIBE(msg_size,
's',
"Test message size");
126 DESCRIBE(test_time_limit,
'T',
"Test run time limit, seconds");
127 DESCRIBE(bd_buf_nr_server,
'B',
"Number of message buffers for bulk buffer " 128 "network descriptors for the test server");
129 DESCRIBE(bd_buf_nr_client,
'b',
"Number of message buffers for bulk buffer " 130 "network descriptors for the test client");
131 DESCRIBE(bd_buf_size,
'f',
"Size of buffer for bulk buffer " 132 "network descriptors");
133 DESCRIBE(bd_nr_max,
'g',
"Maximum number of bulk buffer " 134 "network descriptors in msg buffer");
135 DESCRIBE(concurrency_server,
'E',
"Test server concurrency");
136 DESCRIBE(concurrency_client,
'e',
"Test client concurrency");
153 if (strlen(
addr) == 0)
252 bool list_if =
false;
255 #define NUMBER_ARG(name) \ 256 M0_NUMBERARG(opt_##name, msg_##name, \ 257 LAMBDA(void, (int64_t nr) { \ 261 cfg->ntcc_##name = nr; \ 263 #define SCALED_ARG(name) \ 264 M0_SCALEDARG(opt_##name, msg_##name, \ 265 LAMBDA(void, (m0_bcount_t size) { \ 269 cfg->ntcc_##name = size; \ 271 #define SLIST_ARG(name) \ 272 M0_STRINGARG(opt_##name, msg_##name, \ 273 LAMBDA(void, (const char *str) { \ 275 m0_net_test_slist_init(&cfg->ntcc_##name, \ 278 #define ASCIIZ_ARG(name) \ 279 M0_STRINGARG(opt_##name, msg_##name, \ 280 LAMBDA(void, (const char *str) { \ 281 cfg->ntcc_##name = m0_net_test_u_str_copy(str); \ 283 #define TIME_ARG(name) \ 284 M0_NUMBERARG(opt_##name, msg_##name, \ 285 LAMBDA(void, (int64_t nr) { \ 289 cfg->ntcc_##name = M0_MKTIME(nr, 0); \ 301 if (strncmp(
type,
"ping", 5) == 0)
303 else if (strncmp(
type,
"bulk", 5) == 0)
318 M0_FLAGARG(
'P',
"Parse trace buffer (from stdin to stdout)",
328 return list_if ? 1 : success ? 0 : -1;
348 const char *text_pre,
349 const char *text_post)
353 if (text_pre !=
NULL)
356 if (text_post !=
NULL)
358 text_post,
rc,
rc != 1 ?
"s" :
"");
408 sd =
ctx->ntcc_clients.ntcrc_sd;
438 #define CONSOLE_PRINT_MSG_NR(name) \ 439 printf("%s_"#name" %lu ", prefix, msg_nr->ntmn_##name) 443 #undef CONSOLE_PRINT_MSG_NR 449 #define CONSOLE_PRINT_STATS(name) \ 450 printf("%s_"#name" %lu ", prefix, stats->nts_##name); 454 #undef CONSOLE_PRINT_STATS 465 const char *prefix_p;
466 const char *prefix_v;
469 { .prefix_p =
"sent",
472 { .prefix_p =
"received",
473 .prefix_v =
", received",
475 { .prefix_p =
"bulk_sent",
476 .prefix_v =
", bulk sent",
478 { .prefix_p =
"bulk_received",
479 .prefix_v =
", bulk received",
481 { .prefix_p =
"transfers",
482 .prefix_v =
", transfers",
486 const char *prefix_p;
487 const char *prefix_v;
490 { .prefix_p =
"mps_sent",
491 .prefix_v =
"MPS, sent",
493 { .prefix_p =
"mps_received",
494 .prefix_v =
", MPS, received",
507 (parsable ? msg_nr[
i].prefix_p : msg_nr[
i].prefix_v,
546 "INIT => test servers",
547 "test servers => INIT DONE");
551 "INIT => test clients",
552 "test clients => INIT DONE");
556 "START => test servers",
557 "test servers => START DONE");
561 "START => test clients",
562 "test clients => START DONE");
569 time_left =
ctx->ntcc_cfg->ntcc_test_time_limit;
570 ctx->ntcc_clients.ntcrc_sd->ntcsd_finished =
false;
571 while (!
ctx->ntcc_clients.ntcrc_sd->ntcsd_finished &&
575 time_left = time_left > status_interval ?
576 time_left - status_interval : 0;
585 ctx->ntcc_clients.ntcrc_sd :
586 ctx->ntcc_servers.ntcrc_sd);
595 "STOP => test clients",
596 "test clients => STOP DONE");
604 "STOP => test servers",
605 "test servers => STOP DONE");
617 ctx->ntcc_clients.ntcrc_sd);
619 ctx->ntcc_servers.ntcrc_sd);
624 int main(
int argc,
char *argv[])
632 .ntcc_addr_console4clients =
NULL,
634 .ntcc_cmd_send_timeout =
M0_MKTIME(10, 0),
635 .ntcc_cmd_recv_timeout =
M0_MKTIME(10, 0),
636 .ntcc_buf_send_timeout =
M0_MKTIME(3, 0),
637 .ntcc_buf_recv_timeout =
M0_MKTIME(3, 0),
638 .ntcc_buf_bulk_timeout =
M0_MKTIME(3, 0),
643 .ntcc_bd_buf_nr_client = 0,
644 .ntcc_bd_buf_nr_server = 0,
645 .ntcc_bd_buf_size = 0,
647 .ntcc_concurrency_server = 0,
648 .ntcc_concurrency_client = 0,
int m0_net_test_init(void)
#define M0_GETOPTS(progname, argc, argv,...)
static int net_test_fini(void)
static void print_stats_parsable(const char *prefix, struct m0_net_test_stats *stats)
int m0_net_test_u_printf_v(const char *fmt,...)
static bool addr_check(const char *addr)
#define M0_FLAGARG(ch, desc, ptr)
static int(* diff[M0_PARITY_CAL_ALGO_NR])(struct m0_parity_math *math, struct m0_buf *old, struct m0_buf *new, struct m0_buf *parity, uint32_t index)
static char * addr_console4clients
void m0_net_test_u_print_bsize(double bsize)
static void print_status_data(struct m0_net_test_console_ctx *ctx)
bool m0_net_test_u_printf_verbose
struct m0_net_test_mps ntcsd_mps_recv
const m0_time_t M0_TIME_NEVER
enum m0_net_test_type ntcc_test_type
struct m0_net_test_stats ntcsd_rtt
static void bsize_print(const char *descr, struct m0_net_test_console_ctx *ctx, double msg_nr)
#define M0_VERBOSEFLAGARG
#define M0_IFLISTARG(pflag)
void m0_net_test_fini(void)
uint64_t m0_time_nanoseconds(const m0_time_t time)
static bool config_check(struct m0_net_test_console_cfg *cfg)
static struct m0_uint128 prefix
uint64_t ntcc_concurrency_server
void m0_net_test_u_lnet_info(void)
uint64_t ntcc_concurrency_client
double m0_net_test_stats_avg(const struct m0_net_test_stats *stats)
static int console_run(struct m0_net_test_console_ctx *ctx)
int m0_init(struct m0 *instance)
void m0_net_test_u_print_time(char *name, m0_time_t time)
struct m0_net_test_msg_nr ntcsd_bulk_nr_send
struct m0_net_test_msg_nr ntcsd_transfers
uint64_t ntcc_bd_buf_nr_client
m0_time_t ntcc_cmd_send_timeout
static void print_status_data_parsable(const char *prefix, struct m0_net_test_cmd_status_data *sd)
static struct m0_trace_stats stats
static struct m0_net_test_cmd_ctx console
static void print_msg_nr(const char *descr, struct m0_net_test_msg_nr *msg_nr)
void m0_net_test_console_fini(struct m0_net_test_console_ctx *ctx)
#define M0_STRINGARG(ch, desc, func)
static bool produce_parsable_output
size_t m0_net_test_console_cmd(struct m0_net_test_console_ctx *ctx, enum m0_net_test_role role, enum m0_net_test_cmd_type cmd_type)
int m0_net_test_u_printf(const char *fmt,...)
#define DESCRIBE(field, name, description)
char * ntcc_addr_console4servers
static bool parse_trace_buffer
void m0_net_test_slist_fini(struct m0_net_test_slist *slist)
static char servers[NTCS_NODES_MAX *NTCS_NODE_ADDR_MAX]
struct m0_net_test_mps ntcsd_mps_send
struct m0_net_test_msg_nr ntcsd_msg_nr_recv
static long long max(long long a, long long b)
#define CONSOLE_PRINT_MSG_NR(name)
static void config_print(struct m0_net_test_console_cfg *cfg)
m0_time_t ntcsd_time_start
#define CONSOLE_PRINT_STATS(name)
static bool addr_list_check(struct m0_net_test_slist *slist)
static void print_status_data_implementation(struct m0_net_test_cmd_status_data *sd, bool parsable)
uint64_t m0_time_seconds(const m0_time_t time)
struct m0_net_test_slist ntcc_data_clients
static char * addr_console4servers
struct m0_net_test_msg_nr ntcsd_msg_nr_send
int main(int argc, char *argv[])
bool m0_net_test_slist_invariant(const struct m0_net_test_slist *slist)
static long long min(long long a, long long b)
static void config_free(struct m0_net_test_console_cfg *cfg)
m0_bcount_t ntcc_bd_buf_size
m0_bcount_t ntcc_msg_size
void m0_net_test_u_print_error(const char *s, int code)
static void print_msg_nr_parsable(const char *prefix, struct m0_net_test_msg_nr *msg_nr)
m0_time_t ntcsd_time_finish
m0_time_t m0_time_sub(const m0_time_t t1, const m0_time_t t2)
int m0_net_test_console_init(struct m0_net_test_console_ctx *ctx, struct m0_net_test_console_cfg *cfg)
char * ntcc_addr_console4clients
struct m0_net_test_msg_nr ntcsd_bulk_nr_recv
void m0_net_test_u_print_s(const char *fmt, const char *str)
struct m0_net_test_slist ntcc_servers
static char clients[NTCS_NODES_MAX *NTCS_NODE_ADDR_MAX]
static struct m0 instance
void m0_net_test_u_str_free(char *str)
#define M0_MKTIME(secs, ns)
static double avg_total(m0_time_t diff_t, double msg_nr)
M0_INTERNAL int m0_trace_parse(FILE *trace_file, FILE *output_file, const char *m0tr_ko_path, enum m0_trace_parse_flags flags, const void *magic_symbols[], unsigned int magic_symbols_nr)
static void print_status_data_v(struct m0_net_test_cmd_status_data *sd)
struct m0_net_test_slist ntcc_clients
struct m0_net_test_slist ntcc_data_servers
static void print_stats(const char *descr, struct m0_net_test_stats *stats)
static int configure(int argc, char *argv[], struct m0_net_test_console_cfg *cfg)
uint64_t ntcc_bd_buf_nr_server
static void print_slist(char *name, struct m0_net_test_slist *slist)
struct m0_net_test_stats ntmps_stats
static bool console_step(struct m0_net_test_console_ctx *ctx, enum m0_net_test_role role, enum m0_net_test_cmd_type cmd_type, const char *text_pre, const char *text_post)
double m0_net_test_stats_stddev(const struct m0_net_test_stats *stats)
int m0_nanosleep(const m0_time_t req, m0_time_t *rem)