import tuned-2.15.0-2.el8
This commit is contained in:
parent
e23e65f800
commit
619ca6c376
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
|||||||
SOURCES/tuned-2.14.0.tar.gz
|
SOURCES/tuned-2.15.0.tar.gz
|
||||||
|
@ -1 +1 @@
|
|||||||
53140aba44d956fac19c37c2c0052835c1fdd7e9 SOURCES/tuned-2.14.0.tar.gz
|
bfb3def0b687bbdae2b3e191d2fda46b3ffca1c0 SOURCES/tuned-2.15.0.tar.gz
|
||||||
|
@ -1,30 +0,0 @@
|
|||||||
From f511ad5d48f4f2ae3b2616463bc3a17bae5bdb90 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Jaroslav=20=C5=A0karvada?= <jskarvad@redhat.com>
|
|
||||||
Date: Tue, 30 Jun 2020 15:39:18 +0200
|
|
||||||
Subject: [PATCH] throughput-performance: fix performance regression on AMD
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
It turned out that disablement of the numa_balancing could result in
|
|
||||||
upto 20% performance drop on some loads.
|
|
||||||
|
|
||||||
Related: rhbz#1746957
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Škarvada <jskarvad@redhat.com>
|
|
||||||
---
|
|
||||||
profiles/throughput-performance/tuned.conf | 1 -
|
|
||||||
1 file changed, 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/profiles/throughput-performance/tuned.conf b/profiles/throughput-performance/tuned.conf
|
|
||||||
index f1a6f1a..3cc6fd1 100644
|
|
||||||
--- a/profiles/throughput-performance/tuned.conf
|
|
||||||
+++ b/profiles/throughput-performance/tuned.conf
|
|
||||||
@@ -85,4 +85,3 @@ type=sysctl
|
|
||||||
uname_regex=x86_64
|
|
||||||
cpuinfo_regex=${amd_cpuinfo_regex}
|
|
||||||
kernel.sched_migration_cost_ns=5000000
|
|
||||||
-kernel.numa_balancing=0
|
|
||||||
--
|
|
||||||
2.25.4
|
|
||||||
|
|
@ -1,95 +0,0 @@
|
|||||||
From a0fd433e874a0fbdd8c43ae42d25969550311b9c Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Jaroslav=20=C5=A0karvada?= <jskarvad@redhat.com>
|
|
||||||
Date: Sun, 29 Nov 2020 21:34:15 +0100
|
|
||||||
Subject: [PATCH] bootloader: fixed cmdline duplication with BLS and
|
|
||||||
grub2-mkconfig
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
After application of this patch in order to get rid of the duplicated
|
|
||||||
kernel command line options (which was duplicated due to the usage of
|
|
||||||
the grub2-mkconfig), the grub2-mkconfig needs to be run again.
|
|
||||||
We do not run it automatically in the spec file %post not to break
|
|
||||||
users not using grub2-mkconfig.
|
|
||||||
|
|
||||||
This fix expects that user has not modified the line containing the
|
|
||||||
GRUB_CMDLINE_LINUX_DEFAULT option and the $tuned_params in the
|
|
||||||
/etc/default/grub file. If user modified this line, the option
|
|
||||||
duplication may still occure. In such case, please remove the
|
|
||||||
$tuned_params from the /etc/default/grub by hand.
|
|
||||||
|
|
||||||
Resolves: rhbz#1777874
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Škarvada <jskarvad@redhat.com>
|
|
||||||
---
|
|
||||||
tuned/plugins/plugin_bootloader.py | 34 +++++++++++++++++++++++++++++-
|
|
||||||
1 file changed, 33 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/tuned/plugins/plugin_bootloader.py b/tuned/plugins/plugin_bootloader.py
|
|
||||||
index 8ca5b8a1..416df7d6 100644
|
|
||||||
--- a/tuned/plugins/plugin_bootloader.py
|
|
||||||
+++ b/tuned/plugins/plugin_bootloader.py
|
|
||||||
@@ -35,6 +35,7 @@ def _instance_init(self, instance):
|
|
||||||
self._cmdline_val = ""
|
|
||||||
self._initrd_val = ""
|
|
||||||
self._grub2_cfg_file_names = self._get_grub2_cfg_files()
|
|
||||||
+ self._bls = self._bls_enabled()
|
|
||||||
|
|
||||||
def _instance_cleanup(self, instance):
|
|
||||||
pass
|
|
||||||
@@ -88,6 +89,15 @@ def _get_grub2_cfg_files(self):
|
|
||||||
cfg_files.append(f)
|
|
||||||
return cfg_files
|
|
||||||
|
|
||||||
+ def _bls_enabled(self):
|
|
||||||
+ grub2_default_env = self._cmd.read_file(consts.GRUB2_DEFAULT_ENV_FILE)
|
|
||||||
+ if len(grub2_default_env) <= 0:
|
|
||||||
+ log.info("cannot read '%s'" % consts.GRUB2_DEFAULT_ENV_FILE)
|
|
||||||
+ return False
|
|
||||||
+
|
|
||||||
+ return re.search(r"^\s*GRUB_ENABLE_BLSCFG\s*=\s*\"?\s*[tT][rR][uU][eE]\s*\"?\s*$", grub2_default_env,
|
|
||||||
+ flags = re.MULTILINE) is not None
|
|
||||||
+
|
|
||||||
def _patch_bootcmdline(self, d):
|
|
||||||
return self._cmd.add_modify_option_in_file(consts.BOOT_CMDLINE_FILE, d)
|
|
||||||
|
|
||||||
@@ -154,6 +164,25 @@ def _grub2_default_env_patch(self):
|
|
||||||
self._cmd.write_to_file(consts.GRUB2_DEFAULT_ENV_FILE, grub2_default_env)
|
|
||||||
return True
|
|
||||||
|
|
||||||
+ def _grub2_default_env_unpatch(self):
|
|
||||||
+ grub2_default_env = self._cmd.read_file(consts.GRUB2_DEFAULT_ENV_FILE)
|
|
||||||
+ if len(grub2_default_env) <= 0:
|
|
||||||
+ log.info("cannot read '%s'" % consts.GRUB2_DEFAULT_ENV_FILE)
|
|
||||||
+ return False
|
|
||||||
+
|
|
||||||
+ write = False
|
|
||||||
+ if re.search(r"^GRUB_CMDLINE_LINUX_DEFAULT=\"\$\{GRUB_CMDLINE_LINUX_DEFAULT:\+\$GRUB_CMDLINE_LINUX_DEFAULT \}\\\$" +
|
|
||||||
+ consts.GRUB2_TUNED_VAR + "\"$", grub2_default_env, flags = re.MULTILINE):
|
|
||||||
+ write = True
|
|
||||||
+ cfg = re.sub(r"^GRUB_CMDLINE_LINUX_DEFAULT=\"\$\{GRUB_CMDLINE_LINUX_DEFAULT:\+\$GRUB_CMDLINE_LINUX_DEFAULT \}\\\$" +
|
|
||||||
+ consts.GRUB2_TUNED_VAR + "\"$\n", "", grub2_default_env, flags = re.MULTILINE)
|
|
||||||
+ if cfg[-1] != "\n":
|
|
||||||
+ cfg += "\n"
|
|
||||||
+ if write:
|
|
||||||
+ log.debug("unpatching '%s'" % consts.GRUB2_DEFAULT_ENV_FILE)
|
|
||||||
+ self._cmd.write_to_file(consts.GRUB2_DEFAULT_ENV_FILE, cfg)
|
|
||||||
+ return True
|
|
||||||
+
|
|
||||||
def _grub2_cfg_patch(self, d):
|
|
||||||
log.debug("patching grub.cfg")
|
|
||||||
if not self._grub2_cfg_file_names:
|
|
||||||
@@ -180,7 +209,10 @@ def _grub2_cfg_patch(self, d):
|
|
||||||
if patch_initial:
|
|
||||||
grub2_cfg_new = self._grub2_cfg_patch_initial(self._grub2_cfg_unpatch(grub2_cfg), d)
|
|
||||||
self._cmd.write_to_file(f, grub2_cfg_new)
|
|
||||||
- self._grub2_default_env_patch()
|
|
||||||
+ if self._bls:
|
|
||||||
+ self._grub2_default_env_unpatch()
|
|
||||||
+ else:
|
|
||||||
+ self._grub2_default_env_patch()
|
|
||||||
return True
|
|
||||||
|
|
||||||
def _grub2_update(self):
|
|
||||||
|
|
@ -1,143 +0,0 @@
|
|||||||
diff --git a/profiles/realtime-virtual-host/find-lapictscdeadline-optimal.sh b/profiles/realtime-virtual-host/find-lapictscdeadline-optimal.sh
|
|
||||||
deleted file mode 100755
|
|
||||||
index 539c47e..0000000
|
|
||||||
--- a/profiles/realtime-virtual-host/find-lapictscdeadline-optimal.sh
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,30 +0,0 @@
|
|
||||||
-#!/bin/bash
|
|
||||||
-
|
|
||||||
-: ${1?"Usage: $0 latency-file"}
|
|
||||||
-
|
|
||||||
-lines=`wc -l $1 | cut -f 1 -d " "`
|
|
||||||
-in_range=0
|
|
||||||
-prev_value=1
|
|
||||||
-for i in `seq 1 $lines`; do
|
|
||||||
- a=`awk "NR==$i" $1 | cut -f 2 -d ":"`
|
|
||||||
- value=$(($a*100/$prev_value))
|
|
||||||
- if [ $value -ge 98 -a $value -le 102 ]; then
|
|
||||||
- in_range=$(($in_range + 1))
|
|
||||||
- else
|
|
||||||
- in_range=0
|
|
||||||
- fi
|
|
||||||
- if [ $in_range -ge 2 ]; then
|
|
||||||
- echo -n "optimal value for lapic_timer_advance_ns is: "
|
|
||||||
- awk "NR==$(($i - 1))" $1 | cut -f 1 -d ":"
|
|
||||||
- exit 0
|
|
||||||
- fi
|
|
||||||
- prev_value=$a
|
|
||||||
-done
|
|
||||||
-# if still decreasing, then use highest ns value
|
|
||||||
-if [ $value -le 99 ]; then
|
|
||||||
- echo -n "optimal value for lapic_timer_advance_ns is: "
|
|
||||||
- awk "NR==$(($i - 1))" $1 | cut -f 1 -d ":"
|
|
||||||
- exit 0
|
|
||||||
-fi
|
|
||||||
-echo optimal not found
|
|
||||||
-exit 1
|
|
||||||
diff --git a/profiles/realtime-virtual-host/script.sh b/profiles/realtime-virtual-host/script.sh
|
|
||||||
index edae6c5..a11dac7 100755
|
|
||||||
--- a/profiles/realtime-virtual-host/script.sh
|
|
||||||
+++ b/profiles/realtime-virtual-host/script.sh
|
|
||||||
@@ -2,102 +2,13 @@
|
|
||||||
|
|
||||||
. /usr/lib/tuned/functions
|
|
||||||
|
|
||||||
-CACHE_VALUE_FILE=./lapic_timer_adv_ns
|
|
||||||
-CACHE_CPU_FILE=./lapic_timer_adv_ns.cpumodel
|
|
||||||
-KVM_LAPIC_FILE=/sys/module/kvm/parameters/lapic_timer_advance_ns
|
|
||||||
KTIMER_LOCKLESS_FILE=/sys/kernel/ktimer_lockless_check
|
|
||||||
-QEMU=$(type -P qemu-kvm || echo /usr/libexec/qemu-kvm)
|
|
||||||
-TSCDEADLINE_LATENCY="/usr/share/qemu-kvm/tscdeadline_latency.flat"
|
|
||||||
-[ -f "$TSCDEADLINE_LATENCY" ] || TSCDEADLINE_LATENCY="/usr/share/tuned-profiles-nfv-host-bin/tscdeadline_latency.flat"
|
|
||||||
-[ -f "$TSCDEADLINE_LATENCY" ] || TSCDEADLINE_LATENCY="/usr/share/tuned/tscdeadline_latency.flat"
|
|
||||||
-
|
|
||||||
-run_tsc_deadline_latency()
|
|
||||||
-{
|
|
||||||
- dir=`mktemp -d`
|
|
||||||
-
|
|
||||||
- for i in `seq 1000 500 7000`; do
|
|
||||||
- echo $i > $KVM_LAPIC_FILE
|
|
||||||
-
|
|
||||||
- unixpath=`mktemp`
|
|
||||||
-
|
|
||||||
- chrt -f 1 $QEMU -S -enable-kvm -device pc-testdev \
|
|
||||||
- -device isa-debug-exit,iobase=0xf4,iosize=0x4 \
|
|
||||||
- -display none -serial stdio -device pci-testdev \
|
|
||||||
- -kernel "$TSCDEADLINE_LATENCY" \
|
|
||||||
- -cpu host,tsc-deadline=on \
|
|
||||||
- -mon chardev=char0,mode=readline \
|
|
||||||
- -chardev socket,id=char0,nowait,path=$unixpath,server | grep latency | cut -f 2 -d ":" > $dir/out &
|
|
||||||
-
|
|
||||||
- sleep 1s
|
|
||||||
- pidofvcpu=`echo "info cpus" | ncat -U $unixpath | grep thread_id | cut -f 3 -d "=" | tr -d "\r"`
|
|
||||||
- taskset -p -c $1 $pidofvcpu >/dev/null
|
|
||||||
- echo "cont" | ncat -U $unixpath >/dev/null
|
|
||||||
- wait
|
|
||||||
-
|
|
||||||
- if [ ! -f $dir/out ]; then
|
|
||||||
- die running $TSCDEADLINE_LATENCY failed
|
|
||||||
- fi
|
|
||||||
-
|
|
||||||
- tmp=$(wc -l $dir/out | awk '{ print $1 }')
|
|
||||||
- if [ $tmp -eq 0 ]; then
|
|
||||||
- die running $TSCDEADLINE_LATENCY failed
|
|
||||||
- fi
|
|
||||||
-
|
|
||||||
- A=0
|
|
||||||
- while read l; do
|
|
||||||
- A=$(($A+$l))
|
|
||||||
- done < $dir/out
|
|
||||||
-
|
|
||||||
- lines=`wc -l $dir/out | cut -f 1 -d " "`
|
|
||||||
- ans=$(($A/$lines))
|
|
||||||
- echo $i: $ans
|
|
||||||
- done
|
|
||||||
-}
|
|
||||||
|
|
||||||
start() {
|
|
||||||
setup_kvm_mod_low_latency
|
|
||||||
|
|
||||||
disable_ksm
|
|
||||||
|
|
||||||
- # If CPU model has changed, clean the cache
|
|
||||||
- if [ -f $CACHE_CPU_FILE ]; then
|
|
||||||
- curmodel=`cat /proc/cpuinfo | grep "model name" | cut -f 2 -d ":" | uniq`
|
|
||||||
- if [ -z "$curmodel" ]; then
|
|
||||||
- die failed to read CPU model
|
|
||||||
- fi
|
|
||||||
-
|
|
||||||
- genmodel=`cat $CACHE_CPU_FILE`
|
|
||||||
-
|
|
||||||
- if [ "$curmodel" != "$genmodel" ]; then
|
|
||||||
- rm -f $CACHE_VALUE_FILE
|
|
||||||
- rm -f $CACHE_CPU_FILE
|
|
||||||
- fi
|
|
||||||
- fi
|
|
||||||
-
|
|
||||||
- # If the cache is empty, find the best lapic_timer_advance_ns value
|
|
||||||
- # and cache it
|
|
||||||
-
|
|
||||||
- if [ ! -f $KVM_LAPIC_FILE ]; then
|
|
||||||
- die $KVM_LAPIC_FILE not found
|
|
||||||
- fi
|
|
||||||
-
|
|
||||||
- if [ ! -f $CACHE_VALUE_FILE ]; then
|
|
||||||
- if [ -f "$TSCDEADLINE_LATENCY" ]; then
|
|
||||||
- tempdir=`mktemp -d`
|
|
||||||
- isolatedcpu=`echo "$TUNED_isolated_cores_expanded" | cut -f 1 -d ","`
|
|
||||||
- run_tsc_deadline_latency $isolatedcpu > $tempdir/lat.out
|
|
||||||
- if ! ./find-lapictscdeadline-optimal.sh $tempdir/lat.out > $tempdir/opt.out; then
|
|
||||||
- die could not find optimal latency
|
|
||||||
- fi
|
|
||||||
- echo `cat $tempdir/opt.out | cut -f 2 -d ":"` > $CACHE_VALUE_FILE
|
|
||||||
- curmodel=`cat /proc/cpuinfo | grep "model name" | cut -f 2 -d ":" | uniq`
|
|
||||||
- echo "$curmodel" > $CACHE_CPU_FILE
|
|
||||||
- fi
|
|
||||||
- fi
|
|
||||||
-
|
|
||||||
- if [ -f $CACHE_VALUE_FILE ]; then
|
|
||||||
- echo `cat $CACHE_VALUE_FILE` > $KVM_LAPIC_FILE
|
|
||||||
- fi
|
|
||||||
systemctl start rt-entsk
|
|
||||||
|
|
||||||
if [ -f $KTIMER_LOCKLESS_FILE ]; then
|
|
@ -1,55 +0,0 @@
|
|||||||
From daf02c380515b42db06d9f743070af5ab248a414 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Jaroslav=20=C5=A0karvada?= <jskarvad@redhat.com>
|
|
||||||
Date: Fri, 3 Jul 2020 12:17:03 +0200
|
|
||||||
Subject: [PATCH] scheduler: fix isolated_cores to work with cgroups
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
It seems cpuset.cpus needs to be initialized before writing to tasks.
|
|
||||||
|
|
||||||
Related: rhbz#1784648
|
|
||||||
|
|
||||||
Signed-off-by: Jaroslav Škarvada <jskarvad@redhat.com>
|
|
||||||
---
|
|
||||||
tuned/plugins/plugin_scheduler.py | 5 +++++
|
|
||||||
1 file changed, 5 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/tuned/plugins/plugin_scheduler.py b/tuned/plugins/plugin_scheduler.py
|
|
||||||
index 745ee4a..9ad9f54 100644
|
|
||||||
--- a/tuned/plugins/plugin_scheduler.py
|
|
||||||
+++ b/tuned/plugins/plugin_scheduler.py
|
|
||||||
@@ -106,6 +106,7 @@ class SchedulerPlugin(base.Plugin):
|
|
||||||
# calculated by isolated_cores setter
|
|
||||||
self._affinity = None
|
|
||||||
|
|
||||||
+ self._cgroup_affinity_initialized = False
|
|
||||||
self._cgroup = None
|
|
||||||
self._cgroups = collections.OrderedDict([(self._sanitize_cgroup_path(option[7:]), self._variables.expand(affinity))
|
|
||||||
for option, affinity in instance.options.items() if option[:7] == "cgroup." and len(option) > 7])
|
|
||||||
@@ -478,11 +479,14 @@ class SchedulerPlugin(base.Plugin):
|
|
||||||
log.error("Unable to set affinity '%s' for cgroup '%s'" % (affinity, cgroup))
|
|
||||||
|
|
||||||
def _cgroup_set_affinity(self):
|
|
||||||
+ if self._cgroup_affinity_initialized:
|
|
||||||
+ return
|
|
||||||
log.debug("Setting cgroups affinities")
|
|
||||||
if self._affinity is not None and self._cgroup is not None and not self._cgroup in self._cgroups:
|
|
||||||
self._cgroup_set_affinity_one(self._cgroup, self._affinity, backup = True)
|
|
||||||
for cg in self._cgroups.items():
|
|
||||||
self._cgroup_set_affinity_one(cg[0], cg[1], backup = True)
|
|
||||||
+ self._cgroup_affinity_initialized = True
|
|
||||||
|
|
||||||
def _cgroup_restore_affinity(self):
|
|
||||||
log.debug("Restoring cgroups affinities")
|
|
||||||
@@ -920,6 +924,7 @@ class SchedulerPlugin(base.Plugin):
|
|
||||||
return self._verify_all_irq_affinity(affinity, ignore_missing)
|
|
||||||
elif enabling:
|
|
||||||
if self._cgroup:
|
|
||||||
+ self._cgroup_set_affinity()
|
|
||||||
ps_affinity = "cgroup.%s" % self._cgroup
|
|
||||||
else:
|
|
||||||
ps_affinity = affinity
|
|
||||||
--
|
|
||||||
2.25.4
|
|
||||||
|
|
168
SOURCES/tuned-2.15.0-netdev-queue-count.patch
Normal file
168
SOURCES/tuned-2.15.0-netdev-queue-count.patch
Normal file
@ -0,0 +1,168 @@
|
|||||||
|
diff --git a/profiles/realtime/realtime-variables.conf b/profiles/realtime/realtime-variables.conf
|
||||||
|
index c2da595..9d929e0 100644
|
||||||
|
--- a/profiles/realtime/realtime-variables.conf
|
||||||
|
+++ b/profiles/realtime/realtime-variables.conf
|
||||||
|
@@ -9,3 +9,11 @@
|
||||||
|
# kernel supports it.
|
||||||
|
#
|
||||||
|
# isolate_managed_irq=Y
|
||||||
|
+#
|
||||||
|
+#
|
||||||
|
+# Set the desired combined queue count value using the parameter provided
|
||||||
|
+# below. Ideally this should be set to the number of housekeeping CPUs i.e.,
|
||||||
|
+# in the example given below it is assumed that the system has 4 housekeeping
|
||||||
|
+# (non-isolated) CPUs.
|
||||||
|
+#
|
||||||
|
+# netdev_queue_count=4
|
||||||
|
diff --git a/profiles/realtime/tuned.conf b/profiles/realtime/tuned.conf
|
||||||
|
index 8eed36e..2400849 100644
|
||||||
|
--- a/profiles/realtime/tuned.conf
|
||||||
|
+++ b/profiles/realtime/tuned.conf
|
||||||
|
@@ -35,6 +35,9 @@ assert2=${f:assertion:isolated_cores contains online CPU(s):${isolated_cores_exp
|
||||||
|
isolate_managed_irq = ${isolate_managed_irq}
|
||||||
|
managed_irq=${f:regex_search_ternary:${isolate_managed_irq}:\b[y,Y,1,t,T]\b:managed_irq,domain,:}
|
||||||
|
|
||||||
|
+[net]
|
||||||
|
+channels=combined ${f:check_net_queue_count:${netdev_queue_count}}
|
||||||
|
+
|
||||||
|
[sysctl]
|
||||||
|
kernel.hung_task_timeout_secs = 600
|
||||||
|
kernel.nmi_watchdog = 0
|
||||||
|
diff --git a/tuned/profiles/functions/function_check_net_queue_count.py b/tuned/profiles/functions/function_check_net_queue_count.py
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..eb54f98
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/tuned/profiles/functions/function_check_net_queue_count.py
|
||||||
|
@@ -0,0 +1,22 @@
|
||||||
|
+import tuned.logs
|
||||||
|
+from . import base
|
||||||
|
+
|
||||||
|
+log = tuned.logs.get()
|
||||||
|
+
|
||||||
|
+class check_net_queue_count(base.Function):
|
||||||
|
+ """
|
||||||
|
+ Checks whether the user has specified a queue count for net devices. If
|
||||||
|
+ not, return the number of housekeeping CPUs.
|
||||||
|
+ """
|
||||||
|
+ def __init__(self):
|
||||||
|
+ # 1 argument
|
||||||
|
+ super(check_net_queue_count, self).__init__("check_net_queue_count", 1, 1)
|
||||||
|
+
|
||||||
|
+ def execute(self, args):
|
||||||
|
+ if not super(check_net_queue_count, self).execute(args):
|
||||||
|
+ return None
|
||||||
|
+ if args[0].isdigit():
|
||||||
|
+ return args[0]
|
||||||
|
+ (ret, out) = self._cmd.execute(["nproc"])
|
||||||
|
+ log.warn("net-dev queue count is not correctly specified, setting it to HK CPUs %s" % (out))
|
||||||
|
+ return out
|
||||||
|
diff --git a/tuned/plugins/plugin_net.py b/tuned/plugins/plugin_net.py
|
||||||
|
index 4d4c19e..a20d87e 100644
|
||||||
|
--- a/tuned/plugins/plugin_net.py
|
||||||
|
+++ b/tuned/plugins/plugin_net.py
|
||||||
|
@@ -122,6 +122,13 @@ class NetTuningPlugin(base.Plugin):
|
||||||
|
"rx-jumbo": None,
|
||||||
|
"tx": None }
|
||||||
|
|
||||||
|
+ @classmethod
|
||||||
|
+ def _get_config_options_channels(cls):
|
||||||
|
+ return { "rx": None,
|
||||||
|
+ "tx": None,
|
||||||
|
+ "other": None,
|
||||||
|
+ "combined": None }
|
||||||
|
+
|
||||||
|
@classmethod
|
||||||
|
def _get_config_options(cls):
|
||||||
|
return {
|
||||||
|
@@ -132,6 +139,7 @@ class NetTuningPlugin(base.Plugin):
|
||||||
|
"coalesce": None,
|
||||||
|
"pause": None,
|
||||||
|
"ring": None,
|
||||||
|
+ "channels": None,
|
||||||
|
}
|
||||||
|
|
||||||
|
def _init_stats_and_idle(self, instance, device):
|
||||||
|
@@ -282,7 +290,8 @@ class NetTuningPlugin(base.Plugin):
|
||||||
|
params = set(d.keys())
|
||||||
|
supported_getter = { "coalesce": self._get_config_options_coalesce, \
|
||||||
|
"pause": self._get_config_options_pause, \
|
||||||
|
- "ring": self._get_config_options_ring }
|
||||||
|
+ "ring": self._get_config_options_ring, \
|
||||||
|
+ "channels": self._get_config_options_channels }
|
||||||
|
supported = set(supported_getter[context]().keys())
|
||||||
|
if not params.issubset(supported):
|
||||||
|
log.error("unknown %s parameter(s): %s" % (context, str(params - supported)))
|
||||||
|
@@ -313,6 +322,29 @@ class NetTuningPlugin(base.Plugin):
|
||||||
|
l = [x for x in [re.split(r":\s*", x) for x in l] if len(x) == 2]
|
||||||
|
return dict(l)
|
||||||
|
|
||||||
|
+ # parse output of ethtool -l
|
||||||
|
+ def _parse_channels_parameters(self, s):
|
||||||
|
+ a = re.split(r"^Current hardware settings:$", s, flags=re.MULTILINE)
|
||||||
|
+ s = a[1]
|
||||||
|
+ s = self._cmd.multiple_re_replace(\
|
||||||
|
+ {"RX": "rx",
|
||||||
|
+ "TX": "tx",
|
||||||
|
+ "Other": "other",
|
||||||
|
+ "Combined": "combined"}, s)
|
||||||
|
+ l = s.split("\n")
|
||||||
|
+ l = [x for x in l if x != '']
|
||||||
|
+ l = [x for x in [re.split(r":\s*", x) for x in l] if len(x) == 2]
|
||||||
|
+ return dict(l)
|
||||||
|
+
|
||||||
|
+ def _replace_channels_parameters(self, context, params_list, dev_params):
|
||||||
|
+ mod_params_list = []
|
||||||
|
+ if "combined" in params_list:
|
||||||
|
+ mod_params_list.extend(["rx", params_list[1], "tx", params_list[1]])
|
||||||
|
+ else:
|
||||||
|
+ cnt = str(max(int(params_list[1]), int(params_list[3])))
|
||||||
|
+ mod_params_list.extend(["combined", cnt])
|
||||||
|
+ return dict(list(zip(mod_params_list[::2], mod_params_list[1::2])))
|
||||||
|
+
|
||||||
|
def _check_device_support(self, context, parameters, device, dev_params):
|
||||||
|
"""Filter unsupported parameters and log warnings about it
|
||||||
|
|
||||||
|
@@ -337,7 +369,8 @@ class NetTuningPlugin(base.Plugin):
|
||||||
|
parameters.pop(param, None)
|
||||||
|
|
||||||
|
def _get_device_parameters(self, context, device):
|
||||||
|
- context2opt = { "coalesce": "-c", "features": "-k", "pause": "-a", "ring": "-g" }
|
||||||
|
+ context2opt = { "coalesce": "-c", "features": "-k", "pause": "-a", "ring": "-g", \
|
||||||
|
+ "channels": "-l"}
|
||||||
|
opt = context2opt[context]
|
||||||
|
ret, value = self._cmd.execute(["ethtool", opt, device])
|
||||||
|
if ret != 0 or len(value) == 0:
|
||||||
|
@@ -345,7 +378,8 @@ class NetTuningPlugin(base.Plugin):
|
||||||
|
context2parser = { "coalesce": self._parse_device_parameters, \
|
||||||
|
"features": self._parse_device_parameters, \
|
||||||
|
"pause": self._parse_pause_parameters, \
|
||||||
|
- "ring": self._parse_ring_parameters }
|
||||||
|
+ "ring": self._parse_ring_parameters, \
|
||||||
|
+ "channels": self._parse_channels_parameters }
|
||||||
|
parser = context2parser[context]
|
||||||
|
d = parser(value)
|
||||||
|
if context == "coalesce" and not self._check_parameters(context, d):
|
||||||
|
@@ -362,10 +396,14 @@ class NetTuningPlugin(base.Plugin):
|
||||||
|
# check if device supports parameters and filter out unsupported ones
|
||||||
|
if dev_params:
|
||||||
|
self._check_device_support(context, d, device, dev_params)
|
||||||
|
+ # replace the channel parameters based on the device support
|
||||||
|
+ if context == "channels" and int(dev_params[next(iter(d))]) == 0:
|
||||||
|
+ d = self._replace_channels_parameters(context, self._cmd.dict2list(d), dev_params)
|
||||||
|
|
||||||
|
if not sim and len(d) != 0:
|
||||||
|
log.debug("setting %s: %s" % (context, str(d)))
|
||||||
|
- context2opt = { "coalesce": "-C", "features": "-K", "pause": "-A", "ring": "-G" }
|
||||||
|
+ context2opt = { "coalesce": "-C", "features": "-K", "pause": "-A", "ring": "-G", \
|
||||||
|
+ "channels": "-L"}
|
||||||
|
opt = context2opt[context]
|
||||||
|
# ignore ethtool return code 80, it means parameter is already set
|
||||||
|
self._cmd.execute(["ethtool", opt, device] + self._cmd.dict2list(d), no_errors = [80])
|
||||||
|
@@ -422,3 +460,7 @@ class NetTuningPlugin(base.Plugin):
|
||||||
|
@command_custom("ring", per_device = True)
|
||||||
|
def _ring(self, start, value, device, verify, ignore_missing):
|
||||||
|
return self._custom_parameters("ring", start, value, device, verify)
|
||||||
|
+
|
||||||
|
+ @command_custom("channels", per_device = True)
|
||||||
|
+ def _channels(self, start, value, device, verify, ignore_missing):
|
||||||
|
+ return self._custom_parameters("channels", start, value, device, verify)
|
@ -33,8 +33,8 @@
|
|||||||
|
|
||||||
Summary: A dynamic adaptive system tuning daemon
|
Summary: A dynamic adaptive system tuning daemon
|
||||||
Name: tuned
|
Name: tuned
|
||||||
Version: 2.14.0
|
Version: 2.15.0
|
||||||
Release: 3%{?prerel1}%{?dist}.2
|
Release: 2%{?prerel1}%{?dist}
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
Source0: https://github.com/redhat-performance/%{name}/archive/v%{version}%{?prerel2}/%{name}-%{version}%{?prerel2}.tar.gz
|
Source0: https://github.com/redhat-performance/%{name}/archive/v%{version}%{?prerel2}/%{name}-%{version}%{?prerel2}.tar.gz
|
||||||
# RHEL-8 specific recommend.conf:
|
# RHEL-8 specific recommend.conf:
|
||||||
@ -57,28 +57,25 @@ Requires: %{_py}-schedutils, %{_py}-linux-procfs, %{_py}-perf
|
|||||||
BuildRequires: python3-dbus, python3-gobject-base
|
BuildRequires: python3-dbus, python3-gobject-base
|
||||||
Requires: python3-dbus, python3-gobject-base
|
Requires: python3-dbus, python3-gobject-base
|
||||||
%if 0%{?fedora} > 22 || 0%{?rhel} > 7
|
%if 0%{?fedora} > 22 || 0%{?rhel} > 7
|
||||||
Recommends: python3-dmidecode
|
Recommends: dmidecode
|
||||||
%endif
|
%endif
|
||||||
%else
|
%else
|
||||||
# BuildRequires for 'make test'
|
# BuildRequires for 'make test'
|
||||||
BuildRequires: dbus-python, pygobject3-base
|
BuildRequires: dbus-python, pygobject3-base
|
||||||
Requires: dbus-python, pygobject3-base
|
Requires: dbus-python, pygobject3-base
|
||||||
%if 0%{?fedora} > 22 || 0%{?rhel} > 7
|
|
||||||
Recommends: python-dmidecode
|
|
||||||
%endif
|
%endif
|
||||||
%endif
|
Requires: virt-what, ethtool, gawk
|
||||||
Requires: virt-what, ethtool, gawk, hdparm
|
|
||||||
Requires: util-linux, dbus, polkit
|
Requires: util-linux, dbus, polkit
|
||||||
%if 0%{?fedora} > 22 || 0%{?rhel} > 7
|
%if 0%{?fedora} > 22 || 0%{?rhel} > 7
|
||||||
|
Recommends: dmidecode
|
||||||
|
Recommends: hdparm
|
||||||
Recommends: kernel-tools
|
Recommends: kernel-tools
|
||||||
|
Recommends: kmod
|
||||||
%endif
|
%endif
|
||||||
%if 0%{?rhel} > 7
|
%if 0%{?rhel} > 7
|
||||||
Requires: python3-syspurpose
|
Requires: python3-syspurpose
|
||||||
%endif
|
%endif
|
||||||
Patch0: tuned-2.14.0-amd-performance-regression-fix.patch
|
Patch0: tuned-2.15.0-netdev-queue-count.patch
|
||||||
Patch1: tuned-2.14.0-scheduler-isolated-cores-cgroups-fix.patch
|
|
||||||
Patch2: tuned-2.14.0-realtime-virtual-host-remove-lapic-advancement.patch
|
|
||||||
Patch3: tuned-2.14.0-cmdline-duplication-with-BLS-and-grub2-mkconfig-fix.patch
|
|
||||||
|
|
||||||
%description
|
%description
|
||||||
The tuned package contains a daemon that tunes system settings dynamically.
|
The tuned package contains a daemon that tunes system settings dynamically.
|
||||||
@ -224,19 +221,27 @@ Requires: %{name} = %{version}
|
|||||||
Additional tuned profiles mainly for backward compatibility with tuned 1.0.
|
Additional tuned profiles mainly for backward compatibility with tuned 1.0.
|
||||||
It can be also used to fine tune your system for specific scenarios.
|
It can be also used to fine tune your system for specific scenarios.
|
||||||
|
|
||||||
|
%package profiles-postgresql
|
||||||
|
Summary: Additional tuned profile(s) targeted to PostgreSQL server loads
|
||||||
|
Requires: %{name} = %{version}
|
||||||
|
|
||||||
|
%description profiles-postgresql
|
||||||
|
Additional tuned profile(s) targeted to PostgreSQL server loads.
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n %{name}-%{version}%{?prerel2}
|
%setup -q -n %{name}-%{version}%{?prerel2}
|
||||||
|
|
||||||
%patch0 -p1
|
%patch0 -p1
|
||||||
%patch1 -p1
|
|
||||||
%patch2 -p1
|
|
||||||
%patch3 -p1
|
|
||||||
|
|
||||||
# Replace the upstream recommend.conf with a RHEL-8-specific one
|
# Replace the upstream recommend.conf with a RHEL-8-specific one
|
||||||
rm -f recommend.conf
|
rm -f recommend.conf
|
||||||
cp -p %{SOURCE1} recommend.conf
|
cp -p %{SOURCE1} recommend.conf
|
||||||
|
|
||||||
%build
|
%build
|
||||||
|
# Docs cannot be generated on RHEL now due to missing asciidoctor dependency
|
||||||
|
# asciidoc doesn't seem to be compatible
|
||||||
|
%if ! 0%{?rhel}
|
||||||
|
make html %{make_python_arg}
|
||||||
|
%endif
|
||||||
|
|
||||||
%install
|
%install
|
||||||
make install DESTDIR=%{buildroot} DOCDIR=%{docdir} %{make_python_arg}
|
make install DESTDIR=%{buildroot} DOCDIR=%{docdir} %{make_python_arg}
|
||||||
@ -244,6 +249,11 @@ make install DESTDIR=%{buildroot} DOCDIR=%{docdir} %{make_python_arg}
|
|||||||
sed -i 's/\(dynamic_tuning[ \t]*=[ \t]*\).*/\10/' %{buildroot}%{_sysconfdir}/tuned/tuned-main.conf
|
sed -i 's/\(dynamic_tuning[ \t]*=[ \t]*\).*/\10/' %{buildroot}%{_sysconfdir}/tuned/tuned-main.conf
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
%if ! 0%{?rhel}
|
||||||
|
# manual
|
||||||
|
make install-html DESTDIR=%{buildroot} DOCDIR=%{docdir}
|
||||||
|
%endif
|
||||||
|
|
||||||
# conditional support for grub2, grub2 is not available on all architectures
|
# conditional support for grub2, grub2 is not available on all architectures
|
||||||
# and tuned is noarch package, thus the following hack is needed
|
# and tuned is noarch package, thus the following hack is needed
|
||||||
mkdir -p %{buildroot}%{_datadir}/tuned/grub2
|
mkdir -p %{buildroot}%{_datadir}/tuned/grub2
|
||||||
@ -260,8 +270,13 @@ touch %{buildroot}%{_sysconfdir}/modprobe.d/kvm.rt.tuned.conf
|
|||||||
# validate desktop file
|
# validate desktop file
|
||||||
desktop-file-validate %{buildroot}%{_datadir}/applications/tuned-gui.desktop
|
desktop-file-validate %{buildroot}%{_datadir}/applications/tuned-gui.desktop
|
||||||
|
|
||||||
|
# Run tests on RHEL > 7 or non RHEL
|
||||||
|
# We cannot run tests on RHEL-7 because there is no python-mock package and
|
||||||
|
# python-2.7 doesn't have mock built-in
|
||||||
|
%if 0%{?rhel} > 7 || ! 0%{?rhel}
|
||||||
%check
|
%check
|
||||||
make test
|
make test %{make_python_arg}
|
||||||
|
%endif
|
||||||
|
|
||||||
%post
|
%post
|
||||||
%systemd_post tuned.service
|
%systemd_post tuned.service
|
||||||
@ -308,11 +323,18 @@ if [ "$1" == 0 ]; then
|
|||||||
then
|
then
|
||||||
for f in /boot/loader/entries/$MACHINE_ID-*.conf
|
for f in /boot/loader/entries/$MACHINE_ID-*.conf
|
||||||
do
|
do
|
||||||
if [ -f "$f" -a "${f: -12}" != "-rescue.conf" ]
|
# Skip non-files and rescue entries
|
||||||
|
if [ ! -f "$f" -o "${f: -12}" == "-rescue.conf" ]
|
||||||
then
|
then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
# Skip boom managed entries
|
||||||
|
if [[ "$f" =~ \w*-[0-9a-f]{7,}-.*-.*.conf ]]
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
sed -i '/^\s*options\s\+.*\$tuned_params/ s/\s\+\$tuned_params\b//g' "$f" &>/dev/null || :
|
sed -i '/^\s*options\s\+.*\$tuned_params/ s/\s\+\$tuned_params\b//g' "$f" &>/dev/null || :
|
||||||
sed -i '/^\s*initrd\s\+.*\$tuned_initrd/ s/\s\+\$tuned_initrd\b//g' "$f" &>/dev/null || :
|
sed -i '/^\s*initrd\s\+.*\$tuned_initrd/ s/\s\+\$tuned_initrd\b//g' "$f" &>/dev/null || :
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@ -371,6 +393,7 @@ fi
|
|||||||
%exclude %{_prefix}/lib/tuned/realtime-virtual-host
|
%exclude %{_prefix}/lib/tuned/realtime-virtual-host
|
||||||
%exclude %{_prefix}/lib/tuned/cpu-partitioning
|
%exclude %{_prefix}/lib/tuned/cpu-partitioning
|
||||||
%exclude %{_prefix}/lib/tuned/spectrumscale-ece
|
%exclude %{_prefix}/lib/tuned/spectrumscale-ece
|
||||||
|
%exclude %{_prefix}/lib/tuned/postgresql
|
||||||
%{_prefix}/lib/tuned
|
%{_prefix}/lib/tuned
|
||||||
%dir %{_sysconfdir}/tuned
|
%dir %{_sysconfdir}/tuned
|
||||||
%dir %{_sysconfdir}/tuned/recommend.d
|
%dir %{_sysconfdir}/tuned/recommend.d
|
||||||
@ -484,15 +507,41 @@ fi
|
|||||||
%{_prefix}/lib/tuned/spindown-disk
|
%{_prefix}/lib/tuned/spindown-disk
|
||||||
%{_mandir}/man7/tuned-profiles-compat.7*
|
%{_mandir}/man7/tuned-profiles-compat.7*
|
||||||
|
|
||||||
%changelog
|
%files profiles-postgresql
|
||||||
* Tue Feb 2 2021 Jan Zerdik <jzerdik@redhat.com> - 2.14.0-3.2
|
%{_prefix}/lib/tuned/postgresql
|
||||||
- bootloader: fixed cmdline duplication with BLS and grub2-mkconfig
|
%{_mandir}/man7/tuned-profiles-postgresql.7*
|
||||||
Resolves: rhbz#1918995
|
|
||||||
|
|
||||||
* Fri Oct 2 2020 Jaroslav Škarvada <jskarvad@redhat.com> - 2.14.0-3.1
|
%changelog
|
||||||
|
* Fri Feb 19 2021 Jaroslav Škarvada <jskarvad@redhat.com> - 2.15.0-2
|
||||||
|
- realtime: added support for netdev_queue_count and extended plugin_net
|
||||||
|
resolves: rhbz#1846767
|
||||||
|
|
||||||
|
* Thu Dec 17 2020 Jaroslav Škarvada <jskarvad@redhat.com> - 2.15.0-1
|
||||||
|
- new release
|
||||||
|
- rebased tuned to latest upstream
|
||||||
|
related: rhbz#1874052
|
||||||
|
|
||||||
|
* Tue Dec 1 2020 Jaroslav Škarvada <jskarvad@redhat.com> - 2.15.0-0.1.rc1
|
||||||
|
- new release
|
||||||
|
- rebased tuned to latest upstream
|
||||||
|
resolves: rhbz#1874052
|
||||||
|
- added plugin service for linux services control
|
||||||
|
resolves: rhbz#1869991
|
||||||
|
- scheduler: added default_irq_smp_affinity option
|
||||||
|
resolves: rhbz#1896348
|
||||||
|
- bootloader: skip boom managed BLS snippets
|
||||||
|
resolves: rhbz#1901532
|
||||||
|
- scheduler: added perf_process_fork option to enable processing of fork
|
||||||
|
resolves: rhbz#1894610
|
||||||
|
- scheduler: added perf_mmap_pages option to set perf buffer size
|
||||||
|
resolves: rhbz#1890219
|
||||||
|
- bootloader: fixed cmdline duplication with BLS and grub2-mkconfig
|
||||||
|
resolves: rhbz#1777874
|
||||||
|
|
||||||
|
* Thu Oct 1 2020 Jaroslav Škarvada <jskarvad@redhat.com> - 2.14.0-4
|
||||||
- realtime-virtual-host: remove lapic advancement calculation and
|
- realtime-virtual-host: remove lapic advancement calculation and
|
||||||
related qemu-kvm-tools-rhev requirement
|
related qemu-kvm-tools-rhev requirement
|
||||||
Resolves: rhbz#1884544
|
Resolves: rhbz#1845717
|
||||||
|
|
||||||
* Fri Jul 3 2020 Jaroslav Škarvada <jskarvad@redhat.com> - 2.14.0-3
|
* Fri Jul 3 2020 Jaroslav Škarvada <jskarvad@redhat.com> - 2.14.0-3
|
||||||
- scheduler: fixed isolated_cores to work with cgroups
|
- scheduler: fixed isolated_cores to work with cgroups
|
||||||
|
Loading…
Reference in New Issue
Block a user