Cold-boot: 4 optimisations cutting bbctrl listen by ~8s on the Pi
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.
This commit is contained in:
21
scripts/bbserial-rebind.service
Normal file
21
scripts/bbserial-rebind.service
Normal file
@@ -0,0 +1,21 @@
|
||||
[Unit]
|
||||
Description=Unbind ttyAMA0 from pl011 and reload bbserial
|
||||
DefaultDependencies=no
|
||||
After=systemd-modules-load.service local-fs.target
|
||||
Before=bbctrl.service
|
||||
ConditionPathExists=/sys/bus/amba/drivers/uart-pl011
|
||||
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
# Tolerate the device already being bound elsewhere or the module
|
||||
# already being loaded — the goal is the end state (bbserial owns
|
||||
# ttyAMA0), not running the steps.
|
||||
ExecStart=/bin/sh -c '\
|
||||
echo 3f201000.serial > /sys/bus/amba/drivers/uart-pl011/unbind 2>/dev/null || true; \
|
||||
/sbin/modprobe -r bbserial 2>/dev/null || true; \
|
||||
/sbin/modprobe bbserial \
|
||||
'
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
Reference in New Issue
Block a user