Conversation
Update Docs URL
…or changes - Add multi byte FAQ - Reword amped radio output setting numbers - Clarify repeater ID collision including distance, supercede meshcore-dev#1478 - Reference awesome meshcore for community projects. Supercede meshcore-dev#1893
Removed "see note" from RAK 4631 entry in FAQ.
Fixed an extra TOC jump link inserted by VSCode Markdown All in One VS Code extension.
fixed typos and refined multibyte sections.
add multibyte FAQ, reference awesome-meshcore community projects, minor changes
Update RAK 4631 entry in FAQ on new bootloader - removed "see note"
# Conflicts: # docs/faq.md
… - improving ACK delivery and number of ACK received - theoretically ensuring that if DM is delivered - at least one ACK is received by sender.
|
In the prior PR the frequency of the neighbor count was every 5 min. This is far too frequent and is consuming compute resources that can be utilized elsewhere. While the SNR of a received Advert can vary several dB from message to message (pings can change on every one sent) and this can affect the neighbor count (for repeaters close to the 0dB SNR threshold), but the surrounding number of repeaters actually changes very slowly. I believe the count should be done daily, twice a week or once a week. |
|
I've been watching this work across the two pull request conversations. This was a heavy lift, deserving of strong consideration amongst the devs. At a minimum, the existing defaults are not optimal. The power of the autotune algorithm approach is that it makes all repeaters "good neighbors" who will adapt their settings in harmony as the mesh evolves. |
Correct- on one hand calculating every couple of minutes is not a big burden, yet for the sake of clean code I have moved that to advert recp. Code. |
-- For the last point - very valid point, let me update that. |
It was one repeater to test this feature. The delays were set so high it effectively stopped relaying packets, everything but its admin interface was handled by other repeaters around. It stopped showing up in outbound and inbound paths. |
In fact - this is not bad thing what you observed, it’s in fact desired effect. The purpose of mesh network is NOT to ensure that every repeater is transmitting but to ensure effectivenes of the overall network. Not to go into details - ‚all the repeaters in the area carried on the transmission but your one was silent’ - if then - due to collisions - ‚all the other traffic would fails’ - your repeater will retransmit with a delay - giving the chance to deliver message, and opposite - if ‚all the other traffic’ will deliver, your one won’t be even required (it will kind of reduce density of network - what is a recommended thing). And this is the purpose of PR - to increase overall probability of delivery (ACK) - it is NOT to increase single repeater number of transmissions. Effectiveness is not coming here from how quick re-transmission is done - but is coming from probability of evading collisions with other repeaters. Hope- I’m clear in my explanation. |
|
Here are theoretical results with 2 scenarios - 1. We address the busiest routers in an organized way, 2. We address randomly routers with auto delay function. Degree Strategy (upgrade busiest nodes first)
Random Strategy (uncoordinated rollout - random repeaters uses auto-delay)
Radio Efficiency (collision-free RX ratio)
1. Mixed firmware outperforms full optimization on ACK deliveryThe best ACK rate (30%) occurs at degree 50-75%, not at 100% (27%) - as it comes from the scenario 1 - it means - addressing the most busiest repeaters
Note - around 75% we are reaching 1 ack delivered - so that's another reason to see that ass a sweet-spot setting. 2. Channel (broadcast) delivery peaks at degree 75%Channel delivery reaches 84% at degree 75% — a +22pp improvement over the 0% baseline (62%) and +12pp over full optimization (72%). 3. Degree strategy is consistently better than random
|
|
Sorry for the late comment: |
|
I'd say it's still too agressive. I've switched auto-tuning on two my repeaters pointed no the north and south of the high-rise I'm in, and dropped tx power on the companion, so nobody but them will hear it. |
Well... everything base on probability, not on feelings. However - I admit - scenario where sequences of messages is sent was not tested. |
|
@stachuman Idk about a scenario, but maybe capping the delays at maybe 20s max isn't a bad idea. |
|
stachuman, From a theoretical point of view this is easy to see: the probability of a collision drops off as the number of slots increases, however if the number of neighbors increases it counteracts that benefit. Essentially, if the number of neighbors doubles the number of slots needs to double. This does lead to high delay values in a very dense mesh. But remember in my comments on "success" I did mention that as this increases it does introduce a delay and when that delay becomes humanly noticeable (40 seconds definitely exceeded that threshold) it would need to be capped. A "balanced" or throttled setting is needed. One thing is clear, an automatic tuning does improve mesh performance, and the current defaults are bad settings, in that they provide insufficient backoff. The mesh works better when collisions are reduced and backoff reduces collisions. The question and discussion at hand is what should the table entries be for each neighbor count? The discussion also needs to be about what the "success criteria" should be: what metric should be used? Just one? A combination? How should balancing be done. This will likely be contentious and have many different and sometimes opposing views. But the discussion is GOOD, all views should be entertained. That usually will generate a better result. I hope the dev experts will participate. So, given the data we have: Can we start with a conservative table to enable automatic tuning and finalize the table later? Lets take the low hanging fruit that is right in front of us. One comment regarding some comments that this is a centralized approach. It is not, it is decentralized since each repeater can have its own setting. This can be disabled and any repeater owner can set the values they choose. It is not forcing any particular setting, it allows choice and optimization. The immediate value here is getting the defaults changed to a better setting (eliminate the majority of repeaters being set at the insufficient default values, we need to be good neighbors to each other, just one repeater setting it to better values will help their neighbor, but if the neighbors continue to stomp on you... well, it's best if we are all good neighbors) Plus having the ability to adjust based on density, "the mesh" can adjust for the future. Optimization of the optimizer can come later. My opinion: For what it is worth.. Last item: do we know why rxdelay does not affect the simulation results? It should... That can easily be added to the table as another column. But with what settings... Can it be added and left all 0's (the current default) until we get a future better table and understand what is going on and the "optimum" settings. rxdelay is a secondary benefit, but it is a tool in our chest why not use it. |

Improving ACK delivery and number of ACK received - theoretically ensuring that if DM is delivered - at least one ACK is received by sender (we speak of probability!)
This base on an extensive simulations (over 100k simulations done - dedicated simulator built (hopefully can be used also for other purposes)) - all details and road to this PR can be traced in this discussion #2053
Proposal base on theoretical work of KPrivitt and my simulations (all source data used for simulations are available on my github page)
--
There are some differences comparing to the previous PR
set auto.tune.delays on/off
Measured performance at defaults (same 4 topologies, 6 rnd seeds each):
Proposed changes - autotune tx/direct tx delays: