Skip to content

v1.1.12

Choose a tag to compare

@M-Chris M-Chris released this 10 Oct 14:17
· 3 commits to main since this release

A scheduling release for the epoll transport. Nothing on the wire changes;
no export, capability flag or option is added, removed or renamed.

epoll transport: replies grouped by peer CPU

The sockets a loop turn reports readable are now served in that turn's
check phase, grouped by the CPU their peer's packets arrive on
(SO_INCOMING_CPU: the peer thread's CPU over loopback, the receive
queue's CPU behind a NIC) and by socket number within a group; which group
goes first rotates from turn to turn. The kernel reports readiness in an
order that says nothing about who is on the other end. A peer that drives
many connections from one event loop - a proxy, a connection pool, a load
generator - now gets its replies back to back and is woken once per group
instead of once per reply, and that wake-up is paid in the sender's
send(), so the grouping is cheaper on both sides. Every socket reported
in a turn is served in that turn; the group key is read at accept and
refreshed every 1024 reads, and a kernel without the option leaves every
socket in one group.