numam-dpdk/lib
Anatoly Burakov 5dff9a72b0 power: support callbacks for multiple Rx queues
Currently, there is a hard limitation on the PMD power management
support that only allows it to support a single queue per lcore. This is
not ideal as most DPDK use cases will poll multiple queues per core.

The PMD power management mechanism relies on ethdev Rx callbacks, so it
is very difficult to implement such support because callbacks are
effectively stateless and have no visibility into what the other ethdev
devices are doing. This places limitations on what we can do within the
framework of Rx callbacks, but the basics of this implementation are as
follows:

- Replace per-queue structures with per-lcore ones, so that any device
  polled from the same lcore can share data
- Any queue that is going to be polled from a specific lcore has to be
  added to the list of queues to poll, so that the callback is aware of
  other queues being polled by the same lcore
- Both the empty poll counter and the actual power saving mechanism is
  shared between all queues polled on a particular lcore, and is only
  activated when all queues in the list were polled and were determined
  to have no traffic.
- The limitation on UMWAIT-based polling is not removed because UMWAIT
  is incapable of monitoring more than one address.

Also, while we're at it, update and improve the docs.

Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
Tested-by: David Hunt <david.hunt@intel.com>
2021-07-09 21:13:13 +02:00
..
acl acl: fix build with GCC 6.3 2021-06-17 09:37:11 +02:00
bbdev log: register with standardized names 2021-05-11 15:17:55 +02:00
bitratestats lib: remove librte_ prefix from directory names 2021-04-21 14:04:09 +02:00
bpf log: register with standardized names 2021-05-11 15:17:55 +02:00
cfgfile log: register with standardized names 2021-05-11 15:17:55 +02:00
cmdline lib: remove librte_ prefix from directory names 2021-04-21 14:04:09 +02:00
compressdev log: register with standardized names 2021-05-11 15:17:55 +02:00
cryptodev lib: remove librte_ prefix from directory names 2021-04-21 14:04:09 +02:00
distributor lib: remove librte_ prefix from directory names 2021-04-21 14:04:09 +02:00
eal eal: add power monitor for multiple events 2021-07-09 21:13:13 +02:00
efd lib: remove librte_ prefix from directory names 2021-04-21 14:04:09 +02:00
ethdev ethdev: add dev configured flag 2021-07-08 13:05:55 +02:00
eventdev log: register with standardized names 2021-05-11 15:17:55 +02:00
fib lib: remove librte_ prefix from directory names 2021-04-21 14:04:09 +02:00
flow_classify flow_classify: fix leaking rules on delete 2021-06-24 15:34:45 +02:00
graph eal: save error in string copy 2021-07-05 15:11:30 +02:00
gro lib: remove librte_ prefix from directory names 2021-04-21 14:04:09 +02:00
gso lib: remove librte_ prefix from directory names 2021-04-21 14:04:09 +02:00
hash hash: fix tuple adjustment 2021-05-10 15:31:42 +02:00
ip_frag ip_frag: fix fragmenting IPv4 packet with header option 2021-04-21 16:50:46 +02:00
ipsec lib: remove librte_ prefix from directory names 2021-04-21 14:04:09 +02:00
jobstats lib: remove librte_ prefix from directory names 2021-04-21 14:04:09 +02:00
kni kni: update link only on change 2021-07-09 17:22:42 +02:00
kvargs lib: remove librte_ prefix from directory names 2021-04-21 14:04:09 +02:00
latencystats lib: remove librte_ prefix from directory names 2021-04-21 14:04:09 +02:00
lpm lib: remove librte_ prefix from directory names 2021-04-21 14:04:09 +02:00
mbuf mbuf: clarify usage of packet pool initializers 2021-05-04 22:41:32 +02:00
member log: register with standardized names 2021-05-11 15:17:55 +02:00
mempool mempool: distinguish cache and pool debug counters 2021-05-04 09:44:55 +02:00
meter lib: remove librte_ prefix from directory names 2021-04-21 14:04:09 +02:00
metrics log: register with standardized names 2021-05-11 15:17:55 +02:00
net net: introduce functions to verify L4 checksums 2021-07-02 19:03:03 +02:00
node log: register with standardized names 2021-05-11 15:17:55 +02:00
pci bus/pci: configure PCI bus master 2021-06-04 09:38:08 +02:00
pdump log: register with standardized names 2021-05-11 15:17:55 +02:00
pipeline lib: remove librte_ prefix from directory names 2021-04-21 14:04:09 +02:00
port lib: remove librte_ prefix from directory names 2021-04-21 14:04:09 +02:00
power power: support callbacks for multiple Rx queues 2021-07-09 21:13:13 +02:00
rawdev log: register with standardized names 2021-05-11 15:17:55 +02:00
rcu log: register with standardized names 2021-05-11 15:17:55 +02:00
regexdev lib: remove librte_ prefix from directory names 2021-04-21 14:04:09 +02:00
reorder lib: remove librte_ prefix from directory names 2021-04-21 14:04:09 +02:00
rib rib: fix max depth IPv6 lookup 2021-06-24 15:34:45 +02:00
ring lib: remove librte_ prefix from directory names 2021-04-21 14:04:09 +02:00
sched sched: fix traffic class oversubscription parameter 2021-04-21 16:57:18 +02:00
security lib: remove librte_ prefix from directory names 2021-04-21 14:04:09 +02:00
stack log: register with standardized names 2021-05-11 15:17:55 +02:00
table build: fix formatting of Meson lists 2021-05-04 15:01:47 +02:00
telemetry telemetry: add extra log message on socket bind failure 2021-07-07 15:23:53 +02:00
timer lib: remove librte_ prefix from directory names 2021-04-21 14:04:09 +02:00
vhost vhost: use DPDK allocations for in-flight data 2021-06-30 13:32:38 +02:00
meson.build lib: build testpmd dependencies on Windows 2021-07-02 19:03:03 +02:00