Files
mikkeli 17be962e57 mosquitto: set_tcp_nodelay, raw CAN throughput measured
Nagle on the broker held small messages to subscribers ~40 ms at CAN rates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DDwfd6Ki8UfG4hK6W5YpJz
2026-10-12 20:48:41 +09:00

1.8 KiB

type, date
type date
report 2026-10-12

Mosquitto: the bus on the car Orin

The message bus (project-yukart decision 4), installed on the car unit.

Install

sudo apt-get install mosquitto mosquitto-clients     # 2.0.11-1ubuntu1.2 on Ubuntu 22.04

/etc/mosquitto/conf.d/yukart.conf:

# Yukart bus. Local only: displays reach it through svc-gw, never directly.
listener 1883 127.0.0.1
allow_anonymous true
set_tcp_nodelay true

systemctl enable --now mosquitto. It listens on 127.0.0.1:1883 only, so anonymous access is local access; nothing on the LAN, the tailnet or LTE can reach it.

Behaviour worth knowing

  • Retained messages survive a reboot. Ubuntu's mosquitto.conf sets persistence true (/var/lib/mosquitto/), so after a reboot the broker hands out the last values from before it. svc-gw therefore treats a value known only from a retained copy as stale until a live one arrives.
  • set_tcp_nodelay true turns Nagle's algorithm off for the broker's sockets. Without it, small messages to subscribers wait for the previous one's ACK: a 40 ms tail at raw CAN rates (svc-core BUS-BENCH.md).
  • Units that use the broker order themselves After=mosquitto.service and nothing else, and reconnect by themselves when it restarts.
  • Startup tier 1 (project-yukart docs/ORIN-RUNTIME.md).

First use

orin-status (svc-core) publishes the Orin's health on yukart/host/<signal> once a second; svc-gw subscribes and serves it to the tablet. Watching it:

mosquitto_sub -v -t 'yukart/#'

Throughput

Raw CAN rates are fine: a saturated 500 kbit/s bus (~4,400 frames/s) lost no frames, per frame or batched; batched it costs the broker about 1 % of a core. Measured 2026-10-12, svc-core docs/impl/reports/BUS-BENCH.md.