numam-dpdk/lib
Xueming Li dd22740cc2 ethdev: introduce shared Rx queue
In current DPDK framework, each Rx queue is pre-loaded with mbufs to
save incoming packets. For some PMDs, when number of representors scale
out in a switch domain, the memory consumption became significant.
Polling all ports also leads to high cache miss, high latency and low
throughput.

This patch introduces shared Rx queue. Ports in same Rx domain and
switch domain could share Rx queue set by specifying non-zero sharing
group in Rx queue configuration.

Shared Rx queue is identified by share_rxq field of Rx queue
configuration. Port A RxQ X can share RxQ with Port B RxQ Y by using
same shared Rx queue ID.

No special API is defined to receive packets from shared Rx queue.
Polling any member port of a shared Rx queue receives packets of that
queue for all member ports, port_id is identified by mbuf->port. PMD is
responsible to resolve shared Rx queue from device and queue data.

Shared Rx queue must be polled in same thread or core, polling a queue
ID of any member port is essentially same.

Multiple share groups are supported. PMD should support mixed
configuration by allowing multiple share groups and non-shared Rx queue
on one port.

Example grouping and polling model to reflect service priority:
 Group1, 2 shared Rx queues per port: PF, rep0, rep1
 Group2, 1 shared Rx queue per port: rep2, rep3, ... rep127
 Core0: poll PF queue0
 Core1: poll PF queue1
 Core2: poll rep2 queue0

PMD advertise shared Rx queue capability via RTE_ETH_DEV_CAPA_RXQ_SHARE.

PMD is responsible for shared Rx queue consistency checks to avoid
member port's configuration contradict each other.

Signed-off-by: Xueming Li <xuemingl@nvidia.com>
Reviewed-by: Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Acked-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
2021-10-22 00:08:50 +02:00
..
acl build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
bbdev build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
bitratestats bitrate: promote free function to stable 2021-10-01 15:31:47 +02:00
bpf build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
cfgfile version: 21.11-rc0 2021-08-17 08:37:52 +02:00
cmdline cmdline: free on exit 2021-10-22 23:32:00 +02:00
compressdev build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
cryptodev cryptodev: fix multi-segment raw vector processing 2021-10-17 19:32:13 +02:00
distributor build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
dmadev dmadev: remove symbol versioning for inline helpers 2021-10-22 22:40:59 +02:00
eal vfio: allow partially unmapping adjacent memory 2021-10-21 14:24:21 +02:00
efd build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
ethdev ethdev: introduce shared Rx queue 2021-10-22 00:08:50 +02:00
eventdev build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
fib build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
flow_classify build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
graph build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
gro net: rename Ethernet header fields 2021-10-08 14:58:11 +02:00
gso version: 21.11-rc0 2021-08-17 08:37:52 +02:00
hash hash: promote some functions to stable 2021-10-21 09:46:47 +02:00
ip_frag build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
ipsec build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
jobstats build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
kni build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
kvargs kvargs: fix comments style 2021-09-30 17:38:13 +02:00
latencystats version: 21.11-rc0 2021-08-17 08:37:52 +02:00
lpm build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
mbuf mbuf: fix reset on mbuf free 2021-10-21 11:18:54 +02:00
member build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
mempool mempool: add telemetry endpoint 2021-10-22 22:40:59 +02:00
meter version: 21.11-rc0 2021-08-17 08:37:52 +02:00
metrics ethdev: hide internal structures 2021-10-13 22:14:59 +02:00
net ethdev: support L2TPv2 and PPP procotol 2021-10-21 14:15:59 +02:00
node build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
pcapng build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
pci eal: remove sys/queue.h from public headers 2021-10-01 13:09:43 +02:00
pdump build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
pipeline build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
port build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
power build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
rawdev build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
rcu lib: remove C++ include guard from private headers 2021-09-22 22:00:17 +02:00
regexdev build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
reorder build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
rib build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
ring ring: fix name size in ring structure 2021-10-21 09:32:04 +02:00
sched build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
security security: add reserved bit fields 2021-10-18 20:12:19 +02:00
stack stack: remove unneeded atomic header include 2021-10-19 17:15:10 +02:00
table build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00
telemetry telemetry: fix socket path conflicts for in-memory mode 2021-10-14 20:31:10 +02:00
timer version: 21.11-rc0 2021-08-17 08:37:52 +02:00
vhost vhost: enable IOMMU for async vhost 2021-10-21 14:24:21 +02:00
meson.build build/windows: remove separate list of libs 2021-10-22 22:40:59 +02:00