Faster I/O with osmo_io and io_uring

Added by laforge about 1 month ago

Last night we enabled osmo_io support in the first major sub-system, libosmo-sigtran in master of our git repositories. This change mainly affects the A and IuCS/IuPS interfaces in osmo-bsc, osmo-msc, osmo-sgsn, osmo-hnbgw, osmo-smlc and osmo-stp.

Sub-systems that have been ported over to osmo_io can easily switch from classic poll/read/write/readmsg/writemsg/recfrom/sendto/recv/send syscall based I/O to io_uring, the modern submission/completion-queue based I/O mechanism of the Linux kernel.

Using the io_uring backend of osmo_io will in turn significantly improve the performance of related osmocom programs under high load, where as much as 40% of the process CPU time is spent in I/O related system calls.

All our usual automatic test suites/jenkins jobs continue to use the default (poll) back-end, while we have a set of new jenkins jobs running the same test suites against osmocom-programs with the io_uring backend have been introduced.

We will keep the osmo_io wiki page updated with the migration/porting status, as more and more sub-systems / applications / interfaces get ported to it.


Add picture from clipboard (Maximum size: 48.8 MB)