Summary
The io_uring backend has no async runtime (README: request_handler only). The HttpArena DB endpoints call the blocking db.pg client (PQexecParams) synchronously inside the single-threaded ring worker → head-of-line blocking, the ring stalls on every query.
Impact (HttpArena, vanilla-io_uring vs vanilla-epoll)
async-db ~10.7k rps (epoll ~280k) — ~26× behind its own epoll
fortunes ~41 rps (epoll ~165k)
api-16 ~28k, api-4 ~29k, crud ~225k (epoll 307k)
epoll handles all of these fine via the per-worker async pool + async_handler; only io_uring collapses.
Resolution (deferred — per the roadmap)
Tracked for the planned "everything stateful-async in vanilla" direction: give the io_uring backend the same async runtime (await DB readiness on the ring instead of blocking), or route DB calls to a worker thread pool as an interim. Not a quick fix — XL. Filed so the io_uring DB collapse is documented and tied to that future work.
Fix location: io_uring backend (http_server/http_server_io_uring_linux.c.v + the async runtime). Found in the HttpArena profile audit.
Summary
The io_uring backend has no async runtime (README:
request_handleronly). The HttpArena DB endpoints call the blockingdb.pgclient (PQexecParams) synchronously inside the single-threaded ring worker → head-of-line blocking, the ring stalls on every query.Impact (HttpArena, vanilla-io_uring vs vanilla-epoll)
async-db~10.7k rps (epoll ~280k) — ~26× behind its own epollfortunes~41 rps (epoll ~165k)api-16~28k,api-4~29k,crud~225k (epoll 307k)epoll handles all of these fine via the per-worker async pool +
async_handler; only io_uring collapses.Resolution (deferred — per the roadmap)
Tracked for the planned "everything stateful-async in vanilla" direction: give the io_uring backend the same async runtime (await DB readiness on the ring instead of blocking), or route DB calls to a worker thread pool as an interim. Not a quick fix — XL. Filed so the io_uring DB collapse is documented and tied to that future work.
Fix location: io_uring backend (
http_server/http_server_io_uring_linux.c.v+ the async runtime). Found in the HttpArena profile audit.