Skip to content
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
8 changes: 8 additions & 0 deletions src/atomic_bw.c
Original file line number Diff line number Diff line change
Expand Up @@ -318,11 +318,14 @@ int main(int argc, char *argv[])

print_report_bw(&user_param, &my_bw_rep);

// print either just the local, or the aggregate of local and remote
if (user_param.duplex) {
xchg_bw_reports(&user_comm, &my_bw_rep, &rem_bw_rep, atof(user_param.rem_version));
print_full_bw_report(&user_param, &my_bw_rep, &rem_bw_rep);
}

// print local and remote separately, if separate reporting was requested
// and a duplex test was run
if (user_param.report_both && user_param.duplex) {
printf(RESULT_LINE);
printf("\n Local results:\n");
Expand All @@ -338,6 +341,11 @@ int main(int argc, char *argv[])
printf((user_param.cpu_util_data.enable ? RESULT_EXT_CPU_UTIL : RESULT_EXT));
print_full_bw_report(&user_param, &rem_bw_rep, NULL);
}

// print JSON, if requested
if (user_param.out_json) {
print_full_bw_report_to_file(&user_param, &my_bw_rep, &rem_bw_rep);
}
} else if (user_param.test_method == RUN_INFINITELY) {

if (run_iter_bw_infinitely(&ctx, &user_param)) {
Expand Down
113 changes: 67 additions & 46 deletions src/perftest_parameters.c
Original file line number Diff line number Diff line change
Expand Up @@ -4042,25 +4042,75 @@ static void write_test_info_to_file(int out_json_fds, struct perftest_parameters
dprintf(out_json_fds, "\n},\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) {
static struct bw_report_data sum_bw_reports(struct bw_report_data *my_bw_rep, struct bw_report_data *rem_bw_rep) {
struct bw_report_data merged_bw_rep = *my_bw_rep;

dprintf(out_json_fd, "\"results\": {\n");
if (rem_bw_rep != NULL) {
merged_bw_rep.bw_peak += rem_bw_rep->bw_peak;
merged_bw_rep.bw_avg += rem_bw_rep->bw_avg;
merged_bw_rep.bw_avg_p1 += rem_bw_rep->bw_avg_p1;
merged_bw_rep.bw_avg_p2 += rem_bw_rep->bw_avg_p2;
merged_bw_rep.msgRate_avg += rem_bw_rep->msgRate_avg;
merged_bw_rep.msgRate_avg_p1 += rem_bw_rep->msgRate_avg_p1;
merged_bw_rep.msgRate_avg_p2 += rem_bw_rep->msgRate_avg_p2;
}

return merged_bw_rep;
}

static void write_bw_report_data_to_file(int out_json_fd, struct perftest_parameters *user_param, int inc_accuracy,
struct bw_report_data *bw_rep) {

if (user_param->output == OUTPUT_BW)
dprintf(out_json_fd, "\"bw_avg\": %lf,\n", bw_avg);
dprintf(out_json_fd, "\"bw_avg\": %lf,\n", bw_rep->bw_avg);
else if (user_param->output == OUTPUT_MR)
dprintf(out_json_fd, "\"msgRate_avg\": %lf,\n", msgRate_avg);
dprintf(out_json_fd, "\"msgRate_avg\": %lf,\n", bw_rep->msgRate_avg);
else if (user_param->raw_qos)
dprintf(out_json_fd, REPORT_FMT_QOS_JSON, size, sl, iters, bw_peak, bw_avg, msgRate_avg);
dprintf(out_json_fd, REPORT_FMT_QOS_JSON,
bw_rep->size, bw_rep->sl, bw_rep->iters, bw_rep->bw_peak, bw_rep->bw_avg, bw_rep->msgRate_avg);
else
dprintf(out_json_fd, inc_accuracy ? REPORT_FMT_EXT_JSON : REPORT_FMT_JSON,
size, iters, bw_peak, bw_avg, msgRate_avg);
bw_rep->size, bw_rep->iters, bw_rep->bw_peak, bw_rep->bw_avg, bw_rep->msgRate_avg);

dprintf(out_json_fd, user_param->cpu_util_data.enable ?
REPORT_EXT_CPU_UTIL_JSON : REPORT_EXT_JSON, calc_cpu_util(user_param));
}

dprintf(out_json_fd, "}\n");
static void write_bw_report_to_file(int out_json_fd, struct perftest_parameters *user_param,
struct bw_report_data *my_bw_rep, struct bw_report_data *rem_bw_rep)
{
struct bw_report_data sum_bw_report = sum_bw_reports(my_bw_rep, rem_bw_rep);
int inc_accuracy = ((sum_bw_report.bw_avg < 0.1) && (user_param->report_fmt == GBS));

dprintf(out_json_fd, "\"results\": {\n");
write_bw_report_data_to_file(out_json_fd, user_param, inc_accuracy, &sum_bw_report);

if (user_param->report_both && rem_bw_rep != NULL) {
dprintf(out_json_fd, "},\n");
} else {
dprintf(out_json_fd, "}\n");
}

if (user_param->report_both && rem_bw_rep != NULL) {
dprintf(out_json_fd, "\"results_local\": {\n");
write_bw_report_data_to_file(out_json_fd, user_param, inc_accuracy, my_bw_rep);
dprintf(out_json_fd, "},\n");

dprintf(out_json_fd, "\"results_remote\": {\n");
write_bw_report_data_to_file(out_json_fd, user_param, inc_accuracy, rem_bw_rep);
dprintf(out_json_fd, "}\n");
}
}

void print_full_bw_report_to_file(struct perftest_parameters *user_param, struct bw_report_data *my_bw_rep, struct bw_report_data *rem_bw_rep) {
int out_json_fd = open_file_write(user_param->out_json_file_name);
if(out_json_fd >= 0){
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, my_bw_rep, rem_bw_rep);
dprintf(out_json_fd,"}\n");
close(out_json_fd);
}
}

/******************************************************************************
Expand All @@ -4069,61 +4119,32 @@ static void write_bw_report_to_file(int out_json_fd, struct perftest_parameters

void print_full_bw_report (struct perftest_parameters *user_param, struct bw_report_data *my_bw_rep, struct bw_report_data *rem_bw_rep)
{

double bw_peak = my_bw_rep->bw_peak;
double bw_avg = my_bw_rep->bw_avg;
double bw_avg_p1 = my_bw_rep->bw_avg_p1;
double bw_avg_p2 = my_bw_rep->bw_avg_p2;
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;
int inc_accuracy = ((bw_avg < 0.1) && (user_param->report_fmt == GBS));

if (rem_bw_rep != NULL) {
bw_peak += rem_bw_rep->bw_peak;
bw_avg += rem_bw_rep->bw_avg;
bw_avg_p1 += rem_bw_rep->bw_avg_p1;
bw_avg_p2 += rem_bw_rep->bw_avg_p2;
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;
}
struct bw_report_data sum_bw_report = sum_bw_reports(my_bw_rep, rem_bw_rep);
int inc_accuracy = ((sum_bw_report.bw_avg < 0.1) && (user_param->report_fmt == GBS));

if ( (user_param->duplex && rem_bw_rep != NULL) || (!user_param->duplex && rem_bw_rep == NULL) || (user_param->duplex && user_param->verb == SEND)) {
/* Verify Limits */
if ( ((user_param->is_limit_bw == ON )&& (user_param->limit_bw > bw_avg)) )
if ( ((user_param->is_limit_bw == ON )&& (user_param->limit_bw > sum_bw_report.bw_avg)) )
user_param->is_bw_limit_passed |= 0;
else
user_param->is_bw_limit_passed |= 1;

if ( (user_param->is_limit_msgrate) && (user_param->limit_msgrate > msgRate_avg) )
if ( (user_param->is_limit_msgrate) && (user_param->limit_msgrate > sum_bw_report.msgRate_avg) )
user_param->is_msgrate_limit_passed |= 0;
else
user_param->is_msgrate_limit_passed |= 1;
}

if(user_param->out_json) {
int out_json_fd = open_file_write(user_param->out_json_file_name);
if(out_json_fd >= 0){
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);
dprintf(out_json_fd,"}\n");
close(out_json_fd);
}
}

if (user_param->output == OUTPUT_BW)
printf("%lf\n",bw_avg);
printf("%lf\n",sum_bw_report.bw_avg);
else if (user_param->output == OUTPUT_MR)
printf("%lf\n",msgRate_avg);
printf("%lf\n",sum_bw_report.msgRate_avg);
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);
printf( REPORT_FMT_QOS, sum_bw_report.size, sum_bw_report.sl, sum_bw_report.iters, sum_bw_report.bw_peak, sum_bw_report.bw_avg, sum_bw_report.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);
printf(REPORT_FMT_PER_PORT, sum_bw_report.size, sum_bw_report.iters, sum_bw_report.bw_peak, sum_bw_report.bw_avg, sum_bw_report.msgRate_avg, sum_bw_report.bw_avg_p1, sum_bw_report.msgRate_avg_p1, sum_bw_report.bw_avg_p2, sum_bw_report.msgRate_avg_p2);
else
printf( inc_accuracy ? REPORT_FMT_EXT : REPORT_FMT, my_bw_rep->size, my_bw_rep->iters, bw_peak, bw_avg, msgRate_avg);
printf( inc_accuracy ? REPORT_FMT_EXT : REPORT_FMT, sum_bw_report.size, sum_bw_report.iters, sum_bw_report.bw_peak, sum_bw_report.bw_avg, sum_bw_report.msgRate_avg);
if (user_param->output == FULL_VERBOSITY) {
fflush(stdout);
fprintf(stdout, user_param->cpu_util_data.enable ? REPORT_EXT_CPU_UTIL : REPORT_EXT , calc_cpu_util(user_param));
Expand Down
2 changes: 2 additions & 0 deletions src/perftest_parameters.h
Original file line number Diff line number Diff line change
Expand Up @@ -791,6 +791,8 @@ void ctx_print_test_info(struct perftest_parameters *user_param);
*/
void print_report_bw (struct perftest_parameters *user_param, struct bw_report_data *my_bw_rep);

void print_full_bw_report_to_file (struct perftest_parameters *user_param, struct bw_report_data *my_bw_rep, struct bw_report_data *rem_bw_rep);

/* print_full_bw_report
*
* Description : Print the peak and average throughput of the BW test.
Expand Down
8 changes: 8 additions & 0 deletions src/read_bw.c
Original file line number Diff line number Diff line change
Expand Up @@ -364,11 +364,14 @@ int main(int argc, char *argv[])

print_report_bw(&user_param,&my_bw_rep);

// print either just the local, or the aggregate of local and remote
if (user_param.duplex) {
xchg_bw_reports(&user_comm, &my_bw_rep,&rem_bw_rep,atof(user_param.rem_version));
print_full_bw_report(&user_param, &my_bw_rep, &rem_bw_rep);
}

// print local and remote separately, if separate reporting was requested
// and a duplex test was run
if (user_param.report_both && user_param.duplex) {
printf(RESULT_LINE);
printf("\n Local results: \n");
Expand All @@ -384,6 +387,11 @@ int main(int argc, char *argv[])
printf((user_param.cpu_util_data.enable ? RESULT_EXT_CPU_UTIL : RESULT_EXT));
print_full_bw_report(&user_param, &rem_bw_rep, NULL);
}

// print JSON, if requested
if (user_param.out_json) {
print_full_bw_report_to_file(&user_param, &my_bw_rep, &rem_bw_rep);
}
} else if (user_param.test_method == RUN_INFINITELY) {

ctx_set_send_wqes(&ctx,&user_param,rem_dest);
Expand Down
8 changes: 8 additions & 0 deletions src/send_bw.c
Original file line number Diff line number Diff line change
Expand Up @@ -515,11 +515,14 @@ int main(int argc, char *argv[])

print_report_bw(&user_param,&my_bw_rep);

// print either just the local, or the aggregate of local and remote
if (user_param.duplex && user_param.test_type != DURATION) {
xchg_bw_reports(&user_comm, &my_bw_rep,&rem_bw_rep,atof(user_param.rem_version));
print_full_bw_report(&user_param, &my_bw_rep, &rem_bw_rep);
}

// print local and remote separately, if separate reporting was requested
// and a duplex test was run
if (user_param.report_both && user_param.duplex) {
printf(RESULT_LINE);
printf("\n Local results: \n");
Expand All @@ -535,6 +538,11 @@ int main(int argc, char *argv[])
printf((user_param.cpu_util_data.enable ? RESULT_EXT_CPU_UTIL : RESULT_EXT));
print_full_bw_report(&user_param, &rem_bw_rep, NULL);
}

// print JSON, if requested
if (user_param.out_json) {
print_full_bw_report_to_file(&user_param, &my_bw_rep, &rem_bw_rep);
}
} else if (user_param.test_method == RUN_INFINITELY) {

if (user_param.machine == CLIENT)
Expand Down
10 changes: 9 additions & 1 deletion src/write_bw.c
Original file line number Diff line number Diff line change
Expand Up @@ -309,7 +309,7 @@ int main(int argc, char *argv[])
ctx_set_send_wqes(&ctx,&user_param,rem_dest);

if (user_param.verb == WRITE_IMM && !user_param.use_unsolicited_write &&
(user_param.machine == SERVER || user_param.duplex)) {
(user_param.machine == SERVER || user_param.duplex)) {
if (ctx_set_recv_wqes(&ctx,&user_param)) {
fprintf(stderr," Failed to post receive recv_wqes\n");
goto free_mem;
Expand Down Expand Up @@ -424,11 +424,14 @@ int main(int argc, char *argv[])

print_report_bw(&user_param,&my_bw_rep);

// print either just the local, or the aggregate of local and remote
if (user_param.duplex && (user_param.verb != WRITE_IMM || user_param.test_type != DURATION)) {
xchg_bw_reports(&user_comm, &my_bw_rep,&rem_bw_rep,atof(user_param.rem_version));
print_full_bw_report(&user_param, &my_bw_rep, &rem_bw_rep);
}

// print local and remote separately, if separate reporting was requested
// and a duplex test was run
if (user_param.report_both && user_param.duplex) {
printf(RESULT_LINE);
printf("\n Local results: \n");
Expand All @@ -444,6 +447,11 @@ int main(int argc, char *argv[])
printf((user_param.cpu_util_data.enable ? RESULT_EXT_CPU_UTIL : RESULT_EXT));
print_full_bw_report(&user_param, &rem_bw_rep, NULL);
}

// print JSON, if requested
if (user_param.out_json) {
print_full_bw_report_to_file(&user_param, &my_bw_rep, &rem_bw_rep);
}
} else if (user_param.test_method == RUN_INFINITELY) {

if (user_param.machine == CLIENT || user_param.duplex)
Expand Down