power: add ethdev power management
authorLiang Ma <liang.j.ma@intel.com>
Fri, 22 Jan 2021 17:12:16 +0000 (17:12 +0000)
committerThomas Monjalon <thomas@monjalon.net>
Fri, 29 Jan 2021 14:29:48 +0000 (15:29 +0100)
commit682a645438c548601446e67dbd7713c3bea61045
tree6af6df12d01302bdb723ce7d981372302c67aec3
parentabc0cade20f09f12f7c57c238306e8d730a10bb7
power: add ethdev power management

Add a simple on/off switch that will enable saving power when no
packets are arriving. It is based on counting the number of empty
polls and, when the number reaches a certain threshold, entering an
architecture-defined optimized power state that will either wait
until a TSC timestamp expires, or when packets arrive.

This API mandates a core-to-single-queue mapping (that is, multiple
queued per device are supported, but they have to be polled on different
cores).

This design is using PMD RX callbacks.

1. UMWAIT/UMONITOR:

   When a certain threshold of empty polls is reached, the core will go
   into a power optimized sleep while waiting on an address of next RX
   descriptor to be written to.

2. TPAUSE/Pause instruction

   This method uses the pause (or TPAUSE, if available) instruction to
   avoid busy polling.

3. Frequency scaling
   Reuse existing DPDK power library to scale up/down core frequency
   depending on traffic volume.

Signed-off-by: Liang Ma <liang.j.ma@intel.com>
Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com>
Acked-by: David Hunt <david.hunt@intel.com>
doc/guides/prog_guide/power_man.rst
doc/guides/rel_notes/release_21_02.rst
lib/librte_power/meson.build
lib/librte_power/rte_power_pmd_mgmt.c [new file with mode: 0644]
lib/librte_power/rte_power_pmd_mgmt.h [new file with mode: 0644]
lib/librte_power/version.map