We already disable the clocksource watchdog, it's there to double-check
whether clock results are coherent between reads. But a new reliability
test was introduced in recent kernels[1], tracking tsc drift between
CPUs[2]. It works by programming timers on all CPUs, including isolated
ones, and checks whether the tsc was adjusted in between runs. This
introduces unwarranted latency on real time systems. So let's promote
tsc to 'reliable', which disables both checks.
There shouldn't be any impact on old nor new setups. First, this test
didn't exist in the past, so any eventual drift was left uncorrected.
Second, most telco and HPC use-cases will make heavy use of tsc in
user-space, and its reliability is already assumed in the system's
design.
[1] c7719e793478 x86/tsc: Add a timer to make sure TSC_adjust is always
checked
[2] Generally caused by rogue BIOSes adjusting the tsc on a CPU and not
doing so on the rest
Signed-off-by: Nicolas Saenz Julienne <nsaenzju@redhat.com>
66 lines
2.3 KiB
Text
66 lines
2.3 KiB
Text
# tuned configuration
|
|
#
|
|
# Red Hat Enterprise Linux for Real Time Documentation:
|
|
# https://docs.redhat.com
|
|
|
|
[main]
|
|
summary=Optimize for realtime workloads
|
|
include = network-latency
|
|
|
|
[variables]
|
|
# User is responsible for updating variables.conf with variable content such as isolated_cores=X-Y
|
|
include = /etc/tuned/realtime-variables.conf
|
|
|
|
isolated_cores_assert_check = \\${isolated_cores}
|
|
# Make sure isolated_cores is defined before any of the variables that
|
|
# use it (such as assert1) are defined, so that child profiles can set
|
|
# isolated_cores directly in the profile (tuned.conf)
|
|
isolated_cores = ${isolated_cores}
|
|
# Fail if isolated_cores are not set
|
|
assert1=${f:assertion_non_equal:isolated_cores are set:${isolated_cores}:${isolated_cores_assert_check}}
|
|
|
|
# Non-isolated cores cpumask including offline cores
|
|
not_isolated_cpumask = ${f:cpulist2hex_invert:${isolated_cores}}
|
|
isolated_cores_expanded=${f:cpulist_unpack:${isolated_cores}}
|
|
isolated_cpumask=${f:cpulist2hex:${isolated_cores_expanded}}
|
|
isolated_cores_online_expanded=${f:cpulist_online:${isolated_cores}}
|
|
|
|
# Fail if isolated_cores contains CPUs which are not online
|
|
assert2=${f:assertion:isolated_cores contains online CPU(s):${isolated_cores_expanded}:${isolated_cores_online_expanded}}
|
|
|
|
# Assembly managed_irq
|
|
# Make sure isolate_managed_irq is defined before any of the variables that
|
|
# use it (such as managed_irq) are defined, so that child profiles can set
|
|
# isolate_managed_irq directly in the profile (tuned.conf)
|
|
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
|
|
kernel.sched_rt_runtime_us = -1
|
|
vm.stat_interval = 10
|
|
kernel.timer_migration = 0
|
|
|
|
[sysfs]
|
|
/sys/bus/workqueue/devices/writeback/cpumask = ${not_isolated_cpumask}
|
|
/sys/devices/virtual/workqueue/cpumask = ${not_isolated_cpumask}
|
|
/sys/devices/virtual/workqueue/*/cpumask = ${not_isolated_cpumask}
|
|
/sys/devices/system/machinecheck/machinecheck*/ignore_ce = 1
|
|
|
|
[bootloader]
|
|
cmdline_realtime=+isolcpus=${managed_irq}${isolated_cores} intel_pstate=disable nosoftlockup tsc=reliable
|
|
|
|
[irqbalance]
|
|
banned_cpus=${isolated_cores}
|
|
|
|
[script]
|
|
script = ${i:PROFILE_DIR}/script.sh
|
|
|
|
[scheduler]
|
|
isolated_cores=${isolated_cores}
|
|
|
|
[rtentsk]
|