From 6c0fadc2a9f82623bbd6016194802e35245daea6 Mon Sep 17 00:00:00 2001 From: "Julian M. Kunkel" Date: Thu, 1 Aug 2019 17:20:01 +0100 Subject: [PATCH] Include performance when stonewall is hit to output. --- src/ior-output.c | 23 +++++++++++++++++++---- src/ior.c | 6 +----- 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/ior-output.c b/src/ior-output.c index 4bdb37d..7049a97 100644 --- a/src/ior-output.c +++ b/src/ior-output.c @@ -18,8 +18,8 @@ static void PrintNextToken(); void PrintTableHeader(){ if (outputFormat == OUTPUT_DEFAULT){ fprintf(out_resultfile, "\n"); - fprintf(out_resultfile, "access bw(MiB/s) block(KiB) xfer(KiB) open(s) wr/rd(s) close(s) total(s) iter\n"); - fprintf(out_resultfile, "------ --------- ---------- --------- -------- -------- -------- -------- ----\n"); + fprintf(out_resultfile, "access bw(MiB/s) block(KiB) xfer(KiB) open(s) wr/rd(s) close(s) total(s) iter\n"); + fprintf(out_resultfile, "------ --------- ---------- --------- -------- -------- -------- -------- ----\n"); } } @@ -534,10 +534,14 @@ static void PrintLongSummaryOneOperation(IOR_test_t *test, const int access) reps = params->repetitions; double * times = malloc(sizeof(double)* reps); + long long stonewall_avg_data_accessed = 0; + double stonewall_time = 0; for(int i=0; i < reps; i++){ IOR_point_t *point = (access == WRITE) ? &results[i].write : &results[i].read; times[i] = point->time; + stonewall_time += point->stonewall_time; + stonewall_avg_data_accessed += point->stonewall_avg_data_accessed; } bw = bw_values(reps, results, times, access); @@ -558,6 +562,13 @@ static void PrintLongSummaryOneOperation(IOR_test_t *test, const int access) fprintf(out_resultfile, "%10.2f ", ops->mean); fprintf(out_resultfile, "%10.2f ", ops->sd); fprintf(out_resultfile, "%10.5f ", mean_of_array_of_doubles(times, reps)); + if(test->params.stoneWallingWearOut){ + fprintf(out_resultfile, "%10.2f ", stonewall_time / reps); + fprintf(out_resultfile, "%13.2f ", stonewall_avg_data_accessed / stonewall_time / MEBIBYTE); + }else{ + fprintf(out_resultfile, "%10s ", "NA"); + fprintf(out_resultfile, "%13s ", "NA"); + } fprintf(out_resultfile, "%5d ", params->id); fprintf(out_resultfile, "%6d ", params->numTasks); fprintf(out_resultfile, "%3d ", params->tasksPerNode); @@ -603,6 +614,10 @@ static void PrintLongSummaryOneOperation(IOR_test_t *test, const int access) PrintKeyValDouble("OPsMean", ops->mean); PrintKeyValDouble("OPsSD", ops->sd); PrintKeyValDouble("MeanTime", mean_of_array_of_doubles(times, reps)); + if(test->params.stoneWallingWearOut){ + PrintKeyValDouble("StoneWallTime", stonewall_time / reps); + PrintKeyValDouble("StoneWallbwMeanMIB", stonewall_avg_data_accessed / stonewall_time / MEBIBYTE); + } PrintKeyValDouble("xsizeMiB", (double) point->aggFileSizeForBW / MEBIBYTE); PrintEndSection(); }else if (outputFormat == OUTPUT_CSV){ @@ -635,10 +650,10 @@ void PrintLongSummaryHeader() } fprintf(out_resultfile, "\n"); - fprintf(out_resultfile, "%-9s %10s %10s %10s %10s %10s %10s %10s %10s %10s", + fprintf(out_resultfile, "%-9s %10s %10s %10s %10s %10s %10s %10s %10s %10s %10s %13s", "Operation", "Max(MiB)", "Min(MiB)", "Mean(MiB)", "StdDev", "Max(OPs)", "Min(OPs)", "Mean(OPs)", "StdDev", - "Mean(s)"); + "Mean(s)", "Stonewall(s)", "Stonewall(MiB)"); fprintf(out_resultfile, " Test# #Tasks tPN reps fPP reord reordoff reordrand seed" " segcnt "); fprintf(out_resultfile, "%8s %8s %9s %5s", " blksiz", "xsize","aggs(MiB)", "API"); diff --git a/src/ior.c b/src/ior.c index 15b1d07..4cd5571 100755 --- a/src/ior.c +++ b/src/ior.c @@ -1400,7 +1400,7 @@ static void TestIoSys(IOR_test_t *test) /* Get rankOffset [file offset] for this process to read, based on -C,-Z,-Q,-X options */ /* Constant process offset reading */ if (params->reorderTasks) { - /* move one node away from writing node */ + /* move one node away from writing node */ int shift = 1; /* assume a by-node (round-robin) mapping of tasks to nodes */ if (params->tasksBlockMapping) { shift=params->tasksPerNode; /* switch to a by-slot (contiguous block) mapping */ @@ -1944,10 +1944,6 @@ static IOR_offset_t WriteOrRead(IOR_param_t *test, IOR_results_t *results, point->stonewall_min_data_accessed /1024.0 / 1024 / 1024, point->stonewall_avg_data_accessed / 1024.0 / 1024 / 1024 / test->numTasks , point->stonewall_time); point->stonewall_min_data_accessed *= test->numTasks; } - if(pairs_accessed_min == pairCnt){ - point->stonewall_min_data_accessed = 0; - point->stonewall_avg_data_accessed = 0; - } if(pairCnt != point->pairs_accessed){ // some work needs still to be done ! for(; pairCnt < point->pairs_accessed; pairCnt++ ) {