diff --git a/man/perftest.1 b/man/perftest.1 index 9c054dd1..baf3a145 100644 --- a/man/perftest.1 +++ b/man/perftest.1 @@ -325,6 +325,10 @@ many different options and modes. Not relevant for RawEth. System support required. .TP +.B --report-min-bw= + Sample minimum bandwidth over X iterations. + Relevant only for bandwidth. +.TP .B --reversed Reverse traffic direction - Server send to client. .TP diff --git a/src/atomic_bw.c b/src/atomic_bw.c index 7c907829..3343782f 100755 --- a/src/atomic_bw.c +++ b/src/atomic_bw.c @@ -231,7 +231,11 @@ int main(int argc, char *argv[]) if (user_param.machine == SERVER && !user_param.duplex) { if (user_param.output == FULL_VERBOSITY) { printf(RESULT_LINE); - printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); + if (user_param.report_min_bw) { + printf((user_param.report_fmt == MBS ? RESULT_FMT_MINBW : RESULT_FMT_G_MINBW)); + } else { + printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); + } printf((user_param.cpu_util_data.enable ? RESULT_EXT_CPU_UTIL : RESULT_EXT)); } @@ -289,7 +293,11 @@ int main(int argc, char *argv[]) } if (user_param.output == FULL_VERBOSITY) { printf(RESULT_LINE); - printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); + if (user_param.report_min_bw) { + printf((user_param.report_fmt == MBS ? RESULT_FMT_MINBW : RESULT_FMT_G_MINBW)); + } else { + printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); + } printf((user_param.cpu_util_data.enable ? RESULT_EXT_CPU_UTIL : RESULT_EXT)); } @@ -327,14 +335,22 @@ int main(int argc, char *argv[]) printf(RESULT_LINE); printf("\n Local results:\n"); printf(RESULT_LINE); - printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); + if (user_param.report_min_bw) { + printf((user_param.report_fmt == MBS ? RESULT_FMT_MINBW : RESULT_FMT_G_MINBW)); + } else { + printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); + } printf((user_param.cpu_util_data.enable ? RESULT_EXT_CPU_UTIL : RESULT_EXT)); print_full_bw_report(&user_param, &my_bw_rep, NULL); printf(RESULT_LINE); printf("\n Remote results:\n"); printf(RESULT_LINE); - printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); + if (user_param.report_min_bw) { + printf((user_param.report_fmt == MBS ? RESULT_FMT_MINBW : RESULT_FMT_G_MINBW)); + } else { + printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); + } printf((user_param.cpu_util_data.enable ? RESULT_EXT_CPU_UTIL : RESULT_EXT)); print_full_bw_report(&user_param, &rem_bw_rep, NULL); } diff --git a/src/perftest_communication.c b/src/perftest_communication.c index db9ae6dd..87eabfe4 100755 --- a/src/perftest_communication.c +++ b/src/perftest_communication.c @@ -1656,6 +1656,7 @@ void xchg_bw_reports (struct perftest_comm *comm, struct bw_report_data *my_bw_r temp.msgRate_avg = hton_double(my_bw_rep->msgRate_avg); temp.msgRate_avg_p1 = hton_double(my_bw_rep->msgRate_avg_p1); temp.msgRate_avg_p2 = hton_double(my_bw_rep->msgRate_avg_p2); + temp.bw_min = hton_double(my_bw_rep->bw_min); /*******************Exchange Reports*******************/ if (ctx_xchg_data(comm, (void*) (&temp.size), (void*) (&rem_bw_rep->size), sizeof(unsigned long))) { @@ -1701,6 +1702,11 @@ void xchg_bw_reports (struct perftest_comm *comm, struct bw_report_data *my_bw_r exit(1); } } + if (ctx_xchg_data(comm, (void*) (&temp.bw_min), (void*) (&rem_bw_rep->bw_min), sizeof(double))) { + fprintf(stderr," Failed to exchange data between server and clients\n"); + exit(1); + } + // cppcheck-suppress selfAssignment rem_bw_rep->size = hton_long(rem_bw_rep->size); @@ -1725,6 +1731,8 @@ void xchg_bw_reports (struct perftest_comm *comm, struct bw_report_data *my_bw_r rem_bw_rep->msgRate_avg_p1 = hton_double(rem_bw_rep->msgRate_avg_p1); // cppcheck-suppress selfAssignment rem_bw_rep->msgRate_avg_p2 = hton_double(rem_bw_rep->msgRate_avg_p2); + // cppcheck-suppress selfAssignment + rem_bw_rep->bw_min = hton_double(rem_bw_rep->bw_min); } diff --git a/src/perftest_parameters.c b/src/perftest_parameters.c index 0845a430..5975e746 100755 --- a/src/perftest_parameters.c +++ b/src/perftest_parameters.c @@ -531,6 +531,9 @@ static void usage(const char *argv0, VerbType verb, TestType tst, int connection printf(" --run_infinitely "); printf(" Run test forever, print results every seconds\n"); + + printf(" --report-min-bw=\n"); + printf(" Sample minimum bandwidth over X iterations\n"); } if (connection_type != RawEth) { @@ -793,6 +796,7 @@ static void init_perftest_params(struct perftest_parameters *user_param) user_param->vlan_en = OFF; user_param->vlan_pcp = 1; user_param->print_eth_func = &print_ethernet_header; + user_param->report_min_bw = 0; if (user_param->tst == LAT) { user_param->r_flag->unsorted = OFF; @@ -1708,6 +1712,13 @@ static void force_dependecies(struct perftest_parameters *user_param) exit(1); } + if (user_param->report_min_bw > 0) { + if (user_param->tst != BW) { + printf(" Sample minimum bandwidth only supports BW tests.\n"); + exit (1); + } + } + return; } /****************************************************************************** @@ -2204,6 +2215,7 @@ int parser(struct perftest_parameters *user_param,char *argv[], int argc) static int vlan_pcp_flag = 0; static int recv_post_list_flag = 0; static int payload_flag = 0; + static int report_min_bw_flag = 0; #ifdef HAVE_DCS static int log_dci_streams_flag = 0; static int log_active_dci_streams_flag = 0; @@ -2330,6 +2342,7 @@ int parser(struct perftest_parameters *user_param,char *argv[], int argc) { .name = "raw_ipv6", .has_arg = 0, .flag = &raw_ipv6_flag, .val = 1}, #endif {.name = "report-per-port", .has_arg = 0, .flag = &report_per_port_flag, .val = 1}, + {.name = "report-min-bw", .has_arg = 1, .flag = &report_min_bw_flag, .val = 1}, {.name = "odp", .has_arg = 0, .flag = &odp_flag, .val = 1}, {.name = "use_hugepages", .has_arg = 0, .flag = &hugepages_flag, .val = 1}, {.name = "use_old_post_send", .has_arg = 0, .flag = &old_post_send_flag, .val = 1}, @@ -2935,6 +2948,10 @@ int parser(struct perftest_parameters *user_param,char *argv[], int argc) CHECK_VALUE(user_param->recv_post_list,int,"Receive Post List size",not_int_ptr); recv_post_list_flag = 0; } + if (report_min_bw_flag) { + CHECK_VALUE(user_param->report_min_bw,int,"report min bandwidth interval",not_int_ptr); + report_min_bw_flag = 0; + } #ifdef HAVE_AES_XTS if (aes_xts_flag) { user_param->aes_xts = 1; @@ -3510,6 +3527,7 @@ void print_report_bw (struct perftest_parameters *user_param, struct bw_report_d exit(1); } + run_inf_bi_factor = (user_param->duplex && user_param->test_method == RUN_INFINITELY) ? (user_param->verb == SEND ? 1 : 2) : 1 ; tsize = run_inf_bi_factor * user_param->size; num_of_calculated_iters *= (user_param->test_type == DURATION) ? 1 : num_of_qps; @@ -3548,6 +3566,13 @@ void print_report_bw (struct perftest_parameters *user_param, struct bw_report_d my_bw_rep->msgRate_avg_p2 = msgRate_avg_p2; my_bw_rep->sl = user_param->sl; + if(user_param->report_min_bw) { + my_bw_rep->bw_min = ((double)tsize*user_param->report_min_bw*cycles_to_units) / (user_param->report_min_bw_cycles * format_factor); + } else { + my_bw_rep->bw_min = 0; + } + + if (!user_param->duplex || (user_param->verb == SEND && user_param->test_type == DURATION) || user_param->test_method == RUN_INFINITELY || user_param->connection_type == RawEth) print_full_bw_report(user_param, my_bw_rep, NULL); @@ -3664,11 +3689,15 @@ static void write_test_info_to_file(int out_json_fds, struct perftest_parameters } + if (user_param->report_min_bw) { + dprintf(out_json_fds, "report_min_bw: %d\n",user_param->report_min_bw); + } + dprintf(out_json_fds, "},\n"); } static void write_bw_report_to_file(int out_json_fd, struct perftest_parameters *user_param, int inc_accuracy, - double bw_avg, double msgRate_avg, unsigned long size, int sl, uint64_t iters, double bw_peak) { + double bw_avg, double msgRate_avg, unsigned long size, int sl, uint64_t iters, double bw_peak, double bw_min) { dprintf(out_json_fd, "results: {\n"); @@ -3676,8 +3705,13 @@ static void write_bw_report_to_file(int out_json_fd, struct perftest_parameters dprintf(out_json_fd, "bw_avg: %lf,\n", bw_avg); else if (user_param->output == OUTPUT_MR) dprintf(out_json_fd, "msgRate_avg: %lf,\n", msgRate_avg); + else if (user_param->raw_qos && user_param->report_min_bw) + dprintf(out_json_fd, REPORT_FMT_QOS_JSON_MINBW, size, sl, iters, bw_peak, bw_avg, msgRate_avg, bw_min); else if (user_param->raw_qos) dprintf(out_json_fd, REPORT_FMT_QOS_JSON, size, sl, iters, bw_peak, bw_avg, msgRate_avg); + else if (user_param->report_min_bw) + dprintf(out_json_fd, inc_accuracy ? REPORT_FMT_EXT_JSON_MINBW : REPORT_FMT_JSON_MINBW, + size, iters, bw_peak, bw_avg, msgRate_avg, bw_min); else dprintf(out_json_fd, inc_accuracy ? REPORT_FMT_EXT_JSON : REPORT_FMT_JSON, size, iters, bw_peak, bw_avg, msgRate_avg); @@ -3702,6 +3736,7 @@ void print_full_bw_report (struct perftest_parameters *user_param, struct bw_rep double msgRate_avg = my_bw_rep->msgRate_avg; double msgRate_avg_p1 = my_bw_rep->msgRate_avg_p1; double msgRate_avg_p2 = my_bw_rep->msgRate_avg_p2; + double bw_min = my_bw_rep->bw_min; int inc_accuracy = ((bw_avg < 0.1) && (user_param->report_fmt == GBS)); if (rem_bw_rep != NULL) { @@ -3712,6 +3747,7 @@ void print_full_bw_report (struct perftest_parameters *user_param, struct bw_rep msgRate_avg += rem_bw_rep->msgRate_avg; msgRate_avg_p1 += rem_bw_rep->msgRate_avg_p1; msgRate_avg_p2 += rem_bw_rep->msgRate_avg_p2; + bw_min += rem_bw_rep->bw_min; } if ( (user_param->duplex && rem_bw_rep != NULL) || (!user_param->duplex && rem_bw_rep == NULL)) { @@ -3733,7 +3769,7 @@ void print_full_bw_report (struct perftest_parameters *user_param, struct bw_rep dprintf(out_json_fd,"{\n"); write_test_info_to_file(out_json_fd, user_param); write_bw_report_to_file(out_json_fd, user_param, inc_accuracy, - bw_avg, msgRate_avg, my_bw_rep->size, my_bw_rep->sl, my_bw_rep->iters, bw_peak); + bw_avg, msgRate_avg, my_bw_rep->size, my_bw_rep->sl, my_bw_rep->iters, bw_peak, bw_min); dprintf(out_json_fd,"}\n"); close(out_json_fd); } @@ -3743,10 +3779,14 @@ void print_full_bw_report (struct perftest_parameters *user_param, struct bw_rep printf("%lf\n",bw_avg); else if (user_param->output == OUTPUT_MR) printf("%lf\n",msgRate_avg); + else if (user_param->raw_qos && user_param->report_min_bw) + printf( REPORT_FMT_QOS_MINBW, my_bw_rep->size, my_bw_rep->sl, my_bw_rep->iters, bw_peak, bw_avg, msgRate_avg, bw_min); else if (user_param->raw_qos) printf( REPORT_FMT_QOS, my_bw_rep->size, my_bw_rep->sl, my_bw_rep->iters, bw_peak, bw_avg, msgRate_avg); else if (user_param->report_per_port) printf(REPORT_FMT_PER_PORT, my_bw_rep->size, my_bw_rep->iters, bw_peak, bw_avg, msgRate_avg, bw_avg_p1, msgRate_avg_p1, bw_avg_p2, msgRate_avg_p2); + else if (user_param->report_min_bw) + printf( inc_accuracy ? REPORT_FMT_EXT_MINBW : REPORT_FMT_MINBW, my_bw_rep->size, my_bw_rep->iters, bw_peak, bw_avg, msgRate_avg, bw_min); else printf( inc_accuracy ? REPORT_FMT_EXT : REPORT_FMT, my_bw_rep->size, my_bw_rep->iters, bw_peak, bw_avg, msgRate_avg); if (user_param->output == FULL_VERBOSITY) { diff --git a/src/perftest_parameters.h b/src/perftest_parameters.h index 0ed65ba5..234a6af1 100755 --- a/src/perftest_parameters.h +++ b/src/perftest_parameters.h @@ -192,16 +192,20 @@ #define USEC "usec" /* The format of the results */ #define RESULT_FMT " #bytes #iterations BW peak[MB/sec] BW average[MB/sec] MsgRate[Mpps]" +#define RESULT_FMT_MINBW " #bytes #iterations BW peak[MB/sec] BW average[MB/sec] MsgRate[Mpps] BW min[MB/sec]" #define RESULT_FMT_PER_PORT " #bytes #iterations BW peak[MB/sec] BW average[MB/sec] MsgRate[Mpps] BW Port1[MB/sec] MsgRate Port1[Mpps] BW Port2[MB/sec] MsgRate Port2[Mpps]" #define RESULT_FMT_G " #bytes #iterations BW peak[Gb/sec] BW average[Gb/sec] MsgRate[Mpps]" +#define RESULT_FMT_G_MINBW " #bytes #iterations BW peak[Gb/sec] BW average[Gb/sec] MsgRate[Mpps] BW min[Gb/sec]" #define RESULT_FMT_G_PER_PORT " #bytes #iterations BW peak[Gb/sec] BW average[Gb/sec] MsgRate[Mpps] BW Port1[Gb/sec] MsgRate Port1[Mpps] BW Port2[Gb/sec] MsgRate Port2[Mpps]" #define RESULT_FMT_QOS " #bytes #sl #iterations BW peak[MB/sec] BW average[MB/sec] MsgRate[Mpps]" +#define RESULT_FMT_QOS_MINBW " #bytes #sl #iterations BW peak[MB/sec] BW average[MB/sec] MsgRate[Mpps] BW min[MB/sec]" #define RESULT_FMT_G_QOS " #bytes #sl #iterations BW peak[Gb/sec] BW average[Gb/sec] MsgRate[Mpps]" +#define RESULT_FMT_G_QOS_MINBW " #bytes #sl #iterations BW peak[Gb/sec] BW average[Gb/sec] MsgRate[Mpps] BW min[Gb/sec]" #define RESULT_FMT_LAT " #bytes #iterations t_min[usec] t_max[usec] t_typical[usec] t_avg[usec] t_stdev[usec] 99""%"" percentile[usec] 99.9""%"" percentile[usec] " @@ -217,12 +221,16 @@ /* Result print format */ #define REPORT_FMT " %-7lu %-10" PRIu64 " %-7.2lf %-7.2lf %-7.6lf" +#define REPORT_FMT_MINBW " %-7lu %-10" PRIu64 " %-7.2lf %-7.2lf %-7.6lf %-7.2lf" #define REPORT_FMT_JSON "MsgSize: %lu,\nn_iterations: %" PRIu64 ",\nBW_peak: %.2lf,\nBW_average: %.2lf,\nMsgRate: %.6lf,\n" +#define REPORT_FMT_JSON_MINBW "MsgSize: %lu,\nn_iterations: %" PRIu64 ",\nBW_peak: %.2lf,\nBW_average: %.2lf,\nMsgRate: %.6lf,\nBW_min: %.2lf,\n" #define REPORT_FMT_EXT " %-7lu %" PRIu64 " %-7.6lf %-7.6lf %-7.6lf" +#define REPORT_FMT_EXT_MINBW " %-7lu %" PRIu64 " %-7.6lf %-7.6lf %-7.6lf %-7.2lf" #define REPORT_FMT_EXT_JSON "MsgSize: %lu,\nn_iterations: %" PRIu64 ",\nBW_peak: %.6lf,\nBW_average: %.6lf,\nMsgRate: %.6lf,\n" +#define REPORT_FMT_EXT_JSON_MINBW "MsgSize: %lu,\nn_iterations: %" PRIu64 ",\nBW_peak: %.6lf,\nBW_average: %.6lf,\nMsgRate: %.6lf,\nBW_min: %.2lf,\n" #define REPORT_FMT_PER_PORT " %-7lu %-10" PRIu64 " %-7.2lf %-7.2lf %-7.6lf %-7.2lf %-7.6lf %-7.2lf %-7.6lf" @@ -233,8 +241,10 @@ #define REPORT_EXT_CPU_UTIL_JSON "CPU_util: %.2f,\n" #define REPORT_FMT_QOS " %-7lu %d %lu %-7.2lf %-7.2lf %-7.6lf\n" +#define REPORT_FMT_QOS_MINBW " %-7lu %d %lu %-7.2lf %-7.2lf %-7.6lf %-7.2lf\n" #define REPORT_FMT_QOS_JSON "MsgSize: %lu,\nsl: %d,\nn_iterations: %lu,\nBW_peak: %.2lf,\nBW_average: %.2lf,\n MsgRate: %.6lf,\n" +#define REPORT_FMT_QOS_JSON_MINBW "MsgSize: %lu,\nsl: %d,\nn_iterations: %lu,\nBW_peak: %.2lf,\nBW_average: %.2lf,\n MsgRate: %.6lf,\nBW_min: %.2lf,\n" /* Result print format for latency tests. */ #define REPORT_FMT_LAT " %-7lu %" PRIu64 " %-7.2f %-7.2f %-7.2f %-7.2f %-7.2f %-7.2f %-7.2f" @@ -630,6 +640,8 @@ struct perftest_parameters { char *source_ip; int has_source_ip; int ah_allocated; + int report_min_bw; + uint64_t report_min_bw_cycles; }; struct report_options { @@ -649,6 +661,7 @@ struct bw_report_data { double msgRate_avg_p1; double msgRate_avg_p2; int sl; + double bw_min; }; struct rate_gbps_string { diff --git a/src/perftest_resources.c b/src/perftest_resources.c index ddd5c776..689a92d7 100755 --- a/src/perftest_resources.c +++ b/src/perftest_resources.c @@ -3345,7 +3345,8 @@ int run_iter_bw(struct pingpong_context *ctx,struct perftest_parameters *user_pa uintptr_t primary_send_addr = ctx->sge_list[0].addr; int address_offset = 0; int flows_burst_iter = 0; - + cycles_t batch_start = 0; + uint64_t batch_ccnt = 0; #ifdef HAVE_IBV_WR_API if (user_param->connection_type != RawEth) ctx_post_send_work_request_func_pointer(ctx, user_param); @@ -3380,6 +3381,9 @@ int run_iter_bw(struct pingpong_context *ctx,struct perftest_parameters *user_pa if (user_param->test_type == ITERATIONS && user_param->noPeak == ON) user_param->tposted[0] = get_cycles(); + if(user_param->report_min_bw) + batch_start = get_cycles(); + /* If using rate limiter, calculate gap time between bursts */ if (user_param->rate_limit_type == SW_RATE_LIMIT ) { /* Calculate rate limit in pps */ @@ -3537,6 +3541,16 @@ int run_iter_bw(struct pingpong_context *ctx,struct perftest_parameters *user_pa goto cleaning; } } + if(user_param->report_min_bw) { + if (totccnt >= (user_param->report_min_bw + batch_ccnt) && totscnt >= user_param->report_min_bw) { + cycles_t batch_duration = get_cycles() - batch_start; + batch_start = get_cycles(); + batch_ccnt = totccnt; + if(batch_duration > user_param->report_min_bw_cycles) { + user_param->report_min_bw_cycles = batch_duration; + } + } + } } if (user_param->noPeak == ON && user_param->test_type == ITERATIONS) user_param->tcompleted[0] = get_cycles(); diff --git a/src/raw_ethernet_send_bw.c b/src/raw_ethernet_send_bw.c index 0439073e..6aaa6cf3 100755 --- a/src/raw_ethernet_send_bw.c +++ b/src/raw_ethernet_send_bw.c @@ -275,8 +275,12 @@ int main(int argc, char *argv[]) if (user_param.output == FULL_VERBOSITY) { printf(RESULT_LINE); - if (user_param.raw_qos) + if (user_param.raw_qos && user_param.report_min_bw) + printf((user_param.report_fmt == MBS ? RESULT_FMT_QOS_MINBW : RESULT_FMT_G_QOS_MINBW)); + else if (user_param.raw_qos) printf((user_param.report_fmt == MBS ? RESULT_FMT_QOS : RESULT_FMT_G_QOS)); + else if (user_param.report_min_bw) + printf((user_param.report_fmt == MBS ? RESULT_FMT_MINBW : RESULT_FMT_G_MINBW)); else printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); printf((user_param.cpu_util_data.enable ? RESULT_EXT_CPU_UTIL : RESULT_EXT)); diff --git a/src/read_bw.c b/src/read_bw.c index ab198f62..6747464e 100755 --- a/src/read_bw.c +++ b/src/read_bw.c @@ -230,7 +230,10 @@ int main(int argc, char *argv[]) } else { printf(RESULT_LINE); - printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); + if (user_param.report_min_bw) + printf((user_param.report_fmt == MBS ? RESULT_FMT_MINBW : RESULT_FMT_G_MINBW)); + else + printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); } printf((user_param.cpu_util_data.enable ? RESULT_EXT_CPU_UTIL : RESULT_EXT)); } @@ -368,14 +371,20 @@ int main(int argc, char *argv[]) printf(RESULT_LINE); printf("\n Local results: \n"); printf(RESULT_LINE); - printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); + if (user_param.report_min_bw) + printf((user_param.report_fmt == MBS ? RESULT_FMT_MINBW : RESULT_FMT_G_MINBW)); + else + printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); printf((user_param.cpu_util_data.enable ? RESULT_EXT_CPU_UTIL : RESULT_EXT)); print_full_bw_report(&user_param, &my_bw_rep, NULL); printf(RESULT_LINE); printf("\n Remote results: \n"); printf(RESULT_LINE); - printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); + if (user_param.report_min_bw) + printf((user_param.report_fmt == MBS ? RESULT_FMT_MINBW : RESULT_FMT_G_MINBW)); + else + printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); printf((user_param.cpu_util_data.enable ? RESULT_EXT_CPU_UTIL : RESULT_EXT)); print_full_bw_report(&user_param, &rem_bw_rep, NULL); } diff --git a/src/send_bw.c b/src/send_bw.c index 8289b43a..53108bfc 100755 --- a/src/send_bw.c +++ b/src/send_bw.c @@ -399,7 +399,10 @@ int main(int argc, char *argv[]) } else { printf(RESULT_LINE); - printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); + if (user_param.report_min_bw) + printf((user_param.report_fmt == MBS ? RESULT_FMT_MINBW : RESULT_FMT_G_MINBW)); + else + printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); } printf((user_param.cpu_util_data.enable ? RESULT_EXT_CPU_UTIL : RESULT_EXT)); } @@ -517,14 +520,20 @@ int main(int argc, char *argv[]) printf(RESULT_LINE); printf("\n Local results: \n"); printf(RESULT_LINE); - printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); + if (user_param.report_min_bw) + printf((user_param.report_fmt == MBS ? RESULT_FMT_MINBW : RESULT_FMT_G_MINBW)); + else + printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); printf((user_param.cpu_util_data.enable ? RESULT_EXT_CPU_UTIL : RESULT_EXT)); print_full_bw_report(&user_param, &my_bw_rep, NULL); printf(RESULT_LINE); printf("\n Remote results: \n"); printf(RESULT_LINE); - printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); + if (user_param.report_min_bw) + printf((user_param.report_fmt == MBS ? RESULT_FMT_MINBW : RESULT_FMT_G_MINBW)); + else + printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); printf((user_param.cpu_util_data.enable ? RESULT_EXT_CPU_UTIL : RESULT_EXT)); print_full_bw_report(&user_param, &rem_bw_rep, NULL); } diff --git a/src/write_bw.c b/src/write_bw.c index 31bc9e9f..907e3302 100755 --- a/src/write_bw.c +++ b/src/write_bw.c @@ -235,7 +235,10 @@ int main(int argc, char *argv[]) } else { printf(RESULT_LINE); - printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); + if (user_param.report_min_bw) + printf((user_param.report_fmt == MBS ? RESULT_FMT_MINBW : RESULT_FMT_G_MINBW)); + else + printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); } printf((user_param.cpu_util_data.enable ? RESULT_EXT_CPU_UTIL : RESULT_EXT)); @@ -367,14 +370,20 @@ int main(int argc, char *argv[]) printf(RESULT_LINE); printf("\n Local results: \n"); printf(RESULT_LINE); - printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); + if (user_param.report_min_bw) + printf((user_param.report_fmt == MBS ? RESULT_FMT_MINBW : RESULT_FMT_G_MINBW)); + else + printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); printf((user_param.cpu_util_data.enable ? RESULT_EXT_CPU_UTIL : RESULT_EXT)); print_full_bw_report(&user_param, &my_bw_rep, NULL); printf(RESULT_LINE); printf("\n Remote results: \n"); printf(RESULT_LINE); - printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); + if (user_param.report_min_bw) + printf((user_param.report_fmt == MBS ? RESULT_FMT_MINBW : RESULT_FMT_G_MINBW)); + else + printf((user_param.report_fmt == MBS ? RESULT_FMT : RESULT_FMT_G)); printf((user_param.cpu_util_data.enable ? RESULT_EXT_CPU_UTIL : RESULT_EXT)); print_full_bw_report(&user_param, &rem_bw_rep, NULL); }