diff --git a/common/realtime.py b/common/realtime.py index 0b1468102..91d2e165e 100644 --- a/common/realtime.py +++ b/common/realtime.py @@ -28,6 +28,11 @@ class Priority: CTRL_HIGH = 53 +def drop_realtime() -> None: + if sys.platform == 'linux' and not PC: + os.sched_setscheduler(0, os.SCHED_OTHER, os.sched_param(0)) + + def set_core_affinity(cores: list[int]) -> None: if sys.platform == 'linux' and not PC: os.sched_setaffinity(0, cores) diff --git a/selfdrive/ui/lib/prime_state.py b/selfdrive/ui/lib/prime_state.py index 1aed949be..b57380ac5 100644 --- a/selfdrive/ui/lib/prime_state.py +++ b/selfdrive/ui/lib/prime_state.py @@ -6,6 +6,7 @@ import time from openpilot.common.api import api_get from openpilot.common.params import Params +from openpilot.common.realtime import drop_realtime from openpilot.common.swaglog import cloudlog from openpilot.system.athena.registration import UNREGISTERED_DONGLE_ID from openpilot.selfdrive.ui.lib.api_helpers import get_token @@ -69,6 +70,7 @@ class PrimeState: cloudlog.info(f"Prime type updated to {prime_type}") def _worker_thread(self) -> None: + drop_realtime() from openpilot.selfdrive.ui.ui_state import ui_state, device while self._running: if not ui_state.started and device._awake: diff --git a/selfdrive/ui/mici/layouts/settings/firehose.py b/selfdrive/ui/mici/layouts/settings/firehose.py index 4c27a909f..66393de67 100644 --- a/selfdrive/ui/mici/layouts/settings/firehose.py +++ b/selfdrive/ui/mici/layouts/settings/firehose.py @@ -5,6 +5,7 @@ import pyray as rl from openpilot.common.api import api_get from openpilot.common.params import Params +from openpilot.common.realtime import drop_realtime from openpilot.common.swaglog import cloudlog from openpilot.selfdrive.ui.lib.api_helpers import get_token from openpilot.selfdrive.ui.ui_state import ui_state, device @@ -212,6 +213,7 @@ class FirehoseLayoutBase(Widget): cloudlog.error(f"Failed to fetch firehose stats: {e}") def _update_loop(self): + drop_realtime() while self._running: if not ui_state.started and device._awake: self._fetch_firehose_stats() diff --git a/selfdrive/ui/ui_state.py b/selfdrive/ui/ui_state.py index 18a647f8e..fd1a5228d 100644 --- a/selfdrive/ui/ui_state.py +++ b/selfdrive/ui/ui_state.py @@ -7,6 +7,7 @@ from enum import Enum from cereal import messaging, car, log from openpilot.common.filter_simple import FirstOrderFilter from openpilot.common.params import Params +from openpilot.common.realtime import drop_realtime from openpilot.common.swaglog import cloudlog from openpilot.selfdrive.ui.lib.prime_state import PrimeState from openpilot.system.ui.lib.application import gui_app @@ -122,6 +123,7 @@ class UIState: device.update() def _params_refresh_worker(self): + drop_realtime() while True: self.update_params() time.sleep(PARAM_UPDATE_TIME) @@ -256,6 +258,7 @@ class Device: self._brightness_thread.start() def _brightness_worker(self): + drop_realtime() while True: self._brightness_event.wait() self._brightness_event.clear()