Когда «безделье» не безделье: как оптимизация ядра Linux стала багом для QUIC

Cloudflare рассказал, как оптимизация ядра Linux превратила «ленивые» QUIC-соединения в смертельную спираль — и как это починили.
Инженеры Cloudflare наткнулись на баг, который звучит как анекдот про сисадмина: ядро Linux решило, что QUIC-соединение «просто отдыхает», и отправило его в нокаут. А на самом деле соединение активно передавало данные — просто очень эффективно.
Всё дело в оптимизации, которая заставляет ядро думать, что сокет простаивает, если не было системных вызовов. QUIC, в отличие от TCP, может обходиться без них — данные летят напрямую через пользовательское пространство. В итоге ядро решало: «А, ну раз не дёргает, значит, можно прибить». И соединение падало.
Cloudflare назвал это «спиралью смерти»: при повторных подключениях ядро снова убивало их, и так до бесконечности. Похоже на историю про бабушку, которая выключает Wi-Fi-роутер на ночь, чтобы он отдохнул, а утром удивляется, что интернет не работает.
Патч уже отправили в мейнлайн ядра. Разработчикам советуют обновляться, если они используют QUIC и замечают странные обрывы соединений — возможно, это не ваша кривая архитектура, а Linux просто «заботится» об энергосбережении.
Комментарий студии METABYTE: Мы тоже пару раз грешили на собственный код, пока не выяснили, что ядро просто «помогает» — в духе «я удалил тебе файлы, чтобы не мешали». Если ваши сети ведут себя странно, возможно, стоит заглянуть в глубины ядра, а не сразу винить разработчиков.