Custom setproctitle (#32667)
* add custom setproctitle
* add test
* Update poetry.lock
* fix lint
* support only Linux
* test only Linux
* final lint
* Update test_setproctitle.py
* Update setproctitle.py
* convert to threadnames
* delete proctitles
* Check str len and use PR_GET_NAME
* fix poetry.lock
* lint fix
* Update common/threadname.py
---------
Co-authored-by: reddyn12 <nikhilr.ssm@gmail.com>
Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>
old-commit-hash: 3365ed5eff
This commit is contained in:
parent
50dd024081
commit
afea57ae2a
|
@ -4,7 +4,7 @@ import os
|
|||
import time
|
||||
from collections import deque
|
||||
|
||||
from setproctitle import getproctitle
|
||||
from openpilot.common.threadname import getthreadname
|
||||
|
||||
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._process_name = getproctitle()
|
||||
self._thread_name = getthreadname()
|
||||
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._process_name} lagging by {-remaining * 1000:.2f} ms")
|
||||
print(f"{self._thread_name} lagging by {-remaining * 1000:.2f} ms")
|
||||
lagged = True
|
||||
self._frame += 1
|
||||
self._remaining = remaining
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
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()
|
|
@ -0,0 +1,19 @@
|
|||
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 ""
|
|
@ -1,3 +1,3 @@
|
|||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:0d9f6a97cc9f69ab14aaa50e64ee4bd0da11fa1b2fa8314d7b7ec4a380fe9e8f
|
||||
size 618404
|
||||
oid sha256:e3c0ed6349feb2a75a11fab5939e40b757c735855c617b9147de3d614e0b6c50
|
||||
size 603428
|
||||
|
|
|
@ -137,7 +137,6 @@ 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]
|
||||
|
|
|
@ -3,7 +3,7 @@ import os
|
|||
import time
|
||||
import numpy as np
|
||||
from multiprocessing import Process
|
||||
from setproctitle import setproctitle
|
||||
from openpilot.common.threadname import setthreadname
|
||||
|
||||
def waste(core):
|
||||
os.sched_setaffinity(0, [core,])
|
||||
|
@ -16,7 +16,7 @@ def waste(core):
|
|||
j = 0
|
||||
while 1:
|
||||
if (i % 100) == 0:
|
||||
setproctitle("%3d: %8d" % (core, i))
|
||||
setthreadname("%3d: %8d" % (core, i))
|
||||
lt = time.monotonic()
|
||||
print("%3d: %8d %f %.2f" % (core, i, lt-st, j))
|
||||
st = lt
|
||||
|
|
|
@ -6,7 +6,7 @@ import numpy as np
|
|||
import cereal.messaging as messaging
|
||||
from cereal import car, log
|
||||
from pathlib import Path
|
||||
from setproctitle import setproctitle
|
||||
from openpilot.common.threadname import setthreadname
|
||||
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
|
||||
|
||||
PROCESS_NAME = "selfdrive.modeld.modeld"
|
||||
THREAD_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", PROCESS_NAME)
|
||||
cloudlog.bind(daemon=PROCESS_NAME)
|
||||
setproctitle(PROCESS_NAME)
|
||||
sentry.set_tag("daemon", THREAD_NAME)
|
||||
cloudlog.bind(daemon=THREAD_NAME)
|
||||
setthreadname(THREAD_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 {PROCESS_NAME} got SIGINT")
|
||||
cloudlog.warning(f"child {THREAD_NAME} got SIGINT")
|
||||
except Exception:
|
||||
sentry.capture_exception()
|
||||
raise
|
||||
|
|
|
@ -8,7 +8,7 @@ from collections.abc import Callable, ValuesView
|
|||
from abc import ABC, abstractmethod
|
||||
from multiprocessing import Process
|
||||
|
||||
from setproctitle import setproctitle
|
||||
from openpilot.common.threadname import setthreadname
|
||||
|
||||
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
|
||||
setproctitle(proc)
|
||||
setthreadname(proc)
|
||||
|
||||
# create new context since we forked
|
||||
messaging.context = messaging.Context()
|
||||
|
|
Loading…
Reference in New Issue