aboutsummaryrefslogtreecommitdiffstats
path: root/doc/guides/prog_guide/power_man.rst
diff options
context:
space:
mode:
authorC.J. Collier <cjcollier@linuxfoundation.org>2016-06-14 07:50:17 -0700
committerC.J. Collier <cjcollier@linuxfoundation.org>2016-06-14 12:17:54 -0700
commit97f17497d162afdb82c8704bf097f0fee3724b2e (patch)
tree1c6269614c0c15ffef8451c58ae8f8b30a1bc804 /doc/guides/prog_guide/power_man.rst
parente04be89c2409570e0055b2cda60bd11395bb93b0 (diff)
Imported Upstream version 16.04
Change-Id: I77eadcd8538a9122e4773cbe55b24033dc451757 Signed-off-by: C.J. Collier <cjcollier@linuxfoundation.org>
Diffstat (limited to 'doc/guides/prog_guide/power_man.rst')
-rw-r--r--doc/guides/prog_guide/power_man.rst121
1 files changed, 121 insertions, 0 deletions
diff --git a/doc/guides/prog_guide/power_man.rst b/doc/guides/prog_guide/power_man.rst
new file mode 100644
index 00000000..114d0b1c
--- /dev/null
+++ b/doc/guides/prog_guide/power_man.rst
@@ -0,0 +1,121 @@
+.. BSD LICENSE
+ Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in
+ the documentation and/or other materials provided with the
+ distribution.
+ * Neither the name of Intel Corporation nor the names of its
+ contributors may be used to endorse or promote products derived
+ from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Power Management
+================
+
+The DPDK Power Management feature allows users space applications to save power
+by dynamically adjusting CPU frequency or entering into different C-States.
+
+* Adjusting the CPU frequency dynamically according to the utilization of RX queue.
+
+* Entering into different deeper C-States according to the adaptive algorithms to speculate
+ brief periods of time suspending the application if no packets are received.
+
+The interfaces for adjusting the operating CPU frequency are in the power management library.
+C-State control is implemented in applications according to the different use cases.
+
+CPU Frequency Scaling
+---------------------
+
+The Linux kernel provides a cpufreq module for CPU frequency scaling for each lcore.
+For example, for cpuX, /sys/devices/system/cpu/cpuX/cpufreq/ has the following sys files for frequency scaling:
+
+* affected_cpus
+
+* bios_limit
+
+* cpuinfo_cur_freq
+
+* cpuinfo_max_freq
+
+* cpuinfo_min_freq
+
+* cpuinfo_transition_latency
+
+* related_cpus
+
+* scaling_available_frequencies
+
+* scaling_available_governors
+
+* scaling_cur_freq
+
+* scaling_driver
+
+* scaling_governor
+
+* scaling_max_freq
+
+* scaling_min_freq
+
+* scaling_setspeed
+
+In the DPDK, scaling_governor is configured in user space.
+Then, a user space application can prompt the kernel by writing scaling_setspeed to adjust the CPU frequency
+according to the strategies defined by the user space application.
+
+Core-load Throttling through C-States
+-------------------------------------
+
+Core state can be altered by speculative sleeps whenever the specified lcore has nothing to do.
+In the DPDK, if no packet is received after polling,
+speculative sleeps can be triggered according the strategies defined by the user space application.
+
+API Overview of the Power Library
+---------------------------------
+
+The main methods exported by power library are for CPU frequency scaling and include the following:
+
+* **Freq up**: Prompt the kernel to scale up the frequency of the specific lcore.
+
+* **Freq down**: Prompt the kernel to scale down the frequency of the specific lcore.
+
+* **Freq max**: Prompt the kernel to scale up the frequency of the specific lcore to the maximum.
+
+* **Freq min**: Prompt the kernel to scale down the frequency of the specific lcore to the minimum.
+
+* **Get available freqs**: Read the available frequencies of the specific lcore from the sys file.
+
+* **Freq get**: Get the current frequency of the specific lcore.
+
+* **Freq set**: Prompt the kernel to set the frequency for the specific lcore.
+
+User Cases
+----------
+
+The power management mechanism is used to save power when performing L3 forwarding.
+
+References
+----------
+
+* l3fwd-power: The sample application in DPDK that performs L3 forwarding with power management.
+
+* The "L3 Forwarding with Power Management Sample Application" chapter in the *DPDK Sample Application's User Guide*.