From 5b51f039675edbbdfbeac72cd9c518450a85bc04 Mon Sep 17 00:00:00 2001 From: Adeeb Shihadeh Date: Mon, 10 Jun 2024 19:55:41 -0700 Subject: [PATCH] Revert "Custom setproctitle (#32667)" This reverts commit 3365ed5effa48d34ffe0e2e9bbe9f6941336bed5. --- common/realtime.py | 6 +++--- common/tests/test_threadname.py | 8 -------- common/threadname.py | 19 ------------------- pyproject.toml | 1 + scripts/waste.py | 4 ++-- selfdrive/modeld/modeld.py | 12 ++++++------ system/manager/process.py | 4 ++-- 7 files changed, 14 insertions(+), 40 deletions(-) delete mode 100644 common/tests/test_threadname.py delete mode 100644 common/threadname.py diff --git a/common/realtime.py b/common/realtime.py index e7265406ac..dd97ea3d78 100644 --- a/common/realtime.py +++ b/common/realtime.py @@ -4,7 +4,7 @@ import os import time from collections import deque -from openpilot.common.threadname import getthreadname +from setproctitle import getproctitle from openpilot.system.hardware import PC @@ -52,7 +52,7 @@ class Ratekeeper: self._print_delay_threshold = print_delay_threshold self._frame = 0 self._remaining = 0.0 - self._thread_name = getthreadname() + self._process_name = getproctitle() self._dts = deque([self._interval], maxlen=100) self._last_monitor_time = time.monotonic() @@ -87,7 +87,7 @@ class Ratekeeper: remaining = self._next_frame_time - time.monotonic() self._next_frame_time += self._interval if self._print_delay_threshold is not None and remaining < -self._print_delay_threshold: - print(f"{self._thread_name} lagging by {-remaining * 1000:.2f} ms") + print(f"{self._process_name} lagging by {-remaining * 1000:.2f} ms") lagged = True self._frame += 1 self._remaining = remaining diff --git a/common/tests/test_threadname.py b/common/tests/test_threadname.py deleted file mode 100644 index 38e5e1d498..0000000000 --- a/common/tests/test_threadname.py +++ /dev/null @@ -1,8 +0,0 @@ -from openpilot.common.threadname import setthreadname, getthreadname, LINUX - -class TestThreadName: - def test_set_get_threadname(self): - if LINUX: - name = 'TESTING' - setthreadname(name) - assert name == getthreadname() diff --git a/common/threadname.py b/common/threadname.py deleted file mode 100644 index 3db7a7d013..0000000000 --- a/common/threadname.py +++ /dev/null @@ -1,19 +0,0 @@ -import ctypes -import os - -LINUX = os.name == 'posix' and os.uname().sysname == 'Linux' - -if LINUX: - libc = ctypes.CDLL('libc.so.6') - -def setthreadname(name: str) -> None: - if LINUX: - name = name[:15] + '\0' - libc.prctl(15, str.encode(name), 0, 0, 0) - -def getthreadname() -> str: - if LINUX: - name = ctypes.create_string_buffer(16) - libc.prctl(16, name) - return name.value.decode('utf-8') - return "" diff --git a/pyproject.toml b/pyproject.toml index 37dfd8e6f8..01885c7ac3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -137,6 +137,7 @@ future-fstrings = "*" # these should be removed psutil = "*" timezonefinder = "*" # just used for nav ETA +setproctitle = "*" pycryptodome = "*" # used in updated/casync, panda, body, and a test [tool.poetry.group.dev.dependencies] diff --git a/scripts/waste.py b/scripts/waste.py index bf92710fee..0764ff77c3 100755 --- a/scripts/waste.py +++ b/scripts/waste.py @@ -3,7 +3,7 @@ import os import time import numpy as np from multiprocessing import Process -from openpilot.common.threadname import setthreadname +from setproctitle import setproctitle def waste(core): os.sched_setaffinity(0, [core,]) @@ -16,7 +16,7 @@ def waste(core): j = 0 while 1: if (i % 100) == 0: - setthreadname("%3d: %8d" % (core, i)) + setproctitle("%3d: %8d" % (core, i)) lt = time.monotonic() print("%3d: %8d %f %.2f" % (core, i, lt-st, j)) st = lt diff --git a/selfdrive/modeld/modeld.py b/selfdrive/modeld/modeld.py index b037d1861f..3ac80aad91 100755 --- a/selfdrive/modeld/modeld.py +++ b/selfdrive/modeld/modeld.py @@ -6,7 +6,7 @@ import numpy as np import cereal.messaging as messaging from cereal import car, log from pathlib import Path -from openpilot.common.threadname import setthreadname +from setproctitle import setproctitle from cereal.messaging import PubMaster, SubMaster from msgq.visionipc import VisionIpcClient, VisionStreamType, VisionBuf from openpilot.common.swaglog import cloudlog @@ -24,7 +24,7 @@ from openpilot.selfdrive.modeld.fill_model_msg import fill_model_msg, fill_pose_ from openpilot.selfdrive.modeld.constants import ModelConstants from openpilot.selfdrive.modeld.models.commonmodel_pyx import ModelFrame, CLContext -THREAD_NAME = "selfdrive.modeld.modeld" +PROCESS_NAME = "selfdrive.modeld.modeld" SEND_RAW_PRED = os.getenv('SEND_RAW_PRED') MODEL_PATHS = { @@ -114,9 +114,9 @@ class ModelState: def main(demo=False): cloudlog.warning("modeld init") - sentry.set_tag("daemon", THREAD_NAME) - cloudlog.bind(daemon=THREAD_NAME) - setthreadname(THREAD_NAME) + sentry.set_tag("daemon", PROCESS_NAME) + cloudlog.bind(daemon=PROCESS_NAME) + setproctitle(PROCESS_NAME) config_realtime_process(7, 54) cloudlog.warning("setting up CL context") @@ -286,7 +286,7 @@ if __name__ == "__main__": args = parser.parse_args() main(demo=args.demo) except KeyboardInterrupt: - cloudlog.warning(f"child {THREAD_NAME} got SIGINT") + cloudlog.warning(f"child {PROCESS_NAME} got SIGINT") except Exception: sentry.capture_exception() raise diff --git a/system/manager/process.py b/system/manager/process.py index 9214e417c1..36f299ae62 100644 --- a/system/manager/process.py +++ b/system/manager/process.py @@ -8,7 +8,7 @@ from collections.abc import Callable, ValuesView from abc import ABC, abstractmethod from multiprocessing import Process -from openpilot.common.threadname import setthreadname +from setproctitle import setproctitle from cereal import car, log import cereal.messaging as messaging @@ -27,7 +27,7 @@ def launcher(proc: str, name: str) -> None: mod = importlib.import_module(proc) # rename the process - setthreadname(proc) + setproctitle(proc) # create new context since we forked messaging.context = messaging.Context()