macos: use /tmp instead of /dev/shm (#34097)

* No /dev/shm on MacOS so we go to tmp instead given that the /dev/shm makes tests not really work fine on mac

* Cleanups

Fix cereal messaging tests

* keep msgq stock

More shm updates for macos

* typo

* fix return

* Semicolon...
pull/34156/head
DevTekVE 5 months ago committed by GitHub
parent 75bf756893
commit 8f7bbe4ee3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 2
      cereal/messaging/tests/test_services.py
  2. 2
      common/prefix.h
  3. 2
      common/prefix.py
  4. 3
      common/watchdog.cc
  5. 5
      selfdrive/test/process_replay/process_replay.py
  6. 8
      system/hardware/hw.h
  7. 7
      system/hardware/hw.py
  8. 6
      system/manager/manager.py
  9. 3
      system/manager/process.py

@ -17,5 +17,5 @@ class TestServices:
def test_generated_header(self):
with tempfile.NamedTemporaryFile(suffix=".h") as f:
ret = os.system(f"python3 {services.__file__} > {f.name} && clang++ {f.name}")
ret = os.system(f"python3 {services.__file__} > {f.name} && clang++ {f.name} -std=c++11")
assert ret == 0, "generated services header is not valid C"

@ -13,7 +13,7 @@ public:
if (prefix.empty()) {
prefix = util::random_string(15);
}
msgq_path = "/dev/shm/" + prefix;
msgq_path = Path::shm_path() + "/" + prefix;
bool ret = util::create_directories(msgq_path, 0777);
assert(ret);
setenv("OPENPILOT_PREFIX", prefix.c_str(), 1);

@ -11,7 +11,7 @@ from openpilot.system.hardware.hw import DEFAULT_DOWNLOAD_CACHE_ROOT
class OpenpilotPrefix:
def __init__(self, prefix: str = None, clean_dirs_on_exit: bool = True, shared_download_cache: bool = False):
self.prefix = prefix if prefix else str(uuid.uuid4().hex[0:15])
self.msgq_path = os.path.join('/dev/shm', self.prefix)
self.msgq_path = os.path.join(Paths.shm_path(), self.prefix)
self.clean_dirs_on_exit = clean_dirs_on_exit
self.shared_download_cache = shared_download_cache

@ -2,8 +2,9 @@
#include "common/watchdog.h"
#include "common/util.h"
#include "system/hardware/hw.h"
const std::string watchdog_fn_prefix = "/dev/shm/wd_"; // + <pid>
const std::string watchdog_fn_prefix = Path::shm_path() + "/wd_"; // + <pid>
bool watchdog_kick(uint64_t ts) {
static std::string fn = watchdog_fn_prefix + std::to_string(getpid());

@ -5,13 +5,13 @@ import copy
import json
import heapq
import signal
import platform
from collections import Counter, OrderedDict
from dataclasses import dataclass, field
from typing import Any
from collections.abc import Callable, Iterable
from tqdm import tqdm
import capnp
from openpilot.system.hardware.hw import Paths
import cereal.messaging as messaging
from cereal import car
@ -780,8 +780,7 @@ def generate_params_config(lr=None, CP=None, fingerprint=None, custom_params=Non
def generate_environ_config(CP=None, fingerprint=None, log_dir=None) -> dict[str, Any]:
environ_dict = {}
if platform.system() != "Darwin":
environ_dict["PARAMS_ROOT"] = "/dev/shm/params"
environ_dict["PARAMS_ROOT"] = f"{Paths.shm_path()}/params"
if log_dir is not None:
environ_dict["LOG_ROOT"] = log_dir

@ -47,4 +47,12 @@ namespace Path {
}
return "/tmp/comma_download_cache" + Path::openpilot_prefix() + "/";
}
inline std::string shm_path() {
#ifdef __APPLE__
return"/tmp";
#else
return "/dev/shm";
#endif
}
} // namespace Path

@ -1,4 +1,5 @@
import os
import platform
from pathlib import Path
from openpilot.system.hardware import PC
@ -56,3 +57,9 @@ class Paths:
return Paths.comma_home()
else:
return "/tmp/.comma"
@staticmethod
def shm_path() -> str:
if PC and platform.system() == "Darwin":
return "/tmp" # This is not really shared memory on macOS, but it's the closest we can get
return "/dev/shm"

@ -17,7 +17,7 @@ from openpilot.system.manager.process_config import managed_processes
from openpilot.system.athena.registration import register, UNREGISTERED_DONGLE_ID
from openpilot.common.swaglog import cloudlog, add_file_handler
from openpilot.system.version import get_build_metadata, terms_version, training_version
from openpilot.system.hardware.hw import Paths
def manager_init() -> None:
@ -52,11 +52,11 @@ def manager_init() -> None:
# Create folders needed for msgq
try:
os.mkdir("/dev/shm")
os.mkdir(Paths.shm_path())
except FileExistsError:
pass
except PermissionError:
print("WARNING: failed to make /dev/shm")
print(f"WARNING: failed to make {Paths.shm_path()}")
# set version params
params.put("Version", build_metadata.openpilot.version)

@ -16,8 +16,9 @@ import openpilot.system.sentry as sentry
from openpilot.common.basedir import BASEDIR
from openpilot.common.params import Params
from openpilot.common.swaglog import cloudlog
from openpilot.system.hardware.hw import Paths
WATCHDOG_FN = "/dev/shm/wd_"
WATCHDOG_FN = f"{Paths.shm_path()}/wd_"
ENABLE_WATCHDOG = os.getenv("NO_WATCHDOG") is None

Loading…
Cancel
Save