From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jianbo Liu Subject: Re: [PATCH] test: provide performance difference ratio and test time Date: Thu, 26 Oct 2017 14:23:39 +0800 Message-ID: <20171026062338.GA14312@arm.com> References: <1508915626-21407-1-git-send-email-herbert.guan@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Cc: dev@dpdk.org, bruce.richardson@intel.com, konstantin.ananyev@intel.com, phil.yang@arm.com To: Herbert Guan Return-path: Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-ve1eur01on0068.outbound.protection.outlook.com [104.47.1.68]) by dpdk.org (Postfix) with ESMTP id 0039D1BA1C for ; Thu, 26 Oct 2017 08:24:52 +0200 (CEST) Content-Disposition: inline In-Reply-To: <1508915626-21407-1-git-send-email-herbert.guan@arm.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" The 10/25/2017 15:13, Herbert Guan wrote: > The printed time values presented in TSC is not straight forward > showing the performance difference. And if the high resolution > counter is not enabled, time value is too small to show the actual > performance (e.g. "1 - 1" seems the same but in fact the perfomance > diffs by 50% or more). > With the performance difference ratio caculated and printed, it'll be > easier for people to read and compare the performance between > rte_memcpy() and memcpy(). > Since the TSC values' units may diff a lot on different platforms, > the total execution time of aligned/unaligned memcpy test are > provided to allow comparation between platforms. > > Signed-off-by: Herbert Guan Acked-by: Jianbo Liu > --- > test/test/test_memcpy_perf.c | 50 +++++++++++++++++++++++++++++++++-----= ------ > 1 file changed, 38 insertions(+), 12 deletions(-) > > diff --git a/test/test/test_memcpy_perf.c b/test/test/test_memcpy_perf.c > index 91de856..b23026b 100644 > --- a/test/test/test_memcpy_perf.c > +++ b/test/test/test_memcpy_perf.c > @@ -35,6 +35,7 @@ > #include > #include > #include > +#include > > #include > #include > @@ -241,8 +242,9 @@ > memcpy(dst+dst_addrs[t], src+src_addrs[t], size); = \ > total_time2 +=3D rte_rdtsc() - start_time; = \ > } = \ > - printf("%8.0f -", (double)total_time /TEST_ITERATIONS); = \ > - printf("%5.0f", (double)total_time2 / TEST_ITERATIONS); = \ > + printf("%3.0f -", (double)total_time / TEST_ITERATIONS); = \ > + printf("%3.0f", (double)total_time2 / TEST_ITERATIONS); = \ > + printf("(%6.2f%%) ", ((double)total_time - total_time2)*100/total_ti= me2); \ > } while (0) > > /* Run aligned memcpy tests for each cached/uncached permutation */ > @@ -324,6 +326,9 @@ > perf_test(void) > { > int ret; > + struct timeval tv_begin, tv_end; > + double time_aligned, time_unaligned; > + double time_aligned_const, time_unaligned_const; > > ret =3D init_buffers(); > if (ret !=3D 0) > @@ -340,26 +345,47 @@ > do_uncached_write(large_buf_write, 0, small_buf_read, 1, SMALL_BUFF= ER_SIZE); > > printf("\n** rte_memcpy() - memcpy perf. tests (C =3D compile-time = constant) **\n" > - "=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D\n" > - " Size Cache to cache Cache to mem Mem to cache = Mem to mem\n" > - "(bytes) (ticks) (ticks) (ticks) = (ticks)\n" > - "------- -------------- -------------- -------------- --= ------------"); > + "=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D\n" > + " Size Cache to cache Cache to mem Mem to c= ache Mem to mem\n" > + "(bytes) (ticks) (ticks) (ti= cks) (ticks)\n" > + "------- ----------------- ----------------- -----------= ------ -----------------"); > > - printf("\n=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D %2dB aligned =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D", > + printf("\n=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D %2dB aligned =3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D", > alignment_unit); > /* Do aligned tests where size is a variable */ > + gettimeofday(&tv_begin, NULL); > perf_test_variable_aligned(); > - printf("\n------- -------------- -------------- -------------- ----= ----------"); > + gettimeofday(&tv_end, NULL); > + time_aligned =3D (double)(tv_end.tv_sec - tv_begin.tv_sec) > + + ((double)tv_end.tv_usec - tv_begin.tv_usec)/1000000; > + printf("\n------- ----------------- ----------------- -------------= ---- -----------------"); > /* Do aligned tests where size is a compile-time constant */ > + gettimeofday(&tv_begin, NULL); > perf_test_constant_aligned(); > - printf("\n=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D Unaligned =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D"); > + gettimeofday(&tv_end, NULL); > + time_aligned_const =3D (double)(tv_end.tv_sec - tv_begin.tv_sec) > + + ((double)tv_end.tv_usec - tv_begin.tv_usec)/1000000; > + printf("\n=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D Unaligned =3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D"); > /* Do unaligned tests where size is a variable */ > + gettimeofday(&tv_begin, NULL); > perf_test_variable_unaligned(); > - printf("\n------- -------------- -------------- -------------- ----= ----------"); > + gettimeofday(&tv_end, NULL); > + time_unaligned =3D (double)(tv_end.tv_sec - tv_begin.tv_sec) > + + ((double)tv_end.tv_usec - tv_begin.tv_usec)/1000000; > + printf("\n------- ----------------- ----------------- -------------= ---- -----------------"); > /* Do unaligned tests where size is a compile-time constant */ > + gettimeofday(&tv_begin, NULL); > perf_test_constant_unaligned(); > - printf("\n=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D\n\n"); > - > + gettimeofday(&tv_end, NULL); > + time_unaligned_const =3D (double)(tv_end.tv_sec - tv_begin.tv_sec) > + + ((double)tv_end.tv_usec - tv_begin.tv_usec)/1000000; > + printf("\n=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D\n\n"); > + > + printf("Test Execution Time (seconds):\n"); > + printf("Aligned variable copy size =3D %8.3f\n", time_aligned); > + printf("Aligned constant copy size =3D %8.3f\n", time_aligned_con= st); > + printf("Unaligned variable copy size =3D %8.3f\n", time_unaligned); > + printf("Unaligned constant copy size =3D %8.3f\n", time_unaligned_c= onst); > free_buffers(); > > return 0; > -- > 1.8.3.1 > -- IMPORTANT NOTICE: The contents of this email and any attachments are confid= ential and may also be privileged. If you are not the intended recipient, p= lease notify the sender immediately and do not disclose the contents to any= other person, use it for any purpose, or store or copy the information in = any medium. Thank you.