[dpdk-dev] [PATCH v5 5/9] app/testpmd: add clock_gettime_monotonic
Jie Zhou
jizh at linux.microsoft.com
Mon Apr 19 20:04:22 CEST 2021
On Sun, Apr 18, 2021 at 05:20:42PM +0000, Tal Shnaiderman wrote:
> > Subject: [dpdk-dev] [PATCH v5 5/9] app/testpmd: add
> > clock_gettime_monotonic
> >
> > External email: Use caution opening links or attachments
> >
> >
> > Add clock_gettime_monotonic for testpmd on Windows
> >
> > Signed-off-by: Jie Zhou <jizh at microsoft.com>
> > Signed-off-by: Jie Zhou <jizh at linux.microsoft.com>
> > ---
> > app/test-pmd/config.c | 33 ++++++++++++++++++++++++++++++++-
> > 1 file changed, 32 insertions(+), 1 deletion(-)
> >
> > diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index
> > ef0b9784d..a5f8fec5b 100644
> > --- a/app/test-pmd/config.c
> > +++ b/app/test-pmd/config.c
> > @@ -63,6 +63,12 @@
> >
> > #define NS_PER_SEC 1E9
> >
> > +#ifdef RTE_EXEC_ENV_WINDOWS
> > +#define _clock_gettime_monotonic(cur_time)
> > +clock_gettime_monotonic(&cur_time)
> > +#else
> > +#define _clock_gettime_monotonic(cur_time)
> > clock_gettime(CLOCK_TYPE_ID,
> > +&cur_time) #endif
> > +
>
> I think this change should be in EAL:
> rte_get_time_monotonic(&cur_time)
>
> Windows implementation in windows\eal_timer.c
> Unix implementation in unix\eal_unix_timer.c
Originally and internally, the function was added into eal. But then restricted the functionality just inside testpmd to avoid currently seems unnecessary version change, per a discussion in community meeting several weeks back. If we believe eal support of clock_gettime for windows will benefit other drivers/apps now instead of future when real need comes up, I can move it back into eal. DmitryK and Tyler, any conern or inputs here?
>
> > static char *flowtype_to_str(uint16_t flow_type);
> >
> > static const struct {
> > @@ -170,6 +176,27 @@ print_ethaddr(const char *name, struct
> > rte_ether_addr *eth_addr)
> > printf("%s%s", name, buf);
> > }
> >
> > +#ifdef RTE_EXEC_ENV_WINDOWS
> > +static int
> > +clock_gettime_monotonic(struct timespec *tp) {
> > + LARGE_INTEGER pf, pc;
> > + LONGLONG nsec;
> > +
> > + if (QueryPerformanceFrequency(&pf) == 0)
> > + return -1;
> > +
> > + if (QueryPerformanceCounter(&pc) == 0)
> > + return -1;
> > +
> > + nsec = pc.QuadPart * NS_PER_SEC / pf.QuadPart;
> > + tp->tv_sec = nsec / NS_PER_SEC;
> > + tp->tv_nsec = nsec - tp->tv_sec * NS_PER_SEC;
> > +
> > + return 0;
> > +}
> > +#endif
> > +
> > void
> > nic_stats_display(portid_t port_id)
> > {
> > @@ -186,6 +213,8 @@ nic_stats_display(portid_t port_id)
> >
> > static const char *nic_stats_border = "########################";
> >
> > + int ret;
> > +
> > if (port_id_is_invalid(port_id, ENABLED_WARN)) {
> > print_valid_ports();
> > return;
> > @@ -202,7 +231,9 @@ nic_stats_display(portid_t port_id)
> > "%-"PRIu64"\n", stats.opackets, stats.oerrors, stats.obytes);
> >
> > diff_ns = 0;
> > - if (clock_gettime(CLOCK_TYPE_ID, &cur_time) == 0) {
> > +
> > + ret = _clock_gettime_monotonic(cur_time);
> > + if (ret == 0) {
> > uint64_t ns;
> >
> > ns = cur_time.tv_sec * NS_PER_SEC;
> > --
> > 2.30.0.vfs.0.2
More information about the dev
mailing list