Measured on onefinity.local (Pi 3, Raspbian Stretch, bbctrl 1.6.7). Before -> after: bbctrl listen boot+20.6s -> boot+12.4s (-8.2s) host -> /api/config/load 28.2s -> 22.5s (-5.7s) The 4 changes (each independently revertable): 1. scripts/bbserial-rebind.service: do the bbserial unbind + reload in a dedicated unit ordered Before=bbctrl.service, instead of in rc.local AFTER bbctrl is already listening on the serial port. Eliminates a full bbctrl restart mid-boot. 2. scripts/bbctrl.service: drop "After=network.target". bbctrl talks to the AVR on a local serial port and to the LCD on I2C; it does not need DHCP / network-online to come up. Also adds explicit ordering after the new bbserial-rebind unit. 3. scripts/rc.local.fast: trimmed rc.local that no longer touches bbserial and backgrounds 'startx' so chromium launches in parallel with bbctrl rather than after rc.local finishes. 4. src/py/bbctrl/Planner.py: lazy-import camotics.gplan. Costs ~130ms on cold cache, deferred from import-time to ctrl.mach init. 5. (bonus) src/py/bbctrl/Log.py: tolerate FileNotFoundError in _rotate(). The improved boot path exposed a pre-existing log rotator bug that crashed bbctrl on first start when bbctrl.log.16 was missing.
27 lines
953 B
Desktop File
27 lines
953 B
Desktop File
[Unit]
|
|
Description=Buildbotics Controller
|
|
# Note: bbctrl previously had `After=network.target`. That delays
|
|
# start by ~5s on this Pi while dhcpcd brings up wlan0/eth0, but
|
|
# bbctrl does not actually require network connectivity to come up
|
|
# (the AVR is on a local serial port, the LCD on I2C). Dropping it
|
|
# means the Pi shows the UI faster on cold boot. The wifi config UI
|
|
# still works because it queries iw/dhcpcd lazily on demand.
|
|
After=local-fs.target bbserial-rebind.service
|
|
Wants=bbserial-rebind.service
|
|
|
|
[Service]
|
|
User=root
|
|
ExecStart=/usr/local/bin/bbctrl -l /var/log/bbctrl.log
|
|
WorkingDirectory=/var/lib/bbctrl
|
|
Restart=always
|
|
# StandardOutput was 'null'. Set to 'journal' so TRACE lines emitted by
|
|
# bbctrl.Trace are visible via `journalctl -u bbctrl`. Bbctrl still
|
|
# writes its own log via -l above; this only affects stdout/stderr.
|
|
StandardOutput=journal
|
|
StandardError=journal
|
|
Nice=-10
|
|
KillMode=process
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|