vak: (Default)
Serge Vakulenko ([personal profile] vak) wrote2025-02-18 06:23 pm

Асинхронный линукс

Народ, кто-нибудь уже поимел опыт с <linux/io_uring.h>? Как оно по жизни?

Неожиданно для себя обнаружил, что в Линуксе пять лет назад появилась крутая фича. А именно три системных вызова, реализующих эффективный асинхронный интерфейс ко всем сервисам ядра.
  • int io_uring_setup(unsigned entries, struct io_uring_params *p);
  • int io_uring_enter(unsigned fd, unsigned to_submit, unsigned min_complete, unsigned flags, sigset_t *sig);
  • int io_uring_register(unsigned fd, unsigned opcode, void *arg, unsigned nr_args);
Революционная штука, как я погляжу. Может коренным образом изменить подход к разработке приложений. Только сложновато для программиста выходит. Есть статьи про это дело.
spamsink: (Default)

[personal profile] spamsink 2025-02-19 05:12 am (UTC)(link)
Опоздала идея лет на 30-40, когда дисководы головками медленно двигали. Тогда выигрыш был бы ещё более впечатляющим.
lev: (Default)

[personal profile] lev 2025-02-19 07:46 pm (UTC)(link)
double buffering легко делался в ос/ес на ПЛ/1
помнится с приятелем мутили печать с ленты, в один буфер читалось, другой форматировался, третий выводился (без спулера)

[personal profile] sassa_nf 2025-02-19 07:55 pm (UTC)(link)
How so?

Slow disk => perf is dominated by io wait, you can ignore context switch + buffer copying cost.
spamsink: (Default)

[personal profile] spamsink 2025-02-20 05:36 am (UTC)(link)
When multiple I/O requests are sent to the driver, the driver would order them according to the current position of the head and the locations of the blocks of the file, minimizing io wait.