-----Original Message----- From: Shally Verma [mailto:shal...@marvell.com] Sent: Wednesday, June 26, 2019 19:04 To: Trybula, ArturX <arturx.tryb...@intel.com>; dev@dpdk.org; Trahe, Fiona <fiona.tr...@intel.com>; Dybkowski, AdamX <adamx.dybkow...@intel.com> Subject: RE: [dpdk-dev] [PATCH] app/test-compress-perf: report header improvement
> -----Original Message----- > From: dev <dev-boun...@dpdk.org> On Behalf Of Artur Trybula > Sent: Monday, June 3, 2019 3:54 PM > To: dev@dpdk.org; fiona.tr...@intel.com; arturx.tryb...@intel.com; > adamx.dybkow...@intel.com > Subject: [dpdk-dev] [PATCH] app/test-compress-perf: report header > improvement > > This patch adds extra features to the compress performance test. Some > important parameters (memory allocation, number of ops, number of > segments) are calculated and printed out on the screen. > > Signed-off-by: Artur Trybula <arturx.tryb...@intel.com> > --- > app/test-compress-perf/main.c | 105 > +++++++++++++++++++++++++++++++--- > 1 file changed, 98 insertions(+), 7 deletions(-) > ...... > > - > +static void > +print_report_header(void) > +{ > + uint32_t opt_total_segs = DIV_CEIL(tests_res.input_data_sz, > + MAX_SEG_SIZE); > + > + if (tests_res.total_buffs > 1) { > + printf("\nWarning: for the current input parameters number" > + " of ops is higher than one, which may result" > + " in sub-optimal performance.\n"); > + printf("To improve the performance (for the current" > + " input data) following parameters are" > + " suggested:\n"); > + printf(" • Segment size: %d\n", MAX_SEG_SIZE); > + printf(" • Number of segments: %u\n", opt_total_segs); > + } else if (tests_res.total_buffs == 1) { > + printf("\nWarning: There is only one op with %u segments –" > + " the compression ratio is the best.\n", > + tests_res.segments_per_last_buff); > + if (tests_res.segment_sz < MAX_SEG_SIZE) > + printf("To reduce compression time, please use" > + " bigger segment size: %d.\n", > + MAX_SEG_SIZE); > + else if (tests_res.segment_sz == MAX_SEG_SIZE) > + printf("Segment size is optimal for the best" > + " performance.\n"); [Shally] Why these kind of warnings? If total_bufs > 1, then, how behavior would change? Same question for segment size as well? [Artur] I suppose you mean the second one "Warning: There is only one ...". It's just to preserve the structure of the report for both variants. But I agree, there is nothing wrong if there is only one op. Please notice that each op is processed independently, in most cases it implies lower compression ratio. The best situation is to have all the input data aggregated into one op (even if partitioned across many mbufs). > + } else > + printf("Warning: something wrong happened!!\n"); > + > + printf("\nFor the current input parameters (segment size = %u," > + " segments number = %u):\n", > + tests_res.segment_sz, > + tests_res.segments_per_buff); > + printf(" • Total number of segments: %d\n", > + tests_res.total_segments); > + printf(" • %u segments %u bytes long, last segment %u" > + " byte(s) long\n", > + tests_res.total_segments - 1, > + tests_res.segment_sz, > + tests_res.last_segment_sz); > + printf(" • Number of ops: %u\n", tests_res.total_buffs); > + printf(" • Total memory allocation: %u\n", > + (tests_res.total_segments - 1) * tests_res.segment_sz > + + tests_res.last_segment_sz); > + if (tests_res.total_buffs > 1) > + printf(" • %u ops: %u segments in each," > + " segment size %u\n", > + tests_res.total_buffs - 1, > + tests_res.segments_per_buff, > + tests_res.segment_sz); > + if (tests_res.segments_per_last_buff > 1) { > + printf(" • 1 op %u segments:\n", > + tests_res.segments_per_last_buff); > + printf(" o %u segment size %u\n", > + tests_res.segments_per_last_buff - 1, > + tests_res.segment_sz); > + printf(" o last segment size %u\n", > + tests_res.last_segment_sz); > + } else if (tests_res.segments_per_last_buff == 1) { > + printf(" • 1 op (the last one): %u segment %u" > + " byte(s) long\n\n", > + tests_res.segments_per_last_buff, > + tests_res.last_segment_sz); > + } > +} > > int > main(int argc, char **argv) > @@ -533,8 +622,9 @@ main(int argc, char **argv) > else > level = test_data->level.list[0]; > > + print_report_header(); > + [Shally] looks like we're printing input characteristics and possible performance behavior. Is that the intention of this API? [Artur] That was the idea to have a tool for verification how the data partitioning affects the compression performance. Your description Shally is very accurate: "... printing input characteristics and possible performance behavior" and that is the intention of this API. > printf("Burst size = %u\n", test_data->burst_sz); > - printf("File size = %zu\n", test_data->input_data_sz); > > printf("%6s%12s%17s%19s%21s%15s%21s%23s%16s\n", > "Level", "Comp size", "Comp ratio [%]", @@ -612,3 +702,4 @@ > main(int argc, char **argv) > } > return ret; > } > + > -- > 2.17.1