Hi folks,
I've been trying hard to optimise battery performance of a mobile client (Columba specifically, but I believe this is relevant to any mobile client), being mostly concerned about performance on cellular data.
I tried a few things, but the most effective ones turned out to be:
- Using an AP mode backbone interface when on cellular. (The docs mention LoRa transport nodes as the featured use-case for AP mode, but I believe this is a valid use-case too.)
- Increasing the tcp keepalive interval of the interface from 2 seconds to 5 minutes. (This is what Conversations, the xmpp app, does and it shows stellar battery performance without relying on push notifications.)
This way the cellular radio can sleep for longer periods resulting in much lower discharge rate: ~7-10x more.
The TCP keepalive intervals are unfortunately hardcoded in the RNS interfaces, so I had to roll a custom interface that basically extends BackboneInterface and does a couple of overrides to make the keepalive options configurable.
My questions:
a. Does this setup make sense or am I missing some considerations?
b. Do you think there's merit in making keepalive options configurable upstream and pleading with node ops to adjust configs? (or better update defaults upstream.)
All other performance battery optimizations seem futile: how well you manage wakelocks doesn't matter, if you want to maintain persistent connection and that connection is keeping the most power hungry component, the radio, awake.
Thanks in advance.