From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Monjalon Subject: Re: Unit for tx_rate in rte_eth_set_queue_rate_limit? Date: Tue, 20 Oct 2015 14:38:54 +0200 Message-ID: <2727565.cjguxIjPP1@xps13> References: <56263196.9020305@netinsight.net> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Cc: dev@dpdk.org To: Simon =?ISO-8859-1?Q?K=E5gstr=F6m?= Return-path: Received: from mail-wi0-f177.google.com (mail-wi0-f177.google.com [209.85.212.177]) by dpdk.org (Postfix) with ESMTP id D97558E7C for ; Tue, 20 Oct 2015 14:39:58 +0200 (CEST) Received: by wicfv8 with SMTP id fv8so26659144wic.0 for ; Tue, 20 Oct 2015 05:39:58 -0700 (PDT) In-Reply-To: <56263196.9020305@netinsight.net> List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" 2015-10-20 14:20, Simon K=E5gstr=F6m: > Hi! >=20 > What is the unit of the tx_rate parameter to the > rte_eth_set_queue_rate_limit function? It's documented as >=20 > /** > * Set the rate limitation for a queue on an Ethernet device. > * > * @param port_id > * The port identifier of the Ethernet device. > * @param queue_idx > * The queue id. > * @param tx_rate > * The tx rate allocated from the total link speed for this queue. > * @return > * - (0) if successful. > * - (-ENOTSUP) if hardware doesn't support this feature. > * - (-ENODEV) if *port_id* invalid. > * - (-EINVAL) if bad parameter. > */ > int rte_eth_set_queue_rate_limit(uint8_t port_id, uint16_t queue_idx,= > =09=09=09uint16_t tx_rate); >=20 > I parse this as meaning a percentage of total link speed, i.e., on a = 10 > Gbps link, 50 would mean 5Gbps, 10 means 1Gbps etc. Is this correct? It's implemented only in ixgbe: /* Calculate the rate factor values to set */ rf_int =3D (uint32_t)link_speed / (uint32_t)tx_rate; rf_dec =3D (uint32_t)link_speed % (uint32_t)tx_rate; rf_dec =3D (rf_dec << IXGBE_RTTBCNRC_RF_INT_SHIFT) / tx_rate; bcnrc_val =3D IXGBE_RTTBCNRC_RS_ENA; bcnrc_val |=3D ((rf_int << IXGBE_RTTBCNRC_RF_INT_SHIFT) & IXGBE_RTTBCNRC_RF_INT_MASK_M); bcnrc_val |=3D (rf_dec & IXGBE_RTTBCNRC_RF_DEC_MASK); So you just need to check the datasheet and send a patch to make it cle= ar :) Thanks