Skip to content

WIP: Implement I/O event manager based on io_uring

Wander Hillen requested to merge WJWH/ghc:io_uring_manager_squashed into master

This MR adds an I/O event manager backend based on the io_uring interface available in modern Linux kernels. The relevant code is in /libraries/base/GHC/Event/IoUring.hsc. It also contains the following changes to support the new backend:

  • Port over the io_uring bindings from @bgamari into base.
  • Add a new HAVE_IO_URING check similar to HAVE_EPOLL, HAVE_KQUEUE etc. All changes are no-opped if this flag is not set.

Linked issue: #18390. NOT included yet is a unit test, since I was not sure what to test and how the CI environment looks (is io_uring even available there?). It does work however, both "on my machine" and on AWS (blog post about test results).

Please take a few moments to verify that your commits fulfill the following:

  • are either individually buildable or squashed
  • have commit messages which describe what they do
  • have added source comments describing your change. For larger changes you likely should add a Note and cross-reference it from the relevant places.
  • add a testcase to the testsuite.
  • if your MR affects library interfaces (e.g. changes base) or affects whether GHC will accept user-written code, please add the ~"user facing" label.
  • updates the users guide if applicable
  • mentions new features in the release notes for the next release
Edited by Wander Hillen

Merge request reports