> -----Original Message----- > From: Dharmik Thakkar <dharmik.thak...@arm.com> > Sent: Friday, May 8, 2020 6:37 PM > To: Ananyev, Konstantin <konstantin.anan...@intel.com> > Cc: Lu, Wenzhuo <wenzhuo...@intel.com>; Wu, Jingjing <jingjing...@intel.com>; > Iremonger, Bernard <bernard.iremon...@intel.com>; > dev@dpdk.org; nd <n...@arm.com> > Subject: Re: [dpdk-dev] [PATCH 2/5] app/testpmd: print fractional part in CPU > cycles > > > > > On May 8, 2020, at 12:17 PM, Ananyev, Konstantin > > <konstantin.anan...@intel.com> wrote: > > > >> Hi Konstantin, > >> > >>> On May 7, 2020, at 4:50 AM, Ananyev, Konstantin > >>> <konstantin.anan...@intel.com> wrote: > >>> > >>> > >>> > >>>> -----Original Message----- > >>>> From: dev <dev-boun...@dpdk.org> On Behalf Of Dharmik Thakkar > >>>> Sent: Wednesday, May 6, 2020 10:59 PM > >>>> To: Lu, Wenzhuo <wenzhuo...@intel.com>; Wu, Jingjing > >>>> <jingjing...@intel.com>; Iremonger, Bernard > <bernard.iremon...@intel.com> > >>>> Cc: dev@dpdk.org; n...@arm.com; Dharmik Thakkar <dharmik.thak...@arm.com> > >>>> Subject: [dpdk-dev] [PATCH 2/5] app/testpmd: print fractional part in > >>>> CPU cycles > >>>> > >>>> Change printing of CPU cycles/packet to include fractional part for > >>>> accurateness. > >>>> > >>>> Example: > >>>> > >>>> Without patch: > >>>> CPU cycles/packet=14 > >>>> (total cycles=4899533541 / total RX packets=343031966) > >>>> > >>>> With patch: > >>>> CPU cycles/packet=14.28 > >>>> (total cycles=4899533541 / total RX packets=343031966) > >>>> > >>>> Signed-off-by: Dharmik Thakkar <dharmik.thak...@arm.com> > >>>> Reviewed-by: Honnappa Nagarahalli <honnappa.nagaraha...@arm.com> > >>>> Reviewed-by: Phil Yang <phil.y...@arm.com> > >>>> --- > >>>> app/test-pmd/testpmd.c | 4 ++-- > >>>> 1 file changed, 2 insertions(+), 2 deletions(-) > >>>> > >>>> diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c > >>>> index 9a8cbbd6fc7c..9444a730a153 100644 > >>>> --- a/app/test-pmd/testpmd.c > >>>> +++ b/app/test-pmd/testpmd.c > >>>> @@ -1955,9 +1955,9 @@ fwd_stats_display(void) > >>>> #ifdef RTE_TEST_PMD_RECORD_CORE_CYCLES > >>>> #define CYC_PER_MHZ 1E6 > >>>> if (total_recv > 0) > >>>> - printf("\n CPU cycles/packet=%u (total cycles=" > >>>> + printf("\n CPU cycles/packet=%.2f (total cycles=" > >>>> "%"PRIu64" / total RX packets=%"PRIu64") at %lu MHz > >>>> Clock\n", > >>>> - (unsigned int)(fwd_cycles / total_recv), > >>>> + (double)(fwd_cycles / (double)total_recv), > >>> > >>> Probably safer long double - to avoid overflow. > >> > >> Is it possible for a ‘double' to be less than 8 bytes? > > > > That was my initial thought - that on some 32 bit systems it could be 4B. > > Though it seems I was wrong, so feel free to ignore. > > BTW, what for double conversion, why not just: > > double)(fwd_cycles /total_recv > > ? > > Without (double) total recv, I will always get the fractional part as .00. > For the above example, with (double)(fwd_cycles / total_recv), I see 14.00 > instead of 14.28
AFAIK, that's because that way you told compiler to do integer division and then convert result to double. While (double)fwd_cycles /total_recv, will tell compiler to explicitly convert fwd_cycles to double and compiler will implicitly do the same for total_recv too, and result will be double too. > > > > > > > > >> > >>> > >>>> fwd_cycles, total_recv, (uint64_t)(rte_get_tsc_hz() / > >>>> CYC_PER_MHZ)); > >>>> #endif > >>>> } > >>>> -- > >>>> 2.20.1