From: Laurent Vivier <lvivier@redhat.com>
To: passt-dev@passt.top
Cc: Laurent Vivier <lvivier@redhat.com>
Subject: [PATCH v2 0/6] Refactor epoll handling in preparation for multithreading
Date: Tue, 7 Oct 2025 18:40:20 +0200 [thread overview]
Message-ID: <20251007164026.3882026-1-lvivier@redhat.com> (raw)
This series refactors how epoll file descriptors are managed throughout
the codebase in preparation for introducing multithreading support.
Currently, passt uses a single global epollfd accessed through the
context structure. With multithreading, each thread will need its own
epollfd managing its subset of flows.
The key changes are:
1. Centralize epoll management by extracting helper functions into a new
epoll_ctl.c/h module and moving union epoll_ref from passt.h to its
more logical location in epoll_ctl.h.
2. Simplify epoll_del() to take the epollfd directly rather than
extracting it from the context structure, reducing coupling between
epoll operations and the global context.
3. Move epoll registration out of sock_l4_sa() into protocol-specific
code, giving callers explicit control over which epoll instance
manages each socket.
4. Replace the boolean in_epoll flag in TCP connections with an epollfd
field in flow_common. This serves dual purposes: tracking registration
status (EPOLLFD_INVALID = not registered) and identifying the owning
epoll instance. The epollfd field is 8 bits, limiting values to 0-254
(255 = EPOLLFD_INVALID).
5. Apply this pattern consistently across all protocol handlers (TCP,
ICMP, UDP), storing the managing epollfd in each flow's common
structure.
These changes make epoll ownership explicit in the flow tracking system,
enabling flows to be managed by different epoll instances, a prerequisite
for per-thread epollfd design in upcoming multithreading work.
Changes since v1:
- New patch: "epoll_ctl: Extract epoll operations" - centralizes epoll
helpers into a dedicated module and relocates union epoll_ref from
passt.h to epoll_ctl.h
- Changed epollfd type in flow_common from int to 8-bit bitfield to avoid
exceeding cacheline size threshold
- Added flow_epollfd_valid() helper to check epoll registration status
- Added flow_set_epollfd() helper to set the epoll instance for a flow
Laurent Vivier (6):
util: Simplify epoll_del() interface to take epollfd directly
epoll_ctl: Extract epoll operations
util: Move epoll registration out of sock_l4_sa()
tcp, flow: Replace per-connection in_epoll flag with epollfd in
flow_common
icmp: Use epollfd from flow_common structure
udp: Use epollfd from flow_common structure
Makefile | 22 +++++++++++-----------
epoll_ctl.c | 45 +++++++++++++++++++++++++++++++++++++++++++++
epoll_ctl.h | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
flow.c | 36 +++++++++++++++++++++++++++++-------
flow.h | 10 +++++++++-
icmp.c | 23 +++++++++++++++--------
passt.c | 2 +-
passt.h | 34 ----------------------------------
pasta.c | 7 +++----
pif.c | 32 +++++++++++++++++++++++++-------
repair.c | 14 +++++---------
tap.c | 15 +++++----------
tcp.c | 38 +++++++++++++++++++-------------------
tcp_conn.h | 8 +-------
tcp_splice.c | 25 ++++++++++++-------------
udp.c | 2 +-
udp_flow.c | 23 +++++++++++++++++++----
util.c | 28 ++--------------------------
util.h | 6 ++++--
vhost_user.c | 14 +++++---------
vu_common.c | 2 +-
21 files changed, 263 insertions(+), 174 deletions(-)
create mode 100644 epoll_ctl.c
create mode 100644 epoll_ctl.h
--
2.50.1
next reply other threads:[~2025-10-07 16:40 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-07 16:40 Laurent Vivier [this message]
2025-10-07 16:40 ` [PATCH v2 1/6] util: Simplify epoll_del() interface to take epollfd directly Laurent Vivier
2025-10-07 16:40 ` [PATCH v2 2/6] epoll_ctl: Extract epoll operations Laurent Vivier
2025-10-07 16:40 ` [PATCH v2 3/6] util: Move epoll registration out of sock_l4_sa() Laurent Vivier
2025-10-07 16:40 ` [PATCH v2 4/6] tcp, flow: Replace per-connection in_epoll flag with epollfd in flow_common Laurent Vivier
2025-10-07 16:40 ` [PATCH v2 5/6] icmp: Use epollfd from flow_common structure Laurent Vivier
2025-10-07 16:40 ` [PATCH v2 6/6] udp: " Laurent Vivier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251007164026.3882026-1-lvivier@redhat.com \
--to=lvivier@redhat.com \
--cc=passt-dev@passt.top \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://passt.top/passt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for IMAP folder(s).