-
Notifications
You must be signed in to change notification settings - Fork 325
Set default of flood_advert_interval to 48h, minimum interval to 12h #1217
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
This should help reducing congestion/noise in big meshes.
|
This is a bad idea as a default. New users won’t see anything for potentially 48 hours in sparse areas, leading them to think there is no MC there. If anything put it out in your nets to change or have some automatic determination. |
…om server default to 48h/12h min.
|
I'm not too comfortable with this PR. I would argue that:
|
People like to see repeaters fast when they join a small mesh. It is a "social thing" that makes meshes grow. Remember that traceability is a core feature of the core and monkey brains no likey "unknonwn hops". Your graph is flawed, you are just graphing "control traffic" which needs to be put into perspective with the main traffic this mesh should transport, private and group messages. If then advert ratio still stacks to 50% of your total traffic you have other problems at hand. |
I get that point. I propose to change the user experience on the app side, not with useless noise on the network side. E.g. put a big red "discover nearby repeaters"-button in the app, a little intro tutorial for newbees. Or a message to be patient.
My bad, I was not careful enough while screenshotting this from https://analyzer.letsme.sh/stats
Exactly. You can go to letsme.sh/stats and see for yourself. |
It does so easily as Advert packets are much larger in size than messages, thus taking up way more airtime etc. Currently we've seen total halts of the network due to just those flood adverts, so its something that needs to be addressed soon. This is just a temporary fix to reduce it a little bit, but its a start. Also opened a discussion topic here -> #1223 |
|
I would personally prefer to keep the minimum allowed flood advert interval as 3 hours. Setting it to 12 hours minimum now means if you miss 2 adverts, (likely when a repeater is a fair few hops away), you might have to wait several days to know if your repeaters are still alive. The firmware currently defaults to 12 hours, but having the ability to set it lower in smaller self-controlled meshes is very useful. I understand that in larger meshes the lower intervals can be problematic, but it's not set to 3 hours by default, so if a user changes it to that, there must be a reason. It's also noted there's been discussion where 12 hours is even too frequent, in extremely large meshes. So some other solution should be introduced to resolve the issue of too many adverts, rather than hard limiting the minimum. Just a note on the PR, if you're wanting to increase the minimum advert intervals, you'd need to change the validation in MeshCore/src/helpers/CommonCLI.cpp Line 374 in 2228214
The adverts are indeed large packets, but we want to prevent spoofing on the network, so the signatures need to be present. If the adverts are limited in minimum duration, there would need to be some other way to check that repeaters are alive, but this would also introduce more traffic. My opinion is that the adverts might as well serve this purpose. In larger meshes, the advert frequency could probably be automatically adjusted so it's not so frequent, or the adverts could be reduced in priority. I believe I saw some discussion about that idea already. |
That's true, but they see it in the settings and then be like; let's max everything out, not knowing what impact it has. So if we give the option, they surely will abuse it. But indeed, i think there could be more ways to approach this, like hard enforcing a certain amount of adverts per node per x time window etc on the repeater side. As people with companions also like to spam flood adverts a lot and we also see repeaters in bootloops ddossing the mesh etc. |
|
I'm not sure everyone is aware that the core has already a packet prioritization algorithm, where type advert is bottom queue. void Mesh::sendFlood(Packet* packet, uint32_t delay_millis) {
// ... setup code ...
uint8_t pri;
if (packet->getPayloadType() == PAYLOAD_TYPE_PATH) {
pri = 2;
} else if (packet->getPayloadType() == PAYLOAD_TYPE_ADVERT) {
pri = 3; // de-prioritie these
} else {
pri = 1;
}
sendPacket(packet, pri, delay_millis);
} |
We are, but it's not related to the queue nor its prioritization. |
IMO 3h is too low as min flood, compromising and going into 6h min would represent already a 25% saving. Also 60m is too low for zero-hop, specially now with local discovery, zero-hop advert could even be considered obsolete. |
Depends on mesh size and what mesh operators want. If @ripplebiz decides he wants to go ahead with an enforced minimum advert interval increase, I'd suggest that the minimum/maximum values are set as build flags, so they can be adjusted via the build script (for custom firmware distribution) without having to run a separate branch to allow lower minimums if mesh admins such as myself want 3 hour interval... 😂 I don't run official releases anyway, as I like to distribute firmware bins that have my radio preset baked in, so adding in a couple extra flags to set this would be my preferred way to go about it. |
Haha same! mine drops all adverts right when rx/tx util hits a certain threshold, but its not ideal and would be nicer to have this properly solved at some point. (not saying this is the final solution though, just gives a little bit more time to think of a better solution.) |
I strongly disagree. All of the neighbourhood "discovery" can be done with zero hop adverts or requests. The MC design philosophy is about data minimalism and robustness/reliability. Automated flooding with packets of quite substantial size "for new user experience" is harming both. |
|
zh-advert are obsolete because a flood advert will also notify zh-clients. |
Sorry i do not agree with your statement that zero hop is obsolete. Why: Meshcore is successfull and grows fast when a mesh doubles the number of advert triples. Its just numbers
So why do i not agree with you're statement that zero hop is obsolete. When flood adverts are minimized which is absolutely needed . Visibility off neighbors still need to be in place to give admins a way of checking link development and to check if links change due to network changes like changing cr or sf which will have impact on links. And zero hops is then the perfect solution already in place. And discovering neighbors is only bennefitting companions who are in a new surronding this does not function on an repeater. I am an old network architect worked more than 40 years in networking not in rf networks but every network that needed flooding to give some insight died when it became to large. The network was overloaded with floods and an normal operation was impossible. That is in my opinion what is awaiting meshcore when it does not come in action and i support this pr because it is a first step. But please keep zerohop in place. |
Even without further mesh growth, we already exceed the legal duty cycle in the Netherlands during quiet periods; the MC default of 50% is four times higher than our 10% limit.
This is debatable: zero-hop adverts are already off by default, so the data is less reliable than it seems. Since these measurements are only snapshots, trace would be a far more reliable way to observe link changes. But you will need a way to discover them on the repeater though, so or it would need the same discovery method as companions, or zero hop will still be needed for that. -- But i think we all agree, we need to eliminate automated flooding entirely, as it now accounts for over 50% of total traffic and overwhelms real messages with unwanted advertisements from across the country. On top of that, we also need better ways to limit companions that spam adverts manually, repeaters in boot-loops that flood advert every 30 seconds etc. Quite some challenges to overcome still. |
|
@wesselah DISCOVER_REQ replaces zh-advert (in a much more efficient way), that was my only point on that sentence. |
For companion only |
can't be implemented on repeaters as well? |
That's would be the same as Meshtastic does now, which they havent solved as today and why its unusable. From a pure congestion standpoint; we could simply allow it and above a certain airtime percentage, drop all flood adverts. That's how my repeater currently works and that seems to work fine, its always available for actual communication, even when people are in bootloops sending loads of adverts etc. Then when its less busy and there is room for it, flood adverts are repeated again like normally. This way it doesnt interfere with eachother. But this is just one of many solutions, basically flood = bad. |


This should help reducing congestion/noise in big meshes.
Also applies to room server.