Discussion:
[dpdk-dev] [PATCH] ethdev: support double precision RED queue weight
(too old to reply)
Nikhil Rao
2018-11-29 05:54:42 UTC
Permalink
RED queue weight is currently specified as a negated log of 2.

Add support for RED queue weight to be specified in double precision
and TM capability flags for double precision and negated log2
RED queue weight support.

Signed-off-by: Nikhil Rao <***@intel.com>
---
lib/librte_ethdev/rte_tm.h | 41 ++++++++++++++++++++++++++++++--
drivers/net/softnic/rte_eth_softnic_tm.c | 7 ++++--
2 files changed, 44 insertions(+), 4 deletions(-)

diff --git a/lib/librte_ethdev/rte_tm.h b/lib/librte_ethdev/rte_tm.h
index 646ef38..b13454d 100644
--- a/lib/librte_ethdev/rte_tm.h
+++ b/lib/librte_ethdev/rte_tm.h
@@ -393,6 +393,22 @@ struct rte_tm_capabilities {
*/
int cman_wred_byte_mode_supported;

+ /** Double precision RED queue weight support. When non-zero, this
+ * this parameter indicates that RED queue weight in double precision
+ * format is supported.
+ * @see struct rte_tm_red_params::wq_is_log2
+ * @see struct rte_tm_red_params::wq_dp
+ */
+ int cman_wred_wq_dp_supported;
+
+ /** Negated log2 RED queue weight support. When non-zero, this
+ * parameter indicates that RED queue weight in negated log2 format
+ * is supported.
+ * @see struct rte_tm_red_params::wq_is_log2
+ * @see struct rte_tm_red_params::wq_log2
+ */
+ int cman_wred_wq_log2_supported;
+
/** Head drop algorithm support. When non-zero, this parameter
* indicates that there is at least one leaf node that supports the head
* drop algorithm, which might not be true for all the leaf nodes.
@@ -841,8 +857,27 @@ struct rte_tm_red_params {
*/
uint16_t maxp_inv;

- /** Negated log2 of queue weight (wq), i.e. wq = 1 / (2 ^ wq_log2) */
- uint16_t wq_log2;
+ /** When non-zero, RED queue weight (wq) is negated log2 of queue
+ * weight
+ *
+ * @see struct rte_tm_capabilities::cman_wred_wq_dp_supported
+ * @see struct rte_tm_capabilities::cman_wred_wq_log2_supported
+ */
+ int wq_is_log2;
+
+ union {
+ /** Double precision queue weight
+ *
+ * @see struct rte_tm_capabilities::cman_wred_wq_dp_supported
+ */
+ double wq_dp;
+ /** Negated log2 of queue weight (wq),
+ * i.e. wq = 1 / (2 ^ wq_log2)
+ *
+ * @see struct rte_tm_capabilities::cman_wred_wq_log2_supported
+ */
+ uint16_t wq_log2;
+ };
};

/**
@@ -858,6 +893,8 @@ struct rte_tm_red_params {
*
* @see struct rte_tm_capabilities::cman_wred_packet_mode_supported
* @see struct rte_tm_capabilities::cman_wred_byte_mode_supported
+ * @see struct rte_tm_capabilities::cman_wred_wq_dp_supported
+ * @see struct rte_tm_capabilities::cman_wred_wq_log2_supported
*/
struct rte_tm_wred_params {
/** One set of RED parameters per packet color */
diff --git a/drivers/net/softnic/rte_eth_softnic_tm.c b/drivers/net/softnic/rte_eth_softnic_tm.c
index baaafbe..e96ea8e 100644
--- a/drivers/net/softnic/rte_eth_softnic_tm.c
+++ b/drivers/net/softnic/rte_eth_softnic_tm.c
@@ -469,7 +469,8 @@ struct softnic_tmgr_port *
.cman_wred_context_shared_n_max = 0,
.cman_wred_context_shared_n_nodes_per_context_max = 0,
.cman_wred_context_shared_n_contexts_per_node_max = 0,
-
+ .cman_wred_wq_dp_supported = 0,
+ .cman_wred_wq_log2_supported = WRED_SUPPORTED,
.mark_vlan_dei_supported = {0, 0, 0},
.mark_ip_ecn_tcp_supported = {0, 0, 0},
.mark_ip_ecn_sctp_supported = {0, 0, 0},
@@ -1243,8 +1244,10 @@ struct softnic_tmgr_port *
for (color = RTE_TM_GREEN; color < RTE_TM_COLORS; color++) {
uint32_t min_th = profile->red_params[color].min_th;
uint32_t max_th = profile->red_params[color].max_th;
+ int wq_is_log2 = profile->red_params[color].wq_is_log2;

- if (min_th > max_th ||
+ if (wq_is_log2 == 0 ||
+ min_th > max_th ||
max_th == 0 ||
min_th > UINT16_MAX ||
max_th > UINT16_MAX)
--
1.8.3.1
Stephen Hemminger
2018-11-29 06:12:45 UTC
Permalink
On Thu, 29 Nov 2018 11:24:42 +0530
Post by Nikhil Rao
RED queue weight is currently specified as a negated log of 2.
Add support for RED queue weight to be specified in double precision
and TM capability flags for double precision and negated log2
RED queue weight support.
Since this is an ABI break anyway, why not just commit to the new
format?
Stephen Hemminger
2018-12-10 16:01:09 UTC
Permalink
On Mon, 10 Dec 2018 05:43:37 +0000
-----Original Message-----
Sent: Thursday, November 29, 2018 11:43 AM
Subject: Re: [dpdk-dev] [PATCH] ethdev: support double precision RED queue
weight
On Thu, 29 Nov 2018 11:24:42 +0530
Post by Nikhil Rao
RED queue weight is currently specified as a negated log of 2.
Add support for RED queue weight to be specified in double precision
and TM capability flags for double precision and negated log2 RED
queue weight support.
Since this is an ABI break anyway, why not just commit to the new format?
Hi Stephen,
Can you please provide more detail on your comment ? are you suggesting replacing the wq_log2/wq_dp with a double ?
Thanks,
Nikhil
My comment is that since you are changing a structure layout, which would
break existing users; why not go farther and just fix the API to a better
version. I don't think any projects use this code anyway,
see my talk (https://github.com/shemminger/dpdk-metrics).

Isn't floating point going to be expensive. Or is it only during the setup
process, not enqueue/dequeue.

Stephen Hemminger
2018-12-10 15:57:11 UTC
Permalink
On Thu, 29 Nov 2018 11:24:42 +0530
Post by Nikhil Rao
+ /** Double precision RED queue weight support. When non-zero, this
+ * this parameter indicates that RED queue weight in double precision
+ * format is supported.
+ */
+ int cman_wred_wq_dp_supported;
+
+ /** Negated log2 RED queue weight support. When non-zero, this
+ * parameter indicates that RED queue weight in negated log2 format
+ * is supported.
+ */
+ int cman_wred_wq_log2_supported;
+
One suggestion:
Since these are flag values use u8. Takes less space.
And maybe use pahole utility to find existing hole to put
them in.
Loading...