dd22740cc2
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> |
||
---|---|---|
.. | ||
acl | ||
bbdev | ||
bitratestats | ||
bpf | ||
cfgfile | ||
cmdline | ||
compressdev | ||
cryptodev | ||
distributor | ||
dmadev | ||
eal | ||
efd | ||
ethdev | ||
eventdev | ||
fib | ||
flow_classify | ||
graph | ||
gro | ||
gso | ||
hash | ||
ip_frag | ||
ipsec | ||
jobstats | ||
kni | ||
kvargs | ||
latencystats | ||
lpm | ||
mbuf | ||
member | ||
mempool | ||
meter | ||
metrics | ||
net | ||
node | ||
pcapng | ||
pci | ||
pdump | ||
pipeline | ||
port | ||
power | ||
rawdev | ||
rcu | ||
regexdev | ||
reorder | ||
rib | ||
ring | ||
sched | ||
security | ||
stack | ||
table | ||
telemetry | ||
timer | ||
vhost | ||
meson.build |