io_uring без розовых очков: 5 граблей, которые сожгли мне неделю, и где он реально быстрее epoll

io_uring продавали как убийцу epoll. На деле на HTTP keep-alive разница 0-15%, иногда не в его пользу. Но на NVMe с queue depth 128 - в 3 раза быстрее. Честный разбор с бенчмарками, реальными граблями (SQPOLL, cancel race, partial recv) и почему Google отключил io_uring в ChromeOS.

https://habr.com/ru/articles/1039820/

#io_uring #epoll #asyncio #liburing #высокаянагрузка #ядроlinux #NVMe #tokiouring #glommio #syscall

io_uring без розовых очков: 5 граблей, которые сожгли мне неделю, и где он реально быстрее epoll

Прод. Сервис на Go, 80k RPS, p99 latency 12 мс. Читаю Phoronix, новость: "io_uring быстрее epoll в 2-4 раза". Решаю переписать сетевую часть. Через неделю - откат в master. p99 не упал, а вырос до 18...

Хабр

For some reason i am not happy with C bindings generated from bindgen. Nothing against the tool, it works great, but i prefer a handcrafted implementation that fits nicely with the ecosystem.

That's of course just a flimsy excuse to reinvent the wheel just for the fun of it. Oh, and educational value, I guess.

Anyway, i'm rewriting #liburing in #Rust. This resource is amazing for it

https://unixism.net/loti/index.html

#Rustlang

Welcome to Lord of the io_uring — Lord of the io_uring documentation

```ublk-nbd[1] is available now. Basically it is one #nbd client, but totally implemented in userspace […] io handling is based on #liburing[3] […] ublk-nbd supports both tcp and unix socket, and allows to enable #io_uring
send zero copy via command line '--send_zc', see details in README[4]. […] ublk-nbd IOPS is higher by ~40% than […]```

https://lore.kernel.org/all/Y8lSYBU9q5fjs7jS@T590/

[1] https://github.com/ming1/ubdsrv/tree/master/nbd
[3] https://github.com/axboe/liburing
[4] https://github.com/ming1/ubdsrv/blob/master/nbd/README.rst

ublk-nbd: ublk-nbd is avaialbe - Ming Lei