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] 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()