* [dpdk-dev] [PATCH v3 1/4] bnx2x: Update documentation @ 2016-04-06 0:37 Rasesh Mody 2016-04-06 0:37 ` [dpdk-dev] [PATCH v3 2/4] bnx2x: Fix Tx Performance Rasesh Mody ` (3 more replies) 0 siblings, 4 replies; 11+ messages in thread From: Rasesh Mody @ 2016-04-06 0:37 UTC (permalink / raw) To: thomas.monjalon; +Cc: dev, ameen.rahman, harish.patil, Rasesh Mody Signed-off-by: Harish Patil <harish.patil@qlogic.com> Signed-off-by: Rasesh Mody <rasesh.mody@qlogic.com> --- doc/guides/nics/bnx2x.rst | 1 + doc/guides/nics/overview.rst | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/doc/guides/nics/bnx2x.rst b/doc/guides/nics/bnx2x.rst index ed0e5e5..df8fb47 100644 --- a/doc/guides/nics/bnx2x.rst +++ b/doc/guides/nics/bnx2x.rst @@ -60,6 +60,7 @@ The features not yet supported include: - LRO/TSO offload - Checksum offload - SR-IOV PF +- Rx TX scatter gather Co-existence considerations --------------------------- diff --git a/doc/guides/nics/overview.rst b/doc/guides/nics/overview.rst index ec1af46..482a59c 100644 --- a/doc/guides/nics/overview.rst +++ b/doc/guides/nics/overview.rst @@ -87,8 +87,8 @@ Most of these differences are summarized below. c c c c c c ==================== = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = speed capabilities - link status X X X X X X X - link status event X X X X X + link status X X X X X X X X X + link status event X X X X X X X queue status event X Rx interrupt X X X X queue start/stop X X X X X X X X X @@ -97,15 +97,15 @@ Most of these differences are summarized below. scattered Rx X X X X X X X X X LRO TSO X X X X X X - promiscuous mode X X X X X X X X + promiscuous mode X X X X X X X X X X allmulticast mode X X X X X X X X - unicast MAC filter X X X X - multicast MAC filter X X X X + unicast MAC filter X X X X X X + multicast MAC filter X X X X X X RSS hash X X X X X X X X RSS key update X X X X X X RSS reta update X X X X X X VMDq X X - SR-IOV X X X X X + SR-IOV X X X X X X DCB X X VLAN filter X X X X X X ethertype filter X X @@ -127,14 +127,14 @@ Most of these differences are summarized below. inner L4 checksum X X X X packet type parsing X X X X X timesync X X - basic stats X X X X X X X X X X - extended stats X X X X X + basic stats X X X X X X X X X X X X + extended stats X X X X X X X stats per queue X X X X EEPROM dump registers dump multiprocess aware X X X X X X BSD nic_uio X X X X X - Linux UIO X X X X X X + Linux UIO X X X X X X X X Linux VFIO X X X X X other kdrv X ARMv7 @@ -142,8 +142,8 @@ Most of these differences are summarized below. Power8 X X TILE-Gx x86-32 X X X X X X X X X - x86-64 X X X X X X X X X X - usage doc X X X X + x86-64 X X X X X X X X X X X X + usage doc X X X X X X design doc perf doc ==================== = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- 1.7.10.3 ^ permalink raw reply [flat|nested] 11+ messages in thread
* [dpdk-dev] [PATCH v3 2/4] bnx2x: Fix Tx Performance 2016-04-06 0:37 [dpdk-dev] [PATCH v3 1/4] bnx2x: Update documentation Rasesh Mody @ 2016-04-06 0:37 ` Rasesh Mody 2016-04-06 0:37 ` [dpdk-dev] [PATCH v3 3/4] bnx2x: Enhance stats get Rasesh Mody ` (2 subsequent siblings) 3 siblings, 0 replies; 11+ messages in thread From: Rasesh Mody @ 2016-04-06 0:37 UTC (permalink / raw) To: thomas.monjalon; +Cc: dev, ameen.rahman, harish.patil, Rasesh Mody Change the Tx routine logic to ring the doorbell once per burst and not on every Tx packet. This driver-level optimization is necessary to achieve line rates for larger frame sizes (1k or more). Fixes: 540a211084a7 ("bnx2x: driver core") Signed-off-by: Harish Patil <harish.patil@qlogic.com> Signed-off-by: Rasesh Mody <rasesh.mody@qlogic.com> --- drivers/net/bnx2x/bnx2x.c | 207 ++++++++++++++++++---------------------- drivers/net/bnx2x/bnx2x.h | 4 +- drivers/net/bnx2x/bnx2x_rxtx.c | 45 ++++----- 3 files changed, 118 insertions(+), 138 deletions(-) diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c index 6edb2f9..149fdef 100644 --- a/drivers/net/bnx2x/bnx2x.c +++ b/drivers/net/bnx2x/bnx2x.c @@ -1293,7 +1293,7 @@ bnx2x_free_tx_pkt(__rte_unused struct bnx2x_fastpath *fp, struct bnx2x_tx_queue struct rte_mbuf *tx_mbuf = txq->sw_ring[TX_BD(pkt_idx, txq)]; if (likely(tx_mbuf != NULL)) { - rte_pktmbuf_free(tx_mbuf); + rte_pktmbuf_free_seg(tx_mbuf); } else { PMD_RX_LOG(ERR, "fp[%02d] lost mbuf %lu", fp->index, (unsigned long)TX_BD(pkt_idx, txq)); @@ -2113,147 +2113,128 @@ bnx2x_nic_unload(struct bnx2x_softc *sc, uint32_t unload_mode, uint8_t keep_link * the mbuf and return to the caller. * * Returns: - * 0 = Success, !0 = Failure + * Number of TX BDs used for the mbuf * Note the side effect that an mbuf may be freed if it causes a problem. */ -int bnx2x_tx_encap(struct bnx2x_tx_queue *txq, struct rte_mbuf **m_head, int m_pkts) +uint32_t +bnx2x_tx_encap(struct bnx2x_tx_queue *txq, struct rte_mbuf *m0) { - struct rte_mbuf *m0; struct eth_tx_start_bd *tx_start_bd; uint16_t bd_prod, pkt_prod; - int m_tx; struct bnx2x_softc *sc; uint32_t nbds = 0; - struct bnx2x_fastpath *fp; sc = txq->sc; - fp = &sc->fp[txq->queue_id]; bd_prod = txq->tx_bd_tail; pkt_prod = txq->tx_pkt_tail; - for (m_tx = 0; m_tx < m_pkts; m_tx++) { + txq->sw_ring[TX_BD(pkt_prod, txq)] = m0; - m0 = *m_head++; + tx_start_bd = &txq->tx_ring[TX_BD(bd_prod, txq)].start_bd; - if (unlikely(txq->nb_tx_avail < 3)) { - PMD_TX_LOG(ERR, "no enough bds %d/%d", - bd_prod, txq->nb_tx_avail); - return -ENOMEM; - } + tx_start_bd->addr = + rte_cpu_to_le_64(rte_mbuf_data_dma_addr(m0)); + tx_start_bd->nbytes = rte_cpu_to_le_16(m0->data_len); + tx_start_bd->bd_flags.as_bitfield = ETH_TX_BD_FLAGS_START_BD; + tx_start_bd->general_data = + (1 << ETH_TX_START_BD_HDR_NBDS_SHIFT); - txq->sw_ring[TX_BD(pkt_prod, txq)] = m0; + tx_start_bd->nbd = rte_cpu_to_le_16(2); - tx_start_bd = &txq->tx_ring[TX_BD(bd_prod, txq)].start_bd; - - tx_start_bd->addr = - rte_cpu_to_le_64(rte_mbuf_data_dma_addr(m0)); - tx_start_bd->nbytes = rte_cpu_to_le_16(m0->data_len); - tx_start_bd->bd_flags.as_bitfield = ETH_TX_BD_FLAGS_START_BD; - tx_start_bd->general_data = - (1 << ETH_TX_START_BD_HDR_NBDS_SHIFT); - - tx_start_bd->nbd = rte_cpu_to_le_16(2); + if (m0->ol_flags & PKT_TX_VLAN_PKT) { + tx_start_bd->vlan_or_ethertype = + rte_cpu_to_le_16(m0->vlan_tci); + tx_start_bd->bd_flags.as_bitfield |= + (X_ETH_OUTBAND_VLAN << + ETH_TX_BD_FLAGS_VLAN_MODE_SHIFT); + } else { + if (IS_PF(sc)) + tx_start_bd->vlan_or_ethertype = + rte_cpu_to_le_16(pkt_prod); + else { + struct ether_hdr *eh = + rte_pktmbuf_mtod(m0, struct ether_hdr *); - if (m0->ol_flags & PKT_TX_VLAN_PKT) { tx_start_bd->vlan_or_ethertype = - rte_cpu_to_le_16(m0->vlan_tci); - tx_start_bd->bd_flags.as_bitfield |= - (X_ETH_OUTBAND_VLAN << - ETH_TX_BD_FLAGS_VLAN_MODE_SHIFT); - } else { - if (IS_PF(sc)) - tx_start_bd->vlan_or_ethertype = - rte_cpu_to_le_16(pkt_prod); - else { - struct ether_hdr *eh - = rte_pktmbuf_mtod(m0, struct ether_hdr *); - - tx_start_bd->vlan_or_ethertype - = rte_cpu_to_le_16(rte_be_to_cpu_16(eh->ether_type)); - } + rte_cpu_to_le_16(rte_be_to_cpu_16(eh->ether_type)); } + } - bd_prod = NEXT_TX_BD(bd_prod); - if (IS_VF(sc)) { - struct eth_tx_parse_bd_e2 *tx_parse_bd; - const struct ether_hdr *eh = rte_pktmbuf_mtod(m0, struct ether_hdr *); - uint8_t mac_type = UNICAST_ADDRESS; - - tx_parse_bd = - &txq->tx_ring[TX_BD(bd_prod, txq)].parse_bd_e2; - if (is_multicast_ether_addr(&eh->d_addr)) { - if (is_broadcast_ether_addr(&eh->d_addr)) - mac_type = BROADCAST_ADDRESS; - else - mac_type = MULTICAST_ADDRESS; - } - tx_parse_bd->parsing_data = - (mac_type << ETH_TX_PARSE_BD_E2_ETH_ADDR_TYPE_SHIFT); - - rte_memcpy(&tx_parse_bd->data.mac_addr.dst_hi, - &eh->d_addr.addr_bytes[0], 2); - rte_memcpy(&tx_parse_bd->data.mac_addr.dst_mid, - &eh->d_addr.addr_bytes[2], 2); - rte_memcpy(&tx_parse_bd->data.mac_addr.dst_lo, - &eh->d_addr.addr_bytes[4], 2); - rte_memcpy(&tx_parse_bd->data.mac_addr.src_hi, - &eh->s_addr.addr_bytes[0], 2); - rte_memcpy(&tx_parse_bd->data.mac_addr.src_mid, - &eh->s_addr.addr_bytes[2], 2); - rte_memcpy(&tx_parse_bd->data.mac_addr.src_lo, - &eh->s_addr.addr_bytes[4], 2); - - tx_parse_bd->data.mac_addr.dst_hi = - rte_cpu_to_be_16(tx_parse_bd->data.mac_addr.dst_hi); - tx_parse_bd->data.mac_addr.dst_mid = - rte_cpu_to_be_16(tx_parse_bd->data. - mac_addr.dst_mid); - tx_parse_bd->data.mac_addr.dst_lo = - rte_cpu_to_be_16(tx_parse_bd->data.mac_addr.dst_lo); - tx_parse_bd->data.mac_addr.src_hi = - rte_cpu_to_be_16(tx_parse_bd->data.mac_addr.src_hi); - tx_parse_bd->data.mac_addr.src_mid = - rte_cpu_to_be_16(tx_parse_bd->data. - mac_addr.src_mid); - tx_parse_bd->data.mac_addr.src_lo = - rte_cpu_to_be_16(tx_parse_bd->data.mac_addr.src_lo); - - PMD_TX_LOG(DEBUG, - "PBD dst %x %x %x src %x %x %x p_data %x", - tx_parse_bd->data.mac_addr.dst_hi, - tx_parse_bd->data.mac_addr.dst_mid, - tx_parse_bd->data.mac_addr.dst_lo, - tx_parse_bd->data.mac_addr.src_hi, - tx_parse_bd->data.mac_addr.src_mid, - tx_parse_bd->data.mac_addr.src_lo, - tx_parse_bd->parsing_data); - } + bd_prod = NEXT_TX_BD(bd_prod); + if (IS_VF(sc)) { + struct eth_tx_parse_bd_e2 *tx_parse_bd; + const struct ether_hdr *eh = + rte_pktmbuf_mtod(m0, struct ether_hdr *); + uint8_t mac_type = UNICAST_ADDRESS; + + tx_parse_bd = + &txq->tx_ring[TX_BD(bd_prod, txq)].parse_bd_e2; + if (is_multicast_ether_addr(&eh->d_addr)) { + if (is_broadcast_ether_addr(&eh->d_addr)) + mac_type = BROADCAST_ADDRESS; + else + mac_type = MULTICAST_ADDRESS; + } + tx_parse_bd->parsing_data = + (mac_type << ETH_TX_PARSE_BD_E2_ETH_ADDR_TYPE_SHIFT); + + rte_memcpy(&tx_parse_bd->data.mac_addr.dst_hi, + &eh->d_addr.addr_bytes[0], 2); + rte_memcpy(&tx_parse_bd->data.mac_addr.dst_mid, + &eh->d_addr.addr_bytes[2], 2); + rte_memcpy(&tx_parse_bd->data.mac_addr.dst_lo, + &eh->d_addr.addr_bytes[4], 2); + rte_memcpy(&tx_parse_bd->data.mac_addr.src_hi, + &eh->s_addr.addr_bytes[0], 2); + rte_memcpy(&tx_parse_bd->data.mac_addr.src_mid, + &eh->s_addr.addr_bytes[2], 2); + rte_memcpy(&tx_parse_bd->data.mac_addr.src_lo, + &eh->s_addr.addr_bytes[4], 2); + + tx_parse_bd->data.mac_addr.dst_hi = + rte_cpu_to_be_16(tx_parse_bd->data.mac_addr.dst_hi); + tx_parse_bd->data.mac_addr.dst_mid = + rte_cpu_to_be_16(tx_parse_bd->data. + mac_addr.dst_mid); + tx_parse_bd->data.mac_addr.dst_lo = + rte_cpu_to_be_16(tx_parse_bd->data.mac_addr.dst_lo); + tx_parse_bd->data.mac_addr.src_hi = + rte_cpu_to_be_16(tx_parse_bd->data.mac_addr.src_hi); + tx_parse_bd->data.mac_addr.src_mid = + rte_cpu_to_be_16(tx_parse_bd->data. + mac_addr.src_mid); + tx_parse_bd->data.mac_addr.src_lo = + rte_cpu_to_be_16(tx_parse_bd->data.mac_addr.src_lo); PMD_TX_LOG(DEBUG, - "start bd: nbytes %d flags %x vlan %x\n", - tx_start_bd->nbytes, - tx_start_bd->bd_flags.as_bitfield, - tx_start_bd->vlan_or_ethertype); + "PBD dst %x %x %x src %x %x %x p_data %x", + tx_parse_bd->data.mac_addr.dst_hi, + tx_parse_bd->data.mac_addr.dst_mid, + tx_parse_bd->data.mac_addr.dst_lo, + tx_parse_bd->data.mac_addr.src_hi, + tx_parse_bd->data.mac_addr.src_mid, + tx_parse_bd->data.mac_addr.src_lo, + tx_parse_bd->parsing_data); + } - bd_prod = NEXT_TX_BD(bd_prod); - pkt_prod++; + PMD_TX_LOG(DEBUG, + "start bd: nbytes %d flags %x vlan %x\n", + tx_start_bd->nbytes, + tx_start_bd->bd_flags.as_bitfield, + tx_start_bd->vlan_or_ethertype); - if (TX_IDX(bd_prod) < 2) { - nbds++; - } - } + bd_prod = NEXT_TX_BD(bd_prod); + pkt_prod++; + + if (TX_IDX(bd_prod) < 2) + nbds++; - txq->nb_tx_avail -= m_pkts << 1; + txq->nb_tx_avail -= 1 << 1; txq->tx_bd_tail = bd_prod; txq->tx_pkt_tail = pkt_prod; - mb(); - fp->tx_db.data.prod += (m_pkts << 1) + nbds; - DOORBELL(sc, txq->queue_id, fp->tx_db.raw); - mb(); - - return 0; + return nbds + 2; } static uint16_t bnx2x_cid_ilt_lines(struct bnx2x_softc *sc) diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h index 135a6eb..b3a3866 100644 --- a/drivers/net/bnx2x/bnx2x.h +++ b/drivers/net/bnx2x/bnx2x.h @@ -167,6 +167,8 @@ struct bnx2x_device_type { #define TX_PAGE(x) (((x) & ~USABLE_TX_BD_PER_PAGE) >> 8) #define TX_IDX(x) ((x) & USABLE_TX_BD_PER_PAGE) +#define BDS_PER_TX_PKT (3) + /* * Trigger pending transmits when the number of available BDs is greater * than 1/8 of the total number of usable BDs. @@ -1864,7 +1866,7 @@ int bnx2x_alloc_hsi_mem(struct bnx2x_softc *sc); int bnx2x_alloc_ilt_mem(struct bnx2x_softc *sc); void bnx2x_free_ilt_mem(struct bnx2x_softc *sc); void bnx2x_dump_tx_chain(struct bnx2x_fastpath * fp, int bd_prod, int count); -int bnx2x_tx_encap(struct bnx2x_tx_queue *txq, struct rte_mbuf **m_head, int m_pkts); +uint32_t bnx2x_tx_encap(struct bnx2x_tx_queue *txq, struct rte_mbuf *m0); uint8_t bnx2x_txeof(struct bnx2x_softc *sc, struct bnx2x_fastpath *fp); void bnx2x_print_adapter_info(struct bnx2x_softc *sc); int bnx2x_intr_legacy(struct bnx2x_softc *sc, int scan_fp); diff --git a/drivers/net/bnx2x/bnx2x_rxtx.c b/drivers/net/bnx2x/bnx2x_rxtx.c index 752a5e8..8b047d4 100644 --- a/drivers/net/bnx2x/bnx2x_rxtx.c +++ b/drivers/net/bnx2x/bnx2x_rxtx.c @@ -222,40 +222,37 @@ bnx2x_xmit_pkts(void *p_txq, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) struct bnx2x_tx_queue *txq; struct bnx2x_softc *sc; struct bnx2x_fastpath *fp; - uint32_t burst, nb_tx; - struct rte_mbuf **m = tx_pkts; - int ret; + uint32_t ret; + uint16_t nb_tx_pkts; + uint16_t nb_pkt_sent = 0; txq = p_txq; sc = txq->sc; fp = &sc->fp[txq->queue_id]; - nb_tx = nb_pkts; + if ((unlikely((txq->nb_tx_desc - txq->nb_tx_avail) > + txq->tx_free_thresh))) + bnx2x_txeof(sc, fp); - do { - burst = RTE_MIN(nb_pkts, RTE_PMD_BNX2X_TX_MAX_BURST); + nb_tx_pkts = RTE_MIN(nb_pkts, txq->nb_tx_avail / BDS_PER_TX_PKT); - ret = bnx2x_tx_encap(txq, m, burst); - if (unlikely(ret)) { - PMD_TX_LOG(ERR, "tx_encap failed!"); - } - - bnx2x_update_fp_sb_idx(fp); - - if ((txq->nb_tx_desc - txq->nb_tx_avail) > txq->tx_free_thresh) { - bnx2x_txeof(sc, fp); - } - - if (unlikely(ret == -ENOMEM)) { - break; - } + if (unlikely(nb_tx_pkts == 0)) + return 0; - m += burst; - nb_pkts -= burst; + while (nb_tx_pkts--) { + struct rte_mbuf *m = *tx_pkts++; + assert(m != NULL); + ret = bnx2x_tx_encap(txq, m); + fp->tx_db.data.prod += ret; + nb_pkt_sent++; + } - } while (nb_pkts); + bnx2x_update_fp_sb_idx(fp); + mb(); + DOORBELL(sc, txq->queue_id, fp->tx_db.raw); + mb(); - return nb_tx - nb_pkts; + return nb_pkt_sent; } int -- 1.7.10.3 ^ permalink raw reply [flat|nested] 11+ messages in thread
* [dpdk-dev] [PATCH v3 3/4] bnx2x: Enhance stats get 2016-04-06 0:37 [dpdk-dev] [PATCH v3 1/4] bnx2x: Update documentation Rasesh Mody 2016-04-06 0:37 ` [dpdk-dev] [PATCH v3 2/4] bnx2x: Fix Tx Performance Rasesh Mody @ 2016-04-06 0:37 ` Rasesh Mody 2016-04-06 14:32 ` Van Haaren, Harry 2016-04-06 0:37 ` [dpdk-dev] [PATCH v3 4/4] bnx2x: Update PMD version to 1.0.1.1 Rasesh Mody 2016-04-06 14:32 ` [dpdk-dev] [PATCH v3 1/4] bnx2x: Update documentation Bruce Richardson 3 siblings, 1 reply; 11+ messages in thread From: Rasesh Mody @ 2016-04-06 0:37 UTC (permalink / raw) To: thomas.monjalon; +Cc: dev, ameen.rahman, harish.patil, Rasesh Mody Enhance the stats_get() routine to display drop counters under imissed counter. Added extended stats get support to provide additional info. Signed-off-by: Rasesh Mody <rasesh.mody@qlogic.com> --- drivers/net/bnx2x/bnx2x_ethdev.c | 72 ++++++++++++++++++++++++++++++++++++++ drivers/net/bnx2x/bnx2x_rxtx.c | 2 ++ 2 files changed, 74 insertions(+) diff --git a/drivers/net/bnx2x/bnx2x_ethdev.c b/drivers/net/bnx2x/bnx2x_ethdev.c index 071b44f..1f38f6d 100644 --- a/drivers/net/bnx2x/bnx2x_ethdev.c +++ b/drivers/net/bnx2x/bnx2x_ethdev.c @@ -276,6 +276,9 @@ static void bnx2x_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) { struct bnx2x_softc *sc = dev->data->dev_private; + uint32_t brb_truncate_discard; + uint64_t brb_drops; + uint64_t brb_truncates; PMD_INIT_FUNC_TRACE(); @@ -316,6 +319,73 @@ bnx2x_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) stats->rx_nombuf = HILO_U64(sc->eth_stats.no_buff_discard_hi, sc->eth_stats.no_buff_discard_lo); + + brb_drops = + HILO_U64(sc->eth_stats.brb_drop_hi, + sc->eth_stats.brb_drop_lo); + + brb_truncates = + HILO_U64(sc->eth_stats.brb_truncate_hi, + sc->eth_stats.brb_truncate_lo); + + brb_truncate_discard = sc->eth_stats.brb_truncate_discard; + + stats->imissed = brb_drops + brb_truncates + + brb_truncate_discard + stats->rx_nombuf; +} + +#define BNX2X_EXTENDED_STATS 9 + +static int +bnx2x_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstats *xstats, + unsigned n) +{ + struct bnx2x_softc *sc = dev->data->dev_private; + unsigned num = BNX2X_EXTENDED_STATS; + + if (n < num) + return num; + + num = 0; + + bnx2x_stats_handle(sc, STATS_EVENT_UPDATE); + + snprintf(xstats[num].name, sizeof(xstats[num].name), "brb_drops"); + xstats[num++].value = HILO_U64(sc->eth_stats.brb_drop_hi, + sc->eth_stats.brb_drop_lo); + + snprintf(xstats[num].name, sizeof(xstats[num].name), "brb_truncates"); + xstats[num++].value = HILO_U64(sc->eth_stats.brb_truncate_hi, + sc->eth_stats.brb_truncate_lo); + + snprintf(xstats[num].name, sizeof(xstats[num].name), + "brb_truncate_discard"); + xstats[num++].value = sc->eth_stats.brb_truncate_discard; + + snprintf(xstats[num].name, sizeof(xstats[num].name), + "mac_filter_discard"); + xstats[num++].value = sc->eth_stats.mac_filter_discard; + + snprintf(xstats[num].name, sizeof(xstats[num].name), "mf_tag_discard"); + xstats[num++].value = sc->eth_stats.mf_tag_discard; + + snprintf(xstats[num].name, sizeof(xstats[num].name), "tx_pause"); + xstats[num++].value = HILO_U64(sc->eth_stats.pause_frames_sent_hi, + sc->eth_stats.pause_frames_sent_lo); + + snprintf(xstats[num].name, sizeof(xstats[num].name), "rx_pause"); + xstats[num++].value = HILO_U64(sc->eth_stats.pause_frames_received_hi, + sc->eth_stats.pause_frames_received_lo); + + snprintf(xstats[num].name, sizeof(xstats[num].name), "tx_pfc"); + xstats[num++].value = HILO_U64(sc->eth_stats.pfc_frames_sent_hi, + sc->eth_stats.pfc_frames_sent_lo); + + snprintf(xstats[num].name, sizeof(xstats[num].name), "rx_pfc"); + xstats[num++].value = HILO_U64(sc->eth_stats.pfc_frames_received_hi, + sc->eth_stats.pfc_frames_received_lo); + + return num; } static void @@ -360,6 +430,7 @@ static const struct eth_dev_ops bnx2x_eth_dev_ops = { .allmulticast_disable = bnx2x_dev_allmulticast_disable, .link_update = bnx2x_dev_link_update, .stats_get = bnx2x_dev_stats_get, + .xstats_get = bnx2x_dev_xstats_get, .dev_infos_get = bnx2x_dev_infos_get, .rx_queue_setup = bnx2x_dev_rx_queue_setup, .rx_queue_release = bnx2x_dev_rx_queue_release, @@ -383,6 +454,7 @@ static const struct eth_dev_ops bnx2xvf_eth_dev_ops = { .allmulticast_disable = bnx2x_dev_allmulticast_disable, .link_update = bnx2xvf_dev_link_update, .stats_get = bnx2x_dev_stats_get, + .xstats_get = bnx2x_dev_xstats_get, .dev_infos_get = bnx2x_dev_infos_get, .rx_queue_setup = bnx2x_dev_rx_queue_setup, .rx_queue_release = bnx2x_dev_rx_queue_release, diff --git a/drivers/net/bnx2x/bnx2x_rxtx.c b/drivers/net/bnx2x/bnx2x_rxtx.c index 8b047d4..60bd08b 100644 --- a/drivers/net/bnx2x/bnx2x_rxtx.c +++ b/drivers/net/bnx2x/bnx2x_rxtx.c @@ -405,6 +405,8 @@ bnx2x_recv_pkts(void *p_rxq, struct rte_mbuf **rx_pkts, uint16_t nb_pkts) new_mb = bnx2x_rxmbuf_alloc(rxq->mb_pool); if (unlikely(!new_mb)) { PMD_RX_LOG(ERR, "mbuf alloc fail fp[%02d]", fp->index); + rte_eth_devices[rxq->port_id].data-> + rx_mbuf_alloc_failed++; goto next_rx; } -- 1.7.10.3 ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [dpdk-dev] [PATCH v3 3/4] bnx2x: Enhance stats get 2016-04-06 0:37 ` [dpdk-dev] [PATCH v3 3/4] bnx2x: Enhance stats get Rasesh Mody @ 2016-04-06 14:32 ` Van Haaren, Harry 2016-04-07 5:10 ` Rasesh Mody 2016-05-04 5:41 ` Rasesh Mody 0 siblings, 2 replies; 11+ messages in thread From: Van Haaren, Harry @ 2016-04-06 14:32 UTC (permalink / raw) To: Rasesh Mody, thomas.monjalon; +Cc: dev, ameen.rahman, harish.patil > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Rasesh Mody > Subject: [dpdk-dev] [PATCH v3 3/4] bnx2x: Enhance stats get Hi Rasesh, > + snprintf(xstats[num].name, sizeof(xstats[num].name), "brb_drops"); I don't understand what a "brb" drop is. > + snprintf(xstats[num].name, sizeof(xstats[num].name), "tx_pfc"); Similarly here, and with some other of the xstats strings, it doesn't become clear to me what exactly the value represents. "mac_filter_discard" is descriptive and readable, but the next stat has "mf_tag_discard" - these small inconsistencies make it much harder (impossible?) to scrap the xstats strings and retrieve useful metadata. I'll suggest leaving the xstats implementation part of this patch until the next release, and we can align on the names of the stats. -Harry ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [dpdk-dev] [PATCH v3 3/4] bnx2x: Enhance stats get 2016-04-06 14:32 ` Van Haaren, Harry @ 2016-04-07 5:10 ` Rasesh Mody 2016-05-04 5:41 ` Rasesh Mody 1 sibling, 0 replies; 11+ messages in thread From: Rasesh Mody @ 2016-04-07 5:10 UTC (permalink / raw) To: Van Haaren, Harry, thomas.monjalon; +Cc: dev, Ameen Rahman, Harish Patil > From: Van Haaren, Harry [mailto:harry.van.haaren@intel.com] > Sent: Wednesday, April 06, 2016 7:33 AM > > > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Rasesh Mody > > Subject: [dpdk-dev] [PATCH v3 3/4] bnx2x: Enhance stats get > > Hi Rasesh, > > > + snprintf(xstats[num].name, sizeof(xstats[num].name), > "brb_drops"); > > I don't understand what a "brb" drop is. > > > > + snprintf(xstats[num].name, sizeof(xstats[num].name), "tx_pfc"); > > Similarly here, and with some other of the xstats strings, it doesn't become > clear to me what exactly the value represents. > > "mac_filter_discard" is descriptive and readable, but the next stat has > "mf_tag_discard" - these small inconsistencies make it much harder > (impossible?) to scrap the xstats strings and retrieve useful metadata. > > I'll suggest leaving the xstats implementation part of this patch until the next > release, and we can align on the names of the stats. We'll re-work the patch to accommodate your suggestions. > > -Harry ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [dpdk-dev] [PATCH v3 3/4] bnx2x: Enhance stats get 2016-04-06 14:32 ` Van Haaren, Harry 2016-04-07 5:10 ` Rasesh Mody @ 2016-05-04 5:41 ` Rasesh Mody 1 sibling, 0 replies; 11+ messages in thread From: Rasesh Mody @ 2016-05-04 5:41 UTC (permalink / raw) To: Van Haaren, Harry, thomas.monjalon; +Cc: dev, Ameen Rahman, Harish Patil > From: Van Haaren, Harry [mailto:harry.van.haaren@intel.com] > Sent: Wednesday, April 06, 2016 7:33 AM > > > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Rasesh Mody > > Subject: [dpdk-dev] [PATCH v3 3/4] bnx2x: Enhance stats get > > Hi Rasesh, > > > + snprintf(xstats[num].name, sizeof(xstats[num].name), > "brb_drops"); > > I don't understand what a "brb" drop is. > > > > + snprintf(xstats[num].name, sizeof(xstats[num].name), "tx_pfc"); > > Similarly here, and with some other of the xstats strings, it doesn't become > clear to me what exactly the value represents. > > "mac_filter_discard" is descriptive and readable, but the next stat has > "mf_tag_discard" - these small inconsistencies make it much harder > (impossible?) to scrap the xstats strings and retrieve useful metadata. > > I'll suggest leaving the xstats implementation part of this patch until the next > release, and we can align on the names of the stats. > > -Harry We have re-worked the patches and submitted v4. It incorporates changes to rename some of the stats. Thanks! Rasesh ^ permalink raw reply [flat|nested] 11+ messages in thread
* [dpdk-dev] [PATCH v3 4/4] bnx2x: Update PMD version to 1.0.1.1 2016-04-06 0:37 [dpdk-dev] [PATCH v3 1/4] bnx2x: Update documentation Rasesh Mody 2016-04-06 0:37 ` [dpdk-dev] [PATCH v3 2/4] bnx2x: Fix Tx Performance Rasesh Mody 2016-04-06 0:37 ` [dpdk-dev] [PATCH v3 3/4] bnx2x: Enhance stats get Rasesh Mody @ 2016-04-06 0:37 ` Rasesh Mody 2016-04-06 14:32 ` [dpdk-dev] [PATCH v3 1/4] bnx2x: Update documentation Bruce Richardson 3 siblings, 0 replies; 11+ messages in thread From: Rasesh Mody @ 2016-04-06 0:37 UTC (permalink / raw) To: thomas.monjalon; +Cc: dev, ameen.rahman, harish.patil, Rasesh Mody Signed-off-by: Rasesh Mody <rasesh.mody@qlogic.com> --- drivers/net/bnx2x/bnx2x.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/net/bnx2x/bnx2x.c b/drivers/net/bnx2x/bnx2x.c index 149fdef..dcd21f8 100644 --- a/drivers/net/bnx2x/bnx2x.c +++ b/drivers/net/bnx2x/bnx2x.c @@ -32,18 +32,20 @@ #define BNX2X_PMD_VER_PREFIX "BNX2X PMD" #define BNX2X_PMD_VERSION_MAJOR 1 #define BNX2X_PMD_VERSION_MINOR 0 -#define BNX2X_PMD_VERSION_PATCH 0 +#define BNX2X_PMD_VERSION_REVISION 1 +#define BNX2X_PMD_VERSION_PATCH 1 static inline const char * bnx2x_pmd_version(void) { static char version[32]; - snprintf(version, sizeof(version), "%s %s_%d.%d.%d", + snprintf(version, sizeof(version), "%s %s_%d.%d.%d.%d", BNX2X_PMD_VER_PREFIX, BNX2X_DRIVER_VERSION, BNX2X_PMD_VERSION_MAJOR, BNX2X_PMD_VERSION_MINOR, + BNX2X_PMD_VERSION_REVISION, BNX2X_PMD_VERSION_PATCH); return version; -- 1.7.10.3 ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [dpdk-dev] [PATCH v3 1/4] bnx2x: Update documentation 2016-04-06 0:37 [dpdk-dev] [PATCH v3 1/4] bnx2x: Update documentation Rasesh Mody ` (2 preceding siblings ...) 2016-04-06 0:37 ` [dpdk-dev] [PATCH v3 4/4] bnx2x: Update PMD version to 1.0.1.1 Rasesh Mody @ 2016-04-06 14:32 ` Bruce Richardson 2016-04-07 5:08 ` Rasesh Mody 2016-04-07 18:22 ` [dpdk-dev] [PATCH] " Rasesh Mody 3 siblings, 2 replies; 11+ messages in thread From: Bruce Richardson @ 2016-04-06 14:32 UTC (permalink / raw) To: Rasesh Mody; +Cc: thomas.monjalon, dev, ameen.rahman, harish.patil On Tue, Apr 05, 2016 at 05:37:05PM -0700, Rasesh Mody wrote: > Signed-off-by: Harish Patil <harish.patil@qlogic.com> > Signed-off-by: Rasesh Mody <rasesh.mody@qlogic.com> > --- > doc/guides/nics/bnx2x.rst | 1 + > doc/guides/nics/overview.rst | 22 +++++++++++----------- > 2 files changed, 12 insertions(+), 11 deletions(-) > Thanks for the patchset. Looking at it though, some of the changes are bug or documentation fixes which would be good to get into 16.04 e.g. patch 1, and the fix for the regular stats in patch 2, while other parts of the set, e.g. the TX optimisations, or the new xstats functionality, are larger changes. Given we are within days of a final release, the latter changes not really suitable for merging at this point. As per Thomas' guidance, the only code changes are meant to be bug fixes, in case a change introduces a last minute issue. Any chance you could split this patchset in two, with the doc and bug fixes alone in one set, and the feature changes in a separate set for 16.07? Thanks, /Bruce ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [dpdk-dev] [PATCH v3 1/4] bnx2x: Update documentation 2016-04-06 14:32 ` [dpdk-dev] [PATCH v3 1/4] bnx2x: Update documentation Bruce Richardson @ 2016-04-07 5:08 ` Rasesh Mody 2016-04-07 18:22 ` [dpdk-dev] [PATCH] " Rasesh Mody 1 sibling, 0 replies; 11+ messages in thread From: Rasesh Mody @ 2016-04-07 5:08 UTC (permalink / raw) To: Bruce Richardson; +Cc: thomas.monjalon, dev, Ameen Rahman, Harish Patil Hi Bruce, > From: Bruce Richardson [mailto:bruce.richardson@intel.com] > Sent: Wednesday, April 06, 2016 7:33 AM > > On Tue, Apr 05, 2016 at 05:37:05PM -0700, Rasesh Mody wrote: > > Signed-off-by: Harish Patil <harish.patil@qlogic.com> > > Signed-off-by: Rasesh Mody <rasesh.mody@qlogic.com> > > --- > > doc/guides/nics/bnx2x.rst | 1 + > > doc/guides/nics/overview.rst | 22 +++++++++++----------- > > 2 files changed, 12 insertions(+), 11 deletions(-) > > > Thanks for the patchset. Looking at it though, some of the changes are bug or > documentation fixes which would be good to get into 16.04 e.g. patch 1, and > the fix for the regular stats in patch 2, while other parts of the set, e.g. the TX > optimisations, or the new xstats functionality, are larger changes. Given we > are within days of a final release, the latter changes not really suitable for > merging at this point. > As per Thomas' guidance, the only code changes are meant to be bug fixes, > in case a change introduces a last minute issue. > > Any chance you could split this patchset in two, with the doc and bug fixes > alone in one set, and the feature changes in a separate set for 16.07? > > Thanks, > /Bruce Could you please apply only the patch 1 that takes care of the documentation for 16.04? Remaining patches we'll re-submit for 16.07. Thanks! Rasesh ^ permalink raw reply [flat|nested] 11+ messages in thread
* [dpdk-dev] [PATCH] bnx2x: Update documentation 2016-04-06 14:32 ` [dpdk-dev] [PATCH v3 1/4] bnx2x: Update documentation Bruce Richardson 2016-04-07 5:08 ` Rasesh Mody @ 2016-04-07 18:22 ` Rasesh Mody 2016-04-07 21:13 ` Thomas Monjalon 1 sibling, 1 reply; 11+ messages in thread From: Rasesh Mody @ 2016-04-07 18:22 UTC (permalink / raw) To: bruce.richardson; +Cc: dev, ameen.rahman, harish.patil, Rasesh Mody Please apply the documentation patch for 16.04. Signed-off-by: Rasesh Mody <rasesh.mody@qlogic.com> --- doc/guides/nics/bnx2x.rst | 1 + doc/guides/nics/overview.rst | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/doc/guides/nics/bnx2x.rst b/doc/guides/nics/bnx2x.rst index ed0e5e5..df8fb47 100644 --- a/doc/guides/nics/bnx2x.rst +++ b/doc/guides/nics/bnx2x.rst @@ -60,6 +60,7 @@ The features not yet supported include: - LRO/TSO offload - Checksum offload - SR-IOV PF +- Rx TX scatter gather Co-existence considerations --------------------------- diff --git a/doc/guides/nics/overview.rst b/doc/guides/nics/overview.rst index 4b1f936..985fa58 100644 --- a/doc/guides/nics/overview.rst +++ b/doc/guides/nics/overview.rst @@ -87,8 +87,8 @@ Most of these differences are summarized below. c c c c c c c ==================== = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = speed capabilities - link status X X X X X X X X X X X X X X X X - link status event X X X X X X X X X + link status X X X X X X X X X X X X X X X X X X + link status event X X X X X X X X X X X queue status event X Rx interrupt X X X X X X X X X X X X X X X queue start/stop X X X X X X X X X X X X X X X X X X @@ -97,15 +97,15 @@ Most of these differences are summarized below. scattered Rx X X X X X X X X X X X X X X X X X X X X X LRO X X X X TSO X X X X X X X X X X X X X X X X - promiscuous mode X X X X X X X X X X X X X X X X X X + promiscuous mode X X X X X X X X X X X X X X X X X X X X allmulticast mode X X X X X X X X X X X X X X X X X X X - unicast MAC filter X X X X X X X X X X X X X X X X X X - multicast MAC filter X X X X X X X X X X X + unicast MAC filter X X X X X X X X X X X X X X X X X X X X + multicast MAC filter X X X X X X X X X X X X X RSS hash X X X X X X X X X X X X X X X X X X RSS key update X X X X X X X X X X X X X X X RSS reta update X X X X X X X X X X X X X X X VMDq X X X X X X X - SR-IOV X X X X X X X X + SR-IOV X X X X X X X X X DCB X X X X X VLAN filter X X X X X X X X X X X X X X X X X X ethertype filter X X X X X @@ -127,14 +127,14 @@ Most of these differences are summarized below. inner L4 checksum X X X X X X packet type parsing X X X X X X X X X X X X X X timesync X X X X X - basic stats X X X X X X X X X X X X X X X X X X X X X X X X + basic stats X X X X X X X X X X X X X X X X X X X X X X X X X X extended stats X X X X X X X X X X X X X X X X X stats per queue X X X X X X X X X X X X EEPROM dump X X X registers dump X X X X X X multiprocess aware X X X X X X X X X X X X X X BSD nic_uio X X X X X X X X X X X X X X X X X X X - Linux UIO X X X X X X X X X X X X X X X X X X X X + Linux UIO X X X X X X X X X X X X X X X X X X X X X X Linux VFIO X X X X X X X X X X X X X X X X X X X other kdrv X X X ARMv7 X X @@ -142,8 +142,8 @@ Most of these differences are summarized below. Power8 X X TILE-Gx x86-32 X X X X X X X X X X X X X X X X X X X X X X X - x86-64 X X X X X X X X X X X X X X X X X X X X X X X X - usage doc X X X X X X + x86-64 X X X X X X X X X X X X X X X X X X X X X X X X X X + usage doc X X X X X X X X design doc perf doc ==================== = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = -- 1.7.10.3 ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [dpdk-dev] [PATCH] bnx2x: Update documentation 2016-04-07 18:22 ` [dpdk-dev] [PATCH] " Rasesh Mody @ 2016-04-07 21:13 ` Thomas Monjalon 0 siblings, 0 replies; 11+ messages in thread From: Thomas Monjalon @ 2016-04-07 21:13 UTC (permalink / raw) To: Rasesh Mody; +Cc: dev, bruce.richardson, ameen.rahman, harish.patil 2016-04-07 11:22, Rasesh Mody: > Please apply the documentation patch for 16.04. > > Signed-off-by: Rasesh Mody <rasesh.mody@qlogic.com> Applied, thanks ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2016-05-04 5:41 UTC | newest] Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2016-04-06 0:37 [dpdk-dev] [PATCH v3 1/4] bnx2x: Update documentation Rasesh Mody 2016-04-06 0:37 ` [dpdk-dev] [PATCH v3 2/4] bnx2x: Fix Tx Performance Rasesh Mody 2016-04-06 0:37 ` [dpdk-dev] [PATCH v3 3/4] bnx2x: Enhance stats get Rasesh Mody 2016-04-06 14:32 ` Van Haaren, Harry 2016-04-07 5:10 ` Rasesh Mody 2016-05-04 5:41 ` Rasesh Mody 2016-04-06 0:37 ` [dpdk-dev] [PATCH v3 4/4] bnx2x: Update PMD version to 1.0.1.1 Rasesh Mody 2016-04-06 14:32 ` [dpdk-dev] [PATCH v3 1/4] bnx2x: Update documentation Bruce Richardson 2016-04-07 5:08 ` Rasesh Mody 2016-04-07 18:22 ` [dpdk-dev] [PATCH] " Rasesh Mody 2016-04-07 21:13 ` Thomas Monjalon
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).