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: Tue, 24 Oct 2017 10:58:02 +0800 Message-ID: <20171024025800.GA5111@arm.com> References: <1508726101-13009-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 EUR03-VE1-obe.outbound.protection.outlook.com (mail-eopbgr50068.outbound.protection.outlook.com [40.107.5.68]) by dpdk.org (Postfix) with ESMTP id 272A31B722 for ; Tue, 24 Oct 2017 04:59:17 +0200 (CEST) Content-Disposition: inline In-Reply-To: <1508726101-13009-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" Hi Herbert, The 10/23/2017 10:35, 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 alligned/unaligned memcpy test are > provided to allow comparation between platforms. > > Signed-off-by: Herbert Guan > --- > test/test/test_memcpy_perf.c | 34 +++++++++++++++++++++++----------- > 1 file changed, 23 insertions(+), 11 deletions(-) > > diff --git a/test/test/test_memcpy_perf.c b/test/test/test_memcpy_perf.c > index 91de856..30c29e1 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,8 @@ > perf_test(void) > { > int ret; > + struct timeval tv_begin, tv_end; > + time_t time_aligned, time_unaligned; > > ret =3D init_buffers(); > if (ret !=3D 0) > @@ -340,26 +344,34 @@ > 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 tv_end.tv_sec - tv_begin.tv_sec; > + printf("\n------- ----------------- ----------------- -------------= ---- -----------------"); > /* Do aligned tests where size is a compile-time constant */ > 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"); > + 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 tv_end.tv_sec - tv_begin.tv_sec; > + printf("\n------- ----------------- ----------------- -------------= ---- -----------------"); > /* Do unaligned tests where size is a compile-time constant */ > 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"); > + 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 (Aligned) =3D %ld seconds\n", time_al= igned); > + printf("Test Execution Time (Unaligned) =3D %ld seconds\n", time_un= aligned); Is there any reason why you didn't include the time cost in constant aligne= d/unaligned cases? Thanks! Jianbo > 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.