Conversation
The P1 branch set path_table_maxsize(500), copied from the RAK external flash modules where it was sized for their flash. The path store's index lives in RAM: each record costs a FileStore index entry plus a _path_states entry, about 140 bytes. Measured on the solar node, the table sat at 446-479 records — roughly 65 KB of a 140 KB pool, which was the whole baseline it booted with before a 64-byte allocation failed 30 hours later. At 150 the same node boots at 61% pool used with 46 KB free, against 73% and 22 KB before. Repins microReticulum on a58ef77, which gates the neighbour-stats scan to an interval instead of running it every jobs() tick, and culls the announce table to its own limit. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SJZ75CWob1eMXeTa8Q2nLc
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SJZ75CWob1eMXeTa8Q2nLc
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SJZ75CWob1eMXeTa8Q2nLc
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The solar P1 ran out of memory after 30 hours:
ContainerAllocator failed to allocate memory (64 bytes), with 30 KB nominally free — fragmentation, not exhaustion. Three things were behind it, found from the node's ownHeap Pool Statsover a 30-hour soak plus an audit of the stack's containers.The path table was sized for flash, not RAM
The P1's QSPI branch set
path_table_maxsize(500), copied from the RAK external-flash modules. But the path store's index lives in RAM: every record costs a FileStore index entry plus a_path_statesentry, about 140 bytes together. Measured on the node, the table sat at 446–479 records — roughly 65 KB of a 140 KB pool, which accounted for the entire 104 KB baseline it booted with.At 150 records the same node boots at 61% pool used with 46 KB free, against 73% and 22 KB before. The store is LRU, so the paths in use are the ones it keeps.
The neighbour scan ran every jobs() tick (ScotMesh/microReticulum a58ef77)
_scan_neighbor_stats()walked the whole stats map on every tick — four times a second — allocating a candidate vector and a hex string per neighbour per pass. In one hour of the soak: 7,082 scans and 13,166 skip traces. The per-neighbour rate limits bound the probe traffic, not the scan. Nothing it inspects can change faster than the 300-second suspicion and probe windows, so it is now gated at 15 seconds like every other periodic job in that loop.cull_announce_table stopped on the wrong limit (same commit)
It triggers on
_announce_table_maxsizebut broke on_path_table_maxsize, so what it trimmed to depended on an unrelated table's size.Measured
Still open
There is no age-based path expiry in this port: the
PATHFINDER_Esweep is a comment,DestinationEntry._expiresis computed and stored but never read, and the only TTL is a week checked lazily on access. The cap is a ceiling, not a cure — the underlying drift was +307 bytes/hour._held_announcesand_announce_rate_tablealso have no removal path, though both are dormant on this node.🤖 Generated with Claude Code
https://claude.ai/code/session_01SJZ75CWob1eMXeTa8Q2nLc