From 1d50984a4d1a33dddb25836274cc8684287c34d3 Mon Sep 17 00:00:00 2001 From: Marcelo Tosatti Date: Wed, 22 Jul 2020 11:51:55 -0300 Subject: [PATCH 1/2] add rtentsk plugin Add plugin to open a socket with SOF_TIMESTAMPING_OPT_TX_SWHW. This is for avoiding interruptions due to static key IPIs due to opening socket with timestamping enabled (by opening a socket ourselves the static key is kept enabled). Thanks to Jiri Mencak for porting the C code to Python. Signed-off-by: Marcelo Tosatti --- tuned/plugins/plugin_rtentsk.py | 36 +++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 tuned/plugins/plugin_rtentsk.py diff --git a/tuned/plugins/plugin_rtentsk.py b/tuned/plugins/plugin_rtentsk.py new file mode 100644 index 0000000..22d873f --- /dev/null +++ b/tuned/plugins/plugin_rtentsk.py @@ -0,0 +1,36 @@ +from . import base +from .decorators import * +import tuned.logs +from tuned.utils.commands import commands +import glob +import socket +import time + +log = tuned.logs.get() + +class RTENTSKPlugin(base.Plugin): + """ + Plugin for avoiding interruptions due to static key IPIs due + to opening socket with timestamping enabled (by opening a + socket ourselves the static key is kept enabled). + """ + + def _instance_init(self, instance): + instance._has_static_tuning = True + instance._has_dynamic_tuning = False + + # SO_TIMESTAMP nor SOF_TIMESTAMPING_OPT_TX_SWHW is defined by + # the socket class + + SO_TIMESTAMP = 29 # see include/uapi/asm-generic/socket.h + #define SO_TIMESTAMP 0x4012 # parisc! + SOF_TIMESTAMPING_OPT_TX_SWHW = (1<<14) # see include/uapi/linux/net_tstamp.h + + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + s.setsockopt(socket.SOL_SOCKET, SO_TIMESTAMP, SOF_TIMESTAMPING_OPT_TX_SWHW) + self.rtentsk_socket = s + log.info("opened SOF_TIMESTAMPING_OPT_TX_SWHW socket") + + def _instance_cleanup(self, instance): + s = self.rtentsk_socket + s.close() From 8aef56287b5313c375c5f44baf70691d16df6c5f Mon Sep 17 00:00:00 2001 From: Marcelo Tosatti Date: Wed, 22 Jul 2020 11:51:56 -0300 Subject: [PATCH 2/2] realtime profile: use rtentsk plugin Use rt-entsk tuned plugin and drop systemctl service usage. Signed-off-by: Marcelo Tosatti --- profiles/realtime-virtual-guest/script.sh | 4 +--- profiles/realtime-virtual-host/script.sh | 3 --- profiles/realtime/tuned.conf | 2 ++ 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/profiles/realtime-virtual-guest/script.sh b/profiles/realtime-virtual-guest/script.sh index ce94a4b..45a0ac3 100755 --- a/profiles/realtime-virtual-guest/script.sh +++ b/profiles/realtime-virtual-guest/script.sh @@ -5,7 +5,6 @@ KTIMER_LOCKLESS_FILE=/sys/kernel/ktimer_lockless_check start() { - systemctl start rt-entsk if [ -f $KTIMER_LOCKLESS_FILE ]; then echo 1 > $KTIMER_LOCKLESS_FILE fi @@ -13,8 +12,7 @@ start() { } stop() { - systemctl stop rt-entsk - return "$?" + return 0 } verify() { diff --git a/profiles/realtime-virtual-host/script.sh b/profiles/realtime-virtual-host/script.sh index a11dac7..030f2b0 100755 --- a/profiles/realtime-virtual-host/script.sh +++ b/profiles/realtime-virtual-host/script.sh @@ -9,8 +9,6 @@ start() { disable_ksm - systemctl start rt-entsk - if [ -f $KTIMER_LOCKLESS_FILE ]; then echo 1 > $KTIMER_LOCKLESS_FILE fi @@ -23,7 +21,6 @@ stop() { teardown_kvm_mod_low_latency enable_ksm fi - systemctl stop rt-entsk return "$?" } diff --git a/profiles/realtime/tuned.conf b/profiles/realtime/tuned.conf index cd998b7..8eed36e 100644 --- a/profiles/realtime/tuned.conf +++ b/profiles/realtime/tuned.conf @@ -58,3 +58,5 @@ script = ${i:PROFILE_DIR}/script.sh [scheduler] isolated_cores=${isolated_cores} + +[rtentsk]