Ускоряем CLI-утилиты с помощью io_uring
Уже давненько вокруг ходит тема про io_uring — новую высокопроизводительную модель асинхронного I/O в Linux. В теории это обещает минимальные системные вызовы и очереди отправки/завершения, но как это в деле работает с привычными утилитами? Автор этой статьи решил разобраться на примере типичной задачи — копирования файлов — переписав её под liburing и сравнив с традиционной синхронной версией.
io_uring (доступный с ядра 5.1+) это механизм, в котором приложение может подготовить сразу несколько запросов на I/O и отправить их в кольцевой буфер (SQ), а затем получать результаты из другого кольца (CQ). Благодаря общей памятью между ядром и юзерспейсом, снижается накладная на системные вызовы. Однако нужно понимать системные требования: io_uring работает только с Linux 5.1 и выше, а многие продвинутые фичи вроде multishot‑приёма, поллинга и «naked» потоков (io‑wq) появились только в ядрах 5.10+. Это надо иметь в виду — проверяйте версию ядра перед попыткой использовать новейшие фишки. Также неплохо пользоваться liburing — библиотекой обёрткой над сырыми вызовами, чтобы не писать тонны boilerplate‑кода.
@usr_bin_linux
Post #974
2.15K
- 🔥 8
- 👍 4