Skip to content
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

Timer accuracy is way off #16

Open
mweinelt opened this issue May 18, 2019 · 3 comments
Open

Timer accuracy is way off #16

mweinelt opened this issue May 18, 2019 · 3 comments

Comments

@mweinelt
Copy link

The accuracy with which timers run is way off. There are times when the seconds pass quite normally and then the timers are stuck for minutes at a time.

This leads to missing MLD queries and therefore missing group joins.

This happens with a granularity of 5. Setting a granularity of 1 leads to much more reasonable timer behaviour.

The hardware this happens on is x86_64 (APU2c4) with Linux 4.19.37.

@T-X
Copy link
Contributor

T-X commented May 18, 2019

On a 32bit armhf/ARMv7 device (Odroid U3) with a 4.19.28 kernel as provided by Debian Sid both "granularity 1" and "granularity 5" seemed to transmit MLD queries in regular intervals. We were not able to reproduce the issue on my side yet.

@troglobit
Copy link
Owner

troglobit commented May 18, 2019

This is serious, the default is 5 seconds ... I've seen similar issues in pimd and mrouted, which use the same pattern for their timer handling. I'll look into it!

Update: pimd has the same 5 second granularity, but it's hard-coded and cannot be configured like in pim6sd. The code seems to be similar, if not identical. I'll add some debug messages from pimd to increase the observability a bit.

@troglobit
Copy link
Owner

troglobit commented May 18, 2019

OK, there's one case when pim6sd will wait "forever", i.e. call select() with NULL as timeout. That's when there is no timers to service, typically when there are more than one router on a link and ours is not the elected querier. In that case pim6sd will wait for the next incoming message before it wakes up.

There should at least be a router/querier timeout, in case the neighboring (elected) querier stops sending queries. So that seems to be a bug/omission.

Update: Nah, my bad. There's a MLD6_OTHER_QUERIER_PRESENT_INTERVAL timer to handle that, default 255 sec.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants