diff --git a/common/realtime.py b/common/realtime.py index 5e5fb709ca..99ba19e293 100644 --- a/common/realtime.py +++ b/common/realtime.py @@ -1,12 +1,11 @@ """Utilities for reading real time clocks and keeping soft real time constraints.""" -import os import time import platform import subprocess import multiprocessing from cffi import FFI -from common.hardware import ANDROID +from common.hardware import PC from common.common_pyx import sec_since_boot # pylint: disable=no-name-in-module, import-error @@ -21,6 +20,7 @@ ffi = FFI() ffi.cdef("long syscall(long number, ...);") libc = ffi.dlopen(None) + def _get_tid(): if platform.machine() == "x86_64": NR_gettid = 186 @@ -33,21 +33,17 @@ def _get_tid(): def set_realtime_priority(level): - if os.getuid() != 0: - print("not setting priority, not root") - return + if PC: + return -1 + else: + return subprocess.call(['chrt', '-f', '-p', str(level), str(_get_tid())]) - return subprocess.call(['chrt', '-f', '-p', str(level), str(_get_tid())]) def set_core_affinity(core): - if os.getuid() != 0: - print("not setting affinity, not root") - return - - if ANDROID: - return subprocess.call(['taskset', '-p', str(core), str(_get_tid())]) - else: + if PC: return -1 + else: + return subprocess.call(['taskset', '-p', str(core), str(_get_tid())]) class Ratekeeper(): diff --git a/selfdrive/common/util.c b/selfdrive/common/util.c index 3728dabcd0..ec38824b72 100644 --- a/selfdrive/common/util.c +++ b/selfdrive/common/util.c @@ -50,7 +50,6 @@ void set_thread_name(const char* name) { int set_realtime_priority(int level) { #ifdef __linux__ - long tid = syscall(SYS_gettid); // should match python using chrt @@ -64,8 +63,7 @@ int set_realtime_priority(int level) { } int set_core_affinity(int core) { -#ifdef QCOM - +#ifdef __linux__ long tid = syscall(SYS_gettid); cpu_set_t rt_cpu; diff --git a/selfdrive/modeld/modeld.cc b/selfdrive/modeld/modeld.cc index 2ae3d34840..7369ed47ee 100644 --- a/selfdrive/modeld/modeld.cc +++ b/selfdrive/modeld/modeld.cc @@ -92,6 +92,11 @@ int main(int argc, char **argv) { int err; set_realtime_priority(51); +#ifdef QCOM2 + // CPU usage is much lower when pinned to a single big core + set_core_affinity(4); +#endif + signal(SIGINT, (sighandler_t)set_do_exit); signal(SIGTERM, (sighandler_t)set_do_exit);