Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

report-min-bw #214

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions man/perftest.1
Original file line number Diff line number Diff line change
Expand Up @@ -325,6 +325,10 @@ many different options and modes.
Not relevant for RawEth.
System support required.
.TP
.B --report-min-bw=<iterations>
Sample minimum bandwidth over X iterations.
Relevant only for bandwidth.
.TP
.B --reversed
Reverse traffic direction - Server send to client.
.TP
Expand Down
24 changes: 20 additions & 4 deletions src/atomic_bw.c
Original file line number Diff line number Diff line change
Expand Up @@ -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));
}

Expand Down Expand Up @@ -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));
}

Expand Down Expand Up @@ -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);
}
Expand Down
8 changes: 8 additions & 0 deletions src/perftest_communication.c
Original file line number Diff line number Diff line change
Expand Up @@ -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))) {
Expand Down Expand Up @@ -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);

Expand All @@ -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);

}

Expand Down
44 changes: 42 additions & 2 deletions src/perftest_parameters.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 <duration> seconds\n");

printf(" --report-min-bw=<sample iterations>\n");
printf(" Sample minimum bandwidth over X iterations\n");
}

if (connection_type != RawEth) {
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}
/******************************************************************************
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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},
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -3664,20 +3689,29 @@ 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");

if (user_param->output == OUTPUT_BW)
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);
Expand All @@ -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) {
Expand All @@ -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)) {
Expand All @@ -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);
}
Expand All @@ -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) {
Expand Down
13 changes: 13 additions & 0 deletions src/perftest_parameters.h
Original file line number Diff line number Diff line change
Expand Up @@ -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] "

Expand All @@ -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"

Expand All @@ -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"
Expand Down Expand Up @@ -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 {
Expand All @@ -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 {
Expand Down
16 changes: 15 additions & 1 deletion src/perftest_resources.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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 */
Expand Down Expand Up @@ -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();
Expand Down
6 changes: 5 additions & 1 deletion src/raw_ethernet_send_bw.c
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down
15 changes: 12 additions & 3 deletions src/read_bw.c
Original file line number Diff line number Diff line change
Expand Up @@ -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));
}
Expand Down Expand Up @@ -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);
}
Expand Down
Loading