Blob Blame History Raw
From 1ab378cc4a4372ca031bb765f656ab463b28af88 Mon Sep 17 00:00:00 2001
From: Luiz Capitulino <lcapitulino@redhat.com>
Date: Fri, 19 May 2017 15:10:19 -0400
Subject: [PATCH] realtime-virtual-guest: re-assign kernel thread priorities

From 63e5ebfe0c71c5e6d0613c4d8327b2a6f3fba7ba Mon Sep 17 00:00:00 2001
From: Luiz Capitulino <lcapitulino@redhat.com>
Date: Fri, 19 May 2017 14:42:06 -0400
Subject:

The realtime guest profile uses the RT kernel default priority
assignment for the ksoftird, rcuc, and ktimersoftd kernel threads,
which is:

    17  FF   2  [rcuc/1] *
    19  FF   1  [ktimersoftd/1] *
    20  TS   -  [ksoftirqd/1] *

This doesn't allow running a PMD thread with fifo:1 in the
guest, since this will starve ktimersoftd and ksoftirqd if
those threads ever become runnable.

The solution is to use the same priority assigment we use
in the host where we've been running PMD threads with
fifo:1 priorities without problems. This assignment is:

   151  FF   4  [rcuc/15] *
   153  FF   3  [ktimersoftd/15] *
   154  FF   2  [ksoftirqd/15] *

This patch just copies the [scheduler] section from the
host profile.

Resolves: rhbz#1452357

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
 profiles/realtime-virtual-guest/tuned.conf | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/profiles/realtime-virtual-guest/tuned.conf b/profiles/realtime-virtual-guest/tuned.conf
index 71085a8..0992fbd 100644
--- a/profiles/realtime-virtual-guest/tuned.conf
+++ b/profiles/realtime-virtual-guest/tuned.conf
@@ -20,6 +20,20 @@ isolated_cores_present_expanded=${f:cpulist_present:${isolated_cores}}
 # Fail if isolated_cores contains CPUs which are not present
 assert2=${f:assertion:isolated_cores contains present CPU(s):${isolated_cores_expanded}:${isolated_cores_present_expanded}}
 
+[scheduler]
+# group.group_name=rule_priority:scheduler_policy:scheduler_priority:core_affinity_in_hex:process_name_regex
+# for i in `pgrep ksoftirqd` ; do grep Cpus_allowed_list /proc/$i/status ; done
+group.ksoftirqd=0:f:2:*:ksoftirqd.*
+
+# for i in `pgrep rcuc` ; do grep Cpus_allowed_list /proc/$i/status ; done
+group.rcuc=0:f:4:*:rcuc.*
+
+# for i in `pgrep rcub` ; do grep Cpus_allowed_list /proc/$i/status ; done
+group.rcub=0:f:4:*:rcub.*
+
+# for i in `pgrep ktimersoftd` ; do grep Cpus_allowed_list /proc/$i/status ; done
+group.ktimersoftd=0:f:3:*:ktimersoftd.*
+
 [script]
 script=${i:PROFILE_DIR}/script.sh