From 4756d8e32cc33d1fd0ecf30272bb327082d3edfc Mon Sep 17 00:00:00 2001 From: Brian Hanson Date: Tue, 14 Apr 2026 02:28:19 -0500 Subject: [PATCH] disable tlog calls, add param gate to tlog client MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Comment out all tlog() calls in controlsd (100Hz) and carstate (100Hz) — was causing controlsd to lag from JSON serialization + ZMQ overhead - tlog() now checks TelemetryEnabled memory param (1/sec file read), returns immediately when disabled — zero cost when telemetry is off Co-Authored-By: Claude Opus 4.6 (1M context) --- selfdrive/car/hyundai/carstate.py | 61 ++++--------------------------- selfdrive/clearpilot/telemetry.py | 21 ++++++++++- selfdrive/controls/controlsd.py | 16 ++++---- 3 files changed, 35 insertions(+), 63 deletions(-) diff --git a/selfdrive/car/hyundai/carstate.py b/selfdrive/car/hyundai/carstate.py index f15adc3..7483ecb 100755 --- a/selfdrive/car/hyundai/carstate.py +++ b/selfdrive/car/hyundai/carstate.py @@ -421,59 +421,14 @@ class CarState(CarStateBase): # self.params_memory.put_float("CarSpeedLimitLiteral", self.calculate_speed_limit(cp, cp_cam)) self.params_memory.put_float("CarSpeedLimit", self.calculate_speed_limit(cp, cp_cam) * speed_factor) - # CLEARPILOT: telemetry logging - speed_limit_bus = cp if self.CP.flags & HyundaiFlags.CANFD_HDA2 else cp_cam - scc = cp_cam.vl["SCC_CONTROL"] if self.CP.flags & HyundaiFlags.CANFD_CAMERA_SCC else cp.vl["SCC_CONTROL"] - cluster = speed_limit_bus.vl["CLUSTER_SPEED_LIMIT"] - - tlog("car", { - "vEgo": round(ret.vEgo, 3), - "vEgoRaw": round(ret.vEgoRaw, 3), - "aEgo": round(ret.aEgo, 3), - "steeringAngleDeg": round(ret.steeringAngleDeg, 1), - "gear": str(ret.gearShifter), - "brakePressed": ret.brakePressed, - "gasPressed": ret.gasPressed, - "standstill": ret.standstill, - "leftBlinker": ret.leftBlinker, - "rightBlinker": ret.rightBlinker, - }) - - tlog("cruise", { - "enabled": ret.cruiseState.enabled, - "available": ret.cruiseState.available, - "speed": round(ret.cruiseState.speed, 3), - "standstill": ret.cruiseState.standstill, - "accFaulted": ret.accFaulted, - "brakePressed": ret.brakePressed, - "ACCMode": scc.get("ACCMode", 0), - "VSetDis": scc.get("VSetDis", 0), - "aReqRaw": round(scc.get("aReqRaw", 0), 3), - "aReqValue": round(scc.get("aReqValue", 0), 3), - "DISTANCE_SETTING": scc.get("DISTANCE_SETTING", 0), - "ACC_ObjDist": round(scc.get("ACC_ObjDist", 0), 1), - }) - - tlog("speed_limit", { - "SPEED_LIMIT_1": cluster.get("SPEED_LIMIT_1", 0), - "SPEED_LIMIT_2": cluster.get("SPEED_LIMIT_2", 0), - "SPEED_LIMIT_3": cluster.get("SPEED_LIMIT_3", 0), - "SCHOOL_ZONE": cluster.get("SCHOOL_ZONE", 0), - "CHIME_1": cluster.get("CHIME_1", 0), - "CHIME_2": cluster.get("CHIME_2", 0), - "SPEED_CHANGE_BLINKING": cluster.get("SPEED_CHANGE_BLINKING", 0), - "calculated": self.calculate_speed_limit(cp, cp_cam), - "is_metric": self.is_metric, - }) - - tlog("buttons", { - "cruise_button": self.cruise_buttons[-1], - "prev_cruise_button": self.prev_cruise_buttons, - "main_button": self.main_buttons[-1], - "prev_main_button": self.prev_main_buttons, - "lkas_enabled": self.lkas_enabled, - "main_enabled": self.main_enabled, - }) + # CLEARPILOT: telemetry logging — disabled, re-enable when needed + # speed_limit_bus = cp if self.CP.flags & HyundaiFlags.CANFD_HDA2 else cp_cam + # scc = cp_cam.vl["SCC_CONTROL"] if self.CP.flags & HyundaiFlags.CANFD_CAMERA_SCC else cp.vl["SCC_CONTROL"] + # cluster = speed_limit_bus.vl["CLUSTER_SPEED_LIMIT"] + # tlog("car", { ... }) + # tlog("cruise", { ... }) + # tlog("speed_limit", { ... }) + # tlog("buttons", { ... }) return ret diff --git a/selfdrive/clearpilot/telemetry.py b/selfdrive/clearpilot/telemetry.py index 1ded08f..a59a270 100644 --- a/selfdrive/clearpilot/telemetry.py +++ b/selfdrive/clearpilot/telemetry.py @@ -6,20 +6,39 @@ Usage from any process: tlog("canbus", {"speed": 45.2, "speed_limit": 60}) Sends JSON packets over ZMQ PUSH to telemetryd, which diffs and writes CSV. +Only sends when TelemetryEnabled memory param is set — zero cost when disabled. """ import json +import os import time import zmq TELEMETRY_SOCK = "ipc:///tmp/clearpilot_telemetry" +_PARAM_PATH = "/dev/shm/params/d/TelemetryEnabled" _ctx = None _sock = None +_last_check = 0 +_enabled = False def tlog(group: str, data: dict): """Log a telemetry packet. Only changed values will be written to CSV by telemetryd.""" - global _ctx, _sock + global _ctx, _sock, _last_check, _enabled + + # Check param at most once per second to avoid filesystem overhead + now = time.monotonic() + if now - _last_check > 1.0: + _last_check = now + try: + with open(_PARAM_PATH, 'r') as f: + _enabled = f.read().strip() == "1" + except (FileNotFoundError, IOError): + _enabled = False + + if not _enabled: + return + if _sock is None: _ctx = zmq.Context.instance() _sock = _ctx.socket(zmq.PUSH) diff --git a/selfdrive/controls/controlsd.py b/selfdrive/controls/controlsd.py index 00f9d8c..b71e90d 100755 --- a/selfdrive/controls/controlsd.py +++ b/selfdrive/controls/controlsd.py @@ -639,15 +639,13 @@ class Controls: self.enabled = self.state in ENABLED_STATES self.active = self.state in ACTIVE_STATES - # CLEARPILOT: log engagement state for debugging cruise desync issues - tlog("engage", { - "state": self.state.name if hasattr(self.state, 'name') else str(self.state), - "enabled": self.enabled, - "active": self.active, - "cruise_enabled": CS.cruiseState.enabled, - "cruise_available": CS.cruiseState.available, - "brakePressed": CS.brakePressed, - }) + # CLEARPILOT: engagement telemetry disabled — was running at 100Hz, causing CPU load + # tlog("engage", { + # "state": self.state.name if hasattr(self.state, 'name') else str(self.state), + # "enabled": self.enabled, "active": self.active, + # "cruise_enabled": CS.cruiseState.enabled, "cruise_available": CS.cruiseState.available, + # "brakePressed": CS.brakePressed, + # }) if self.active: self.current_alert_types.append(ET.WARNING)