From: Pavan Nikhilesh <pbhagavat...@marvell.com> Update Linux core isolation guide to include isolation from timers, RCU processing and IRQs.
Signed-off-by: Pavan Nikhilesh <pbhagavat...@marvell.com> Acked-by: Jerin Jacob <jer...@marvell.com> --- v4 Changes: - Give names to Links to make them clickable. (Thomas) - Fix link formatting. v3 Changes: - Add additional information links for Cgroups. v2 Changes: - Add references to the parameters used. - Add note about Linux cgroups. doc/guides/linux_gsg/enable_func.rst | 32 +++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/doc/guides/linux_gsg/enable_func.rst b/doc/guides/linux_gsg/enable_func.rst index b15bfb2f9f..b544d2e50b 100644 --- a/doc/guides/linux_gsg/enable_func.rst +++ b/doc/guides/linux_gsg/enable_func.rst @@ -126,16 +126,38 @@ Using Linux Core Isolation to Reduce Context Switches ----------------------------------------------------- While the threads used by a DPDK application are pinned to logical cores on the system, -it is possible for the Linux scheduler to run other tasks on those cores also. -To help prevent additional workloads from running on those cores, -it is possible to use the ``isolcpus`` Linux kernel parameter to isolate them from the general Linux scheduler. +it is possible for the Linux scheduler to run other tasks on those cores. +To help prevent additional workloads, timers, rcu processing and IRQs from running on those cores, it is possible to use +the Linux kernel parameters ``isolcpus``, ``nohz_full``, ``irqaffinity`` to isolate them from the general Linux scheduler tasks. -For example, if DPDK applications are to run on logical cores 2, 4 and 6, +For example, if a given CPU has 0-7 cores and DPDK applications are to run on logical cores 2, 4 and 6, the following should be added to the kernel parameter list: .. code-block:: console - isolcpus=2,4,6 + isolcpus=2,4,6 nohz_full=2,4,6 irqaffinity=0,1,3,5,7 + +.. Note:: + + | More detailed information about the above parameters can be found at: + | `NO_HZ <https://www.kernel.org/doc/html/latest/timers/no_hz.html>`_ + | `IRQs <https://www.kernel.org/doc/html/latest/core-api/irq/>`_ + | `Kernel parameters <https://www.kernel.org/doc/html/latest/admin-guide/kernel-parameters.html>`_ + + +For more fine grained control over resource management and performance tuning one can look +into ``Linux cgroups``. + +Cpusets using cgroups: + `CPUSETS <https://www.kernel.org/doc/html/latest/admin-guide/cgroup-v1/cpusets.html>`_ + +Systemd (CPUAffinity): + `CPUAffinity <https://www.freedesktop.org/software/systemd/man/systemd.exec.html>`_ + +Also, see: + | `CPUSET man pages <https://man7.org/linux/man-pages/man7/cpuset.7.html>`_ + | `CPU isolation example <https://www.suse.com/c/cpu-isolation-practical-example-part-5/>`_ + | `Systemd core isolation <https://www.rcannings.com/systemd-core-isolation/>`_ .. _High_Precision_Event_Timer: -- 2.25.1