Skip to content

feat: reuseport activator - #196

Draft
ctrox wants to merge 28 commits into
mainfrom
reuseport-activator
Draft

feat: reuseport activator#196
ctrox wants to merge 28 commits into
mainfrom
reuseport-activator

Conversation

@ctrox

@ctrox ctrox commented Aug 9, 2026

Copy link
Copy Markdown
Owner

This adds a completely new activator that makes use of bpf_sk_select_reuseport to steer wake/probe traffic instead of a userspace proxy+port rewrites. With this, zeropod is completely out of the data path for normal app traffic.

Comment thread activator/reuse/activator.go Outdated
@ctrox
ctrox force-pushed the reuseport-activator branch 6 times, most recently from 8542bf1 to c37f2fa Compare August 12, 2026 05:38
ctrox added 17 commits August 14, 2026 07:59
This adds a completely new activator that makes use of bpf_sk_select_reuseport
to steer wake/probe traffic instead of a userspace proxy+port rewrites. With
this, zeropod is completely out of the data path for normal app traffic.
when concurrent connections hit the wake listener, we only want to register the
app listeners once.
This unifies the two activator APIs into an interface, making it possible to
simply switch between them in the shim depending on the config.
This makes it more durable and also allows to migrate from the old to
the new activator while keeping the same checkpoint image. This also
adds bind4/bind6 programs to ensure all listeners have SO_REUSEPORT set.
@ctrox
ctrox force-pushed the reuseport-activator branch from c37f2fa to e5bf065 Compare August 14, 2026 05:59
@ctrox
ctrox force-pushed the reuseport-activator branch from 3a0ed0b to c975767 Compare August 14, 2026 06:28
ctrox added 3 commits August 15, 2026 07:29
This adds a new binary zeropod-netinfo with a single purpose: it
extracts the [activator.Listeners] from a criu snapshot for when we
migrate from an older version where the snapshot did not contain a
zeropod_listeners.json. This is done in a saparate binary as importing
the crit grpc defs would balloon the binary and memory usage of the
shim.

Additionally, the old activator will also discover and write the
listeners before checkpointing.
With the new reuseport-activator we need to wait for the expected ports
to be listening before returning from restore, else we risk sending
traffic nowhere.
ctrox added 5 commits August 19, 2026 17:54
Else the activator might think we're already restored if it receives an
immediate request.
Double closing the wake fds caused some really bad bugs, especially
during capacity eviction.
instead of during restore where we potentially wipe activity data
Otherwise it's not relevant
@ctrox
ctrox force-pushed the reuseport-activator branch 3 times, most recently from ad88c92 to 7938a32 Compare August 19, 2026 19:19
@ctrox
ctrox force-pushed the reuseport-activator branch from 7938a32 to 5e78ac6 Compare August 19, 2026 19:30
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

Successfully merging this pull request may close these issues.

1 participant