<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/when-idle-isnt-idle-how-a-linux-kernel-optimization-became-a-quic-bug-y5u5jcdr8" -->

---
title: When "idle" isn't idle: how a Linux kernel optimization...
description: A deep-dive into a CUBIC congestion control bug in Cloudflare's quiche QUIC library, where the congestion window became permanently pinned at its minimum floor...
canonical: https://daily.dev/posts/when-idle-isn-t-idle-how-a-linux-kernel-optimization-became-a-quic-bug-y5u5jcdr8
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: When "idle" isn't idle: how a Linux kernel optimization became a QUIC bug | daily.dev
og:description: A deep-dive into a CUBIC congestion control bug in Cloudflare's quiche QUIC library, where the congestion window became permanently pinned at its minimum floor...
og:url: https://daily.dev/posts/when-idle-isn-t-idle-how-a-linux-kernel-optimization-became-a-quic-bug-y5u5jcdr8
og:image: https://api.daily.dev/og/posts/Y5u5jcdr8.png
og:image:alt: When "idle" isn't idle: how a Linux kernel optimization became a QUIC bug
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# When "idle" isn't idle: how a Linux kernel optimization became a QUIC bug

**[Cloudflare](https://daily.dev/sources/cloudflare)** · 14 min read · 48 upvotes · 0 comments

## Summary

A deep-dive into a CUBIC congestion control bug in Cloudflare's quiche QUIC library, where the congestion window became permanently pinned at its minimum floor after heavy packet loss, causing a 'death spiral'. The root cause was a Linux kernel optimization for handling idle periods that was incorrectly ported to user-space QUIC: when cwnd collapsed to two packets, every ACK cycle drove bytes_in_flight to zero, which the code misidentified as application idleness rather than congestion-limited waiting. This inflated the idle delta by a full RTT, pushing the recovery start time into the future and preventing cwnd growth. The fix was to measure idle duration from the last ACK time rather than the last send time, accurately distinguishing true idleness from normal RTT wait periods. The change restored 100% pass rates in the test suite.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://blog.cloudflare.com/quic-death-spiral-fix>

## Similar posts on daily.dev

- [How Cloudflare Solved a Congestion Bug in quiche](https://daily.dev/posts/how-cloudflare-solved-a-congestion-bug-in-quiche-arfb4mtr5) · InfoQ · 2 upvotes · 0 comments
- [Chasing that 32 ms tail latency in ClickHouse](https://daily.dev/posts/chasing-that-32-ms-tail-latency-in-clickhouse-s5hskwp3e) · ClickHouse · 4 upvotes · 0 comments
- [IonStack part II: GhostLock, a stack-UAF that has existed in ALL Linux distributions for 15 years](https://daily.dev/posts/ionstack-part-ii-ghostlock-a-stack-uaf-that-has-existed-in-all-linux-distributions-for-15-years-wznoxduhk) · Hacker News · 2 upvotes · 0 comments
- [Linux Patches Show Promising Results For Lower Latency Of Short Slice Tasks](https://daily.dev/posts/linux-patches-show-promising-results-for-lower-latency-of-short-slice-tasks-fmmoukwef) · Phoronix · 0 upvotes · 0 comments

---

Tags: [#rust](https://daily.dev/tags/rust), [#networking](https://daily.dev/tags/networking)

[View this post on daily.dev](https://daily.dev/posts/when-idle-isn-t-idle-how-a-linux-kernel-optimization-became-a-quic-bug-y5u5jcdr8)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"When \"idle\" isn't idle: how a Linux kernel optimization became a QUIC bug","url":"https://daily.dev/posts/when-idle-isn-t-idle-how-a-linux-kernel-optimization-became-a-quic-bug-y5u5jcdr8","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/when-idle-isn-t-idle-how-a-linux-kernel-optimization-became-a-quic-bug-y5u5jcdr8"},"datePublished":"2026-05-12T13:40:44.800Z","dateModified":"2026-05-12T13:41:09.762Z","description":"A deep-dive into a CUBIC congestion control bug in Cloudflare's quiche QUIC library, where the congestion window became permanently pinned at its minimum floor...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/961de6bb0c408e94a044981350ab493e?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/961de6bb0c408e94a044981350ab493e?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Cloudflare","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Cloudflare","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/38522e1d11354cd6b7af66f9d4316735","url":"https://daily.dev/sources/cloudflare"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/when-idle-isn-t-idle-how-a-linux-kernel-optimization-became-a-quic-bug-y5u5jcdr8","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":48},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"rust,networking","timeRequired":"PT14M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Cloudflare","item":"https://daily.dev/sources/cloudflare"},{"@type":"ListItem","position":3,"name":"When \"idle\" isn't idle: how a Linux kernel optimization became a QUIC bug"}]}
```

