[erts] Scheduler pollset migration only when single process enif_select #10323
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.
Potential fix for #10322
If I'm understanding what happens when scheduler pollset migration gets triggered: once the
state->count++ > 10, we migrate the "hot fd" to the scheduler pollset.However, the
state->count++is global, so if there are multiple processes all callingsocket:acceptat the same time, thenstate->count++ > 10could be triggered almost immediately.For things like
socket:recv, this generally would work as expected since there is typically one process calling this in a loop.However, for
socket:accept, it's more of a common practice to have multiple processes all trying to accept inbound connections.If all of that's correct, then this is my assumption:
The change here is to add a
state->last_select_pidfield and reset thestate->count = 0if we detect that the process has changed between calls toenif_select.