DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH v6 2/3] eal: add u64 bit variant for reciprocal
@ 2017-09-07  9:08 Pavan Nikhilesh Bhagavatula
  0 siblings, 0 replies; 8+ messages in thread
From: Pavan Nikhilesh Bhagavatula @ 2017-09-07  9:08 UTC (permalink / raw)
  To: dev

Date: Thu, 7 Sep 2017 14:17:27 +0530
From: Pavan Nikhilesh Bhagavatula <pbhagavatula@caviumnetworks.com>
To: "Dumitrescu, Cristian" <cristian.dumitrescu@intel.com>, techboard@dpdk.org, govboard@dpdk.org, stephen@networkplumber.org, ktraynor@redhat.com
Subject: Re: [dpdk-dev] [PATCH v6 2/3] eal: add u64 bit variant for reciprocal
User-Agent: Mutt/1.5.24 (2015-08-30)

On Wed, Sep 06, 2017 at 05:05:52PM +0000, Dumitrescu, Cristian wrote:
>
>
> > -----Original Message-----
> > From: Stephen Hemminger [mailto:stephen@networkplumber.org]
> > Sent: Wednesday, September 6, 2017 4:37 PM
> > To: Pavan Nikhilesh Bhagavatula <pbhagavatula@caviumnetworks.com>
> > Cc: Kevin Traynor <ktraynor@redhat.com>; Dumitrescu, Cristian
> > <cristian.dumitrescu@intel.com>; dev@dpdk.org
> > Subject: Re: [dpdk-dev] [PATCH v6 2/3] eal: add u64 bit variant for reciprocal
> >
> > On Wed, 6 Sep 2017 20:11:34 +0530
> > Pavan Nikhilesh Bhagavatula <pbhagavatula@caviumnetworks.com> wrote:
> >
> > > On Wed, Sep 06, 2017 at 01:28:24PM +0100, Kevin Traynor wrote:
> > > > On 09/06/2017 11:21 AM, Pavan Nikhilesh wrote:
> > > > > From: Pavan Bhagavatula <pbhagavatula@caviumnetworks.com>
> > > > >
> > > > > Currently, rte_reciprocal only supports unsigned 32bit divisors. This
> > > > > commit adds support for unsigned 64bit divisors.
> > > > >
> > > > > Rename unsigned 32bit specific functions appropriately and update
> > > > > librte_sched accordingly.
> > > > >
> > > > > Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
> > > > > ---
> > > > >  lib/librte_eal/bsdapp/eal/rte_eal_version.map   |   3 +-
> > > > >  lib/librte_eal/common/include/rte_reciprocal.h  | 109
> > ++++++++++++++++++++--
> > > > >  lib/librte_eal/common/rte_reciprocal.c          | 116
> > +++++++++++++++++++++---
> > > > >  lib/librte_eal/linuxapp/eal/rte_eal_version.map |   3 +-
> > > > >  lib/librte_sched/Makefile                       |   4 +-
> > > > >  lib/librte_sched/rte_sched.c                    |   9 +-
> > > > >  6 files changed, 219 insertions(+), 25 deletions(-)
> > > > >
> > > > > diff --git a/lib/librte_eal/bsdapp/eal/rte_eal_version.map
> > b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
> > > > > index 90d7258..59a85bb 100644
> > > > > --- a/lib/librte_eal/bsdapp/eal/rte_eal_version.map
> > > > > +++ b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
> > > > > @@ -241,6 +241,7 @@ EXPERIMENTAL {
> > > > >  DPDK_17.11 {
> > > > >  	global:
> > > > >
> > > > > -	rte_reciprocal_value;
> > > > > +	rte_reciprocal_value_u32;
> > > > > +	rte_reciprocal_value_u64;
> > > > >
> > > > >  } DPDK_17.08;
> > > > > diff --git a/lib/librte_eal/common/include/rte_reciprocal.h
> > b/lib/librte_eal/common/include/rte_reciprocal.h
> > > > > index b6d752f..85599e6 100644
> > > > > --- a/lib/librte_eal/common/include/rte_reciprocal.h
> > > > > +++ b/lib/librte_eal/common/include/rte_reciprocal.h
> > > >
> > > > Hi Pavan, sorry for commenting late but the license in v1 of this file
> > > > states it cannot be removed. It is not included in later versions - can
> > > > you explain why?
> > > >
> > > Hi Kevin,
> > >
> > > I have misinterpreted this mail
> > > http://dpdk.org/ml/archives/dev/2017-August/073781.html,
> > > any suggestion on how to proceed on this further?
> > >
> > > Thanks,
> > > Pavan
> >
> > License issues need legal advice (TAB could ask LF if required).
> > Sorry, I am a cynic engineer not a lawyer.
> >
> > Easiest solution is to find equivalent code in FreeBSD or some other project
> > which does not have the restrictions.
>
> How about just adding your copyright on the existing BSD license?

I can add the zlib[1] license over the BSD license. An approval from the
Governing Board and the Technical Board would be good.

[1] https://opensource.org/licenses/Zlib

Thanks,
Pavan.

^ permalink raw reply	[flat|nested] 8+ messages in thread
* [dpdk-dev] [PATCH v6 1/3] eal: introduce integer divide through reciprocal
@ 2017-09-06 10:21 Pavan Nikhilesh
  2017-09-06 10:21 ` [dpdk-dev] [PATCH v6 2/3] eal: add u64 bit variant for reciprocal Pavan Nikhilesh
  0 siblings, 1 reply; 8+ messages in thread
From: Pavan Nikhilesh @ 2017-09-06 10:21 UTC (permalink / raw)
  To: cristian.dumitrescu, stephen; +Cc: dev, Pavan Bhagavatula

From: Pavan Bhagavatula <pbhagavatula@caviumnetworks.com>

In some use cases of integer division, denominator remains constant and
numerator varies. It is possible to optimize division for such specific
scenarios.

The librte_sched uses rte_reciprocal to optimize division so, moving it to
eal/common would allow other libraries and applications to use it.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@caviumnetworks.com>
Reviewed-by: Anatoly Burakov <anatoly.burakov@intel.com>
---

v6 changes:
 - remove cache alignment from rte_reciprocal_u{32/64}structures as they would
 be embedded in other structures.

v5 changes:
 - fix test print strings

v4 changes:
 - minor fix for test cases
 - fix u32 divisor generation

v3 changes:
 - fix x86_32 compilation issue
 - fix improper licence in test

v2 changes:
 - fix compilation issues with .map files
 - add test cases for correctness and performance
 - remove extra licence inclusion
 - fix coding style issues

 lib/librte_eal/bsdapp/eal/Makefile                               | 1 +
 lib/librte_eal/bsdapp/eal/rte_eal_version.map                    | 7 +++++++
 lib/librte_eal/common/Makefile                                   | 1 +
 lib/{librte_sched => librte_eal/common/include}/rte_reciprocal.h | 6 ++++--
 lib/{librte_sched => librte_eal/common}/rte_reciprocal.c         | 6 ++++--
 lib/librte_eal/linuxapp/eal/Makefile                             | 1 +
 lib/librte_eal/linuxapp/eal/rte_eal_version.map                  | 7 +++++++
 lib/librte_sched/Makefile                                        | 2 --
 lib/librte_sched/rte_sched.c                                     | 2 +-
 9 files changed, 26 insertions(+), 7 deletions(-)
 rename lib/{librte_sched => librte_eal/common/include}/rte_reciprocal.h (87%)
 rename lib/{librte_sched => librte_eal/common}/rte_reciprocal.c (96%)

diff --git a/lib/librte_eal/bsdapp/eal/Makefile b/lib/librte_eal/bsdapp/eal/Makefile
index 005019e..56f9804 100644
--- a/lib/librte_eal/bsdapp/eal/Makefile
+++ b/lib/librte_eal/bsdapp/eal/Makefile
@@ -88,6 +88,7 @@ SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += malloc_elem.c
 SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += malloc_heap.c
 SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += rte_keepalive.c
 SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += rte_service.c
+SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += rte_reciprocal.c

 # from arch dir
 SRCS-$(CONFIG_RTE_EXEC_ENV_BSDAPP) += rte_cpuflags.c
diff --git a/lib/librte_eal/bsdapp/eal/rte_eal_version.map b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
index aac6fd7..90d7258 100644
--- a/lib/librte_eal/bsdapp/eal/rte_eal_version.map
+++ b/lib/librte_eal/bsdapp/eal/rte_eal_version.map
@@ -237,3 +237,10 @@ EXPERIMENTAL {
 	rte_service_unregister;

 } DPDK_17.08;
+
+DPDK_17.11 {
+	global:
+
+	rte_reciprocal_value;
+
+} DPDK_17.08;
diff --git a/lib/librte_eal/common/Makefile b/lib/librte_eal/common/Makefile
index e8fd67a..a680b2d 100644
--- a/lib/librte_eal/common/Makefile
+++ b/lib/librte_eal/common/Makefile
@@ -42,6 +42,7 @@ INC += rte_hexdump.h rte_devargs.h rte_bus.h rte_dev.h rte_vdev.h
 INC += rte_pci_dev_feature_defs.h rte_pci_dev_features.h
 INC += rte_malloc.h rte_keepalive.h rte_time.h
 INC += rte_service.h rte_service_component.h
+INC += rte_reciprocal.h

 GENERIC_INC := rte_atomic.h rte_byteorder.h rte_cycles.h rte_prefetch.h
 GENERIC_INC += rte_spinlock.h rte_memcpy.h rte_cpuflags.h rte_rwlock.h
diff --git a/lib/librte_sched/rte_reciprocal.h b/lib/librte_eal/common/include/rte_reciprocal.h
similarity index 87%
rename from lib/librte_sched/rte_reciprocal.h
rename to lib/librte_eal/common/include/rte_reciprocal.h
index 5e21f09..b6d752f 100644
--- a/lib/librte_sched/rte_reciprocal.h
+++ b/lib/librte_eal/common/include/rte_reciprocal.h
@@ -29,13 +29,15 @@ struct rte_reciprocal {
 	uint8_t sh1, sh2;
 };

-static inline uint32_t rte_reciprocal_divide(uint32_t a, struct rte_reciprocal R)
+static inline uint32_t
+rte_reciprocal_divide(uint32_t a, struct rte_reciprocal R)
 {
 	uint32_t t = (uint32_t)(((uint64_t)a * R.m) >> 32);

 	return (t + ((a - t) >> R.sh1)) >> R.sh2;
 }

-struct rte_reciprocal rte_reciprocal_value(uint32_t d);
+struct rte_reciprocal
+rte_reciprocal_value(uint32_t d);

 #endif /* _RTE_RECIPROCAL_H_ */
diff --git a/lib/librte_sched/rte_reciprocal.c b/lib/librte_eal/common/rte_reciprocal.c
similarity index 96%
rename from lib/librte_sched/rte_reciprocal.c
rename to lib/librte_eal/common/rte_reciprocal.c
index 652f023..7ab99b4 100644
--- a/lib/librte_sched/rte_reciprocal.c
+++ b/lib/librte_eal/common/rte_reciprocal.c
@@ -41,7 +41,8 @@
 /* find largest set bit.
  * portable and slow but does not matter for this usage.
  */
-static inline int fls(uint32_t x)
+static inline int
+fls(uint32_t x)
 {
 	int b;

@@ -53,7 +54,8 @@ static inline int fls(uint32_t x)
 	return 0;
 }

-struct rte_reciprocal rte_reciprocal_value(uint32_t d)
+struct rte_reciprocal
+rte_reciprocal_value(uint32_t d)
 {
 	struct rte_reciprocal R;
 	uint64_t m;
diff --git a/lib/librte_eal/linuxapp/eal/Makefile b/lib/librte_eal/linuxapp/eal/Makefile
index 90bca4d..98f3b8e 100644
--- a/lib/librte_eal/linuxapp/eal/Makefile
+++ b/lib/librte_eal/linuxapp/eal/Makefile
@@ -100,6 +100,7 @@ SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += malloc_elem.c
 SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += malloc_heap.c
 SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += rte_keepalive.c
 SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += rte_service.c
+SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += rte_reciprocal.c

 # from arch dir
 SRCS-$(CONFIG_RTE_EXEC_ENV_LINUXAPP) += rte_cpuflags.c
diff --git a/lib/librte_eal/linuxapp/eal/rte_eal_version.map b/lib/librte_eal/linuxapp/eal/rte_eal_version.map
index 3a8f154..2070cba 100644
--- a/lib/librte_eal/linuxapp/eal/rte_eal_version.map
+++ b/lib/librte_eal/linuxapp/eal/rte_eal_version.map
@@ -242,3 +242,10 @@ EXPERIMENTAL {
 	rte_service_unregister;

 } DPDK_17.08;
+
+DPDK_17.11 {
+	global:
+
+	rte_reciprocal_value;
+
+} DPDK_17.08;
diff --git a/lib/librte_sched/Makefile b/lib/librte_sched/Makefile
index 18274e7..569656b 100644
--- a/lib/librte_sched/Makefile
+++ b/lib/librte_sched/Makefile
@@ -52,10 +52,8 @@ LIBABIVER := 1
 # all source are stored in SRCS-y
 #
 SRCS-$(CONFIG_RTE_LIBRTE_SCHED) += rte_sched.c rte_red.c rte_approx.c
-SRCS-$(CONFIG_RTE_LIBRTE_SCHED) += rte_reciprocal.c

 # install includes
 SYMLINK-$(CONFIG_RTE_LIBRTE_SCHED)-include := rte_sched.h rte_bitmap.h rte_sched_common.h rte_red.h rte_approx.h
-SYMLINK-$(CONFIG_RTE_LIBRTE_SCHED)-include += rte_reciprocal.h

 include $(RTE_SDK)/mk/rte.lib.mk
diff --git a/lib/librte_sched/rte_sched.c b/lib/librte_sched/rte_sched.c
index b7cba11..3b8ccaa 100644
--- a/lib/librte_sched/rte_sched.c
+++ b/lib/librte_sched/rte_sched.c
@@ -42,12 +42,12 @@
 #include <rte_prefetch.h>
 #include <rte_branch_prediction.h>
 #include <rte_mbuf.h>
+#include <rte_reciprocal.h>

 #include "rte_sched.h"
 #include "rte_bitmap.h"
 #include "rte_sched_common.h"
 #include "rte_approx.h"
-#include "rte_reciprocal.h"

 #ifdef __INTEL_COMPILER
 #pragma warning(disable:2259) /* conversion may lose significant bits */
--
2.7.4

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2017-09-20 13:15 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-09-07  9:08 [dpdk-dev] [PATCH v6 2/3] eal: add u64 bit variant for reciprocal Pavan Nikhilesh Bhagavatula
  -- strict thread matches above, loose matches on Subject: below --
2017-09-06 10:21 [dpdk-dev] [PATCH v6 1/3] eal: introduce integer divide through reciprocal Pavan Nikhilesh
2017-09-06 10:21 ` [dpdk-dev] [PATCH v6 2/3] eal: add u64 bit variant for reciprocal Pavan Nikhilesh
2017-09-06 12:28   ` Kevin Traynor
2017-09-06 14:41     ` Pavan Nikhilesh Bhagavatula
2017-09-06 15:35       ` Kevin Traynor
2017-09-06 15:37       ` Stephen Hemminger
2017-09-06 17:05         ` Dumitrescu, Cristian
2017-09-20 13:15   ` Dumitrescu, Cristian

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).