> -----Original Message----- > From: Richardson, Bruce <[email protected]> > Sent: 15 September 2026 22:43 > To: Mandal, Anurag <[email protected]> > Cc: [email protected]; Burakov, Anatoly <[email protected]> > Subject: Re: [PATCH] net/ice: add per-queue Tx rate limit support > > On Tue, Sep 15, 2026 at 11:19:08AM +0100, Mandal, Anurag wrote: > > > -----Original Message----- > > > From: Richardson, Bruce <[email protected]> > > > Sent: 10 September 2026 16:00 > > > To: Mandal, Anurag <[email protected]> > > > Cc: [email protected]; Burakov, Anatoly <[email protected]> > > > Subject: Re: [PATCH] net/ice: add per-queue Tx rate limit support > > > > > > On Thu, Sep 10, 2026 at 10:04:32AM +0000, Anurag Mandal wrote: > > > > The Tx rate can be limited per queue with ethdev operation > > > > ``rte_eth_set_queue_rate_limit()`` > > > > and can be read through ``rte_eth_get_queue_rate_limit()``. > > > > > > > > This feature uses the hardware packet pacing mechanism to enforce > > > > a data rate on individual Tx queues without tearing down the queue. > > > > > > > > The rate is specified in Mbps. > > > > > > > > ice_set_queue_rate_limit() applies the requested rate as the EIR > > > > (maximum bandwidth) limit of the queue scheduler node using > > > > ice_cfg_q_bw_lmt(), converting the Mbps value taken by the API to > > > > the Kbps expected by the scheduler. > > > > A rate of 0 removes the limit and restores the default bandwidth > > > > via ice_cfg_q_bw_dflt_lmt(). > > > > > > > > ice_get_queue_rate_limit() reads back the value cached in the > > > > queue context by the scheduler on a successful set, and reports 0 > > > > when the queue runs unlimited. > > > > > > > > Signed-off-by: Anurag Mandal <[email protected]> > > > > --- > > > > doc/guides/nics/features/ice.ini | 1 + > > > > doc/guides/rel_notes/release_26_11.rst | 3 + > > > > drivers/net/intel/ice/ice_ethdev.c | 77 > ++++++++++++++++++++++++++ > > > > 3 files changed, 81 insertions(+) > > > > > > > Is this functionality not overlapping with what the rte_rm APIs > > > provide for ice? Using the rte_rm hierarchies, it's possible to rate > > > limit a > queue, no? > > > > > > /Bruce > > > > Hi Bruce, > > > > I am guessing you meant rte_tm APIs instead of rte_rm. > > Yes, the two paths ultimately program the same hardware field. > > But, there are few reasons I still think the ethdev op is worth having: > > 1. rte_tm commit bounces the port. This does not. > > So adjusting one queue's rate through rte_tm drops traffic on every > > queue > and bounces the link. > > 2. VSI subtree is rebuilt for rte_tm : > > a. Stop the port if running > > b. Walk the VSI root up or down to the new layer, freeing sibling > subtrees > > c. free_sched_node_recursive() - tear down the existing scheduler > subtree > > d. create_sched_node_recursive() - rebuild it, ice_sched_add_elems() > per node > > e. Recompute pf->main_vsi->nb_qps, then ice_alloc_lan_q_ctx() to > resize queue contexts > > f. Restart the port > > 3. ixgbe & txgbe pmds also implement both. > > > Yes, your logic makes sense. > > However, one final concern, it appears that this feature doesn't interact in > any > way with the rte_tm one. Therefore, if a user configures a full hierarchy > using > rte_tm, and then uses this new API to tweak the Tx rates on queues, we could > see problems later, e.g. losing all adjustments on apply of a slightly > different > hierarchy etc. > > If the two features don't interact well, we may need to put in place some form > of locking to ensure that you can't use one when you use the other. > What do you think? > > /Bruce
Hi Bruce, Thank you for the review as well as feedback. I have addressed them in v2. Kindly check. Thank you. Regards, Anurag M

