Experiences With Integration of Io_uring Into gRPC-C++
summary
Implemented an io_uring EventEngine for gRPC‑C++ using liburing with one io_uring per CPU and endpoints pinned by incoming CPU, and an atomic leader scheme to batch syscalls so multiple threads prepare SQEs and one thread does the submit. Notification uses an eventfd integrated with epoll. Benchmarks show marginal regression at low QPS but significant QPS and median‑latency gains and reduced CPU time under max‑load; syscall submissions drop about 4% at ~4k channels per ring. Future work targets buffer pooling, multi‑shot syscalls and submit‑polling.
AI-written summary · about
chapters (9)
- 0:00gRPC and io_uring intro
- 2:11Current POSIX event engine internals
- 3:14Challenges with TCP endpoints
- 4:18What is io_uring
- 6:02io_uring event engine design
- 8:52Benchmarking setup and results
- 10:43Key takeaways
- 11:45Future improvements
- 13:14Q&A
related talks
46mRevamping ioctl with io_uring
34mio_uring in the Automotive World
57mAsynchronous I/O and coroutines for smooth data streaming
01h 04mAsynchronous I/O and Coroutines for Smooth Data Streaming
59mThe Wild West of post-POSIX IO Interfaces
51mJourney to the End of Linux IO APIs (d…)
19mI/O Passthru: Upstreaming a flexible and efficient I/O Path in Linux
45mJourney to the end of Linux IO APIs (from poll to io_uring)
