diff --git a/RELEASES.md b/RELEASES.md index 3709d0f22..adbb4f952 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1,6 +1,7 @@ Version 0.7.9 (2020-XX-XX) ======================== * Improved car battery power management + * Improved realtime performance Version 0.7.8 (2020-08-19) ======================== diff --git a/common/realtime.py b/common/realtime.py index 4326eab13..7f4ad5c0d 100644 --- a/common/realtime.py +++ b/common/realtime.py @@ -33,8 +33,8 @@ def set_core_affinity(core): def config_rt_process(core, priority): gc.disable() - set_core_affinity(core) set_realtime_priority(priority) + set_core_affinity(core) class Ratekeeper(): diff --git a/release/files_common b/release/files_common index 4c0282389..4cea46873 100644 --- a/release/files_common +++ b/release/files_common @@ -80,6 +80,7 @@ selfdrive/logmessaged.py selfdrive/tombstoned.py selfdrive/pandad.py selfdrive/updated.py +selfdrive/rtshield.py selfdrive/athena/__init__.py selfdrive/athena/athenad.py diff --git a/selfdrive/manager.py b/selfdrive/manager.py index 168b35810..614f4ad99 100755 --- a/selfdrive/manager.py +++ b/selfdrive/manager.py @@ -188,6 +188,7 @@ managed_processes = { "updated": "selfdrive.updated", "dmonitoringmodeld": ("selfdrive/modeld", ["./dmonitoringmodeld"]), "modeld": ("selfdrive/modeld", ["./modeld"]), + "rtshield": "selfdrive.rtshield", } daemon_processes = { @@ -227,6 +228,7 @@ if not PC: if ANDROID: persistent_processes += [ 'updated', + 'rtshield', ] car_started_processes = [ diff --git a/selfdrive/rtshield.py b/selfdrive/rtshield.py new file mode 100644 index 000000000..e76022501 --- /dev/null +++ b/selfdrive/rtshield.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python3 +import time +from common.realtime import set_core_affinity, set_realtime_priority + + +# RT shield - ensure CPU 3 always remains available for RT processes +# runs as SCHED_FIFO with minimum priority to ensure kthreads don't +# get scheduled onto CPU 3, but it's always preemptible by realtime +# openpilot processes + +def main(): + set_core_affinity(3) + set_realtime_priority(1) + + while True: + time.sleep(0.000001)