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

Group freelist contention #1468

Closed
eugeneia opened this issue Jan 24, 2022 · 0 comments · Fixed by #1472
Closed

Group freelist contention #1468

eugeneia opened this issue Jan 24, 2022 · 0 comments · Fixed by #1472
Assignees
Labels

Comments

@eugeneia
Copy link
Member

Currently, the group freelist—which we use to allocated rebalance packet buffers between Snabb process within a group—is not able to sustain unidirectional, high-throughput use cases.

I.e. this is fine because the group freelist is not used much:

procA <--pair of interlinks --> procB (bidirectional traffic)

while this use-case is a problem:

procA --single interlink--> procB (procA needs to reclaim packets from procB)

The issue manifest as overly long pauses while the group freelist spinlock is held.

A workaround is currently to manually feed back packets from procB to procA and freeing them in procA (via a dedicated interlink).

It would be neat to solve this automatically however. Some possible approaches include:

  • reducing pause times by setting small upper limits on the number of packets rebalanced during rebalance_freelists and allocate
  • using a better lock-free data structure for group freelist
  • eliminating a global group freelist altogether and doing rebalancing between processes directly

Cc @alexandergall

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

Successfully merging a pull request may close this issue.

1 participant