``tx_offload_capa,tx_queue_offload_capa:DEV_TX_OFFLOAD_OUTER_UDP_CKSUM``.
+.. _nic_features_shared_rx_queue:
+
+Shared Rx queue
+---------------
+
+Supports shared Rx queue for ports in same Rx domain of a switch domain.
+
+* **[uses] rte_eth_dev_info**: ``dev_capa:RTE_ETH_DEV_CAPA_RXQ_SHARE``.
+* **[uses] rte_eth_dev_infoļ¼rte_eth_switch_info**: ``rx_domain``, ``domain_id``.
+* **[uses] rte_eth_rxconf**: ``share_group``, ``share_qid``.
+* **[provides] mbuf**: ``mbuf.port``.
+
+
.. _nic_features_packet_type_parsing:
Packet type parsing
Queue start/stop =
Runtime Rx queue setup =
Runtime Tx queue setup =
+Shared Rx queue =
Burst mode info =
Power mgmt address monitor =
MTU update =
.. [1] `Ethernet switch device driver model (switchdev)
<https://www.kernel.org/doc/Documentation/networking/switchdev.txt>`_
+- For some PMDs, memory usage of representors is huge when number of
+ representor grows, mbufs are allocated for each descriptor of Rx queue.
+ Polling large number of ports brings more CPU load, cache miss and
+ latency. Shared Rx queue can be used to share Rx queue between PF and
+ representors among same Rx domain. ``RTE_ETH_DEV_CAPA_RXQ_SHARE`` in
+ device info is used to indicate the capability. Setting non-zero share
+ group in Rx queue configuration to enable share, share_qid is used to
+ identify the shared Rx queue in group. Polling any member port can
+ receive packets of all member ports in the group, port ID is saved in
+ ``mbuf.port``.
+
Basic SR-IOV
------------
A new API, ``rte_flow_pick_transfer_proxy()``, was added.
+* **Added ethdev shared Rx queue support.**
+
+ * Added new device capability flag and Rx domain field to switch info.
+ * Added share group and share queue ID to Rx queue configuration.
+ * Added testpmd support and dedicate forwarding engine.
+
* **Updated af_packet ethdev driver.**
* Default VLAN strip behavior was changed. VLAN tag won't be stripped
return -EINVAL;
}
+ if (local_conf.share_group > 0 &&
+ (dev_info.dev_capa & RTE_ETH_DEV_CAPA_RXQ_SHARE) == 0) {
+ RTE_ETHDEV_LOG(ERR,
+ "Ethdev port_id=%d rx_queue_id=%d, enabled share_group=%hu while device doesn't support Rx queue share\n",
+ port_id, rx_queue_id, local_conf.share_group);
+ return -EINVAL;
+ }
+
/*
* If LRO is enabled, check that the maximum aggregated packet
* size is supported by the configured device.
uint8_t rx_drop_en; /**< Drop packets if no descriptors are available. */
uint8_t rx_deferred_start; /**< Do not start queue with rte_eth_dev_start(). */
uint16_t rx_nseg; /**< Number of descriptions in rx_seg array. */
+ /**
+ * Share group index in Rx domain and switch domain.
+ * Non-zero value to enable Rx queue share, zero value disable share.
+ * PMD is responsible for Rx queue consistency checks to avoid member
+ * port's configuration contradict to each other.
+ */
+ uint16_t share_group;
+ uint16_t share_qid; /**< Shared Rx queue ID in group */
/**
* Per-queue Rx offloads to be set using DEV_RX_OFFLOAD_* flags.
* Only offloads set on rx_queue_offload_capa or rx_offload_capa
#define RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP 0x00000001
/** Device supports Tx queue setup after device started. */
#define RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP 0x00000002
+/**
+ * Device supports shared Rx queue among ports within Rx domain and
+ * switch domain. Mbufs are consumed by shared Rx queue instead of
+ * each queue. Multiple groups are supported by share_group of Rx
+ * queue configuration. Shared Rx queue is identified by PMD using
+ * share_qid of Rx queue configuration. Polling any port in the group
+ * receive packets of all member ports, source port identified by
+ * mbuf->port field.
+ */
+#define RTE_ETH_DEV_CAPA_RXQ_SHARE RTE_BIT64(2)
/**@}*/
/*
* port identifier to that physical interconnect/switch
*/
uint16_t port_id;
+ /**
+ * Shared Rx queue sub-domain boundary. Only ports in same Rx domain
+ * and switch domain can share Rx queue. Valid only if device advertised
+ * RTE_ETH_DEV_CAPA_RXQ_SHARE capability.
+ */
+ uint16_t rx_domain;
};
/**