# eth0 runs pfifo\_fast even though net.core.default\_qdisc is fq

**URL:** <https://community.fly.io/t/eth0-runs-pfifo-fast-even-though-net-core-default-qdisc-is-fq/28910>\
**Category:** Questions / Help\
**Created:** [October 23, 2026, 7:27pm UTC](https://community.fly.io/t/eth0-runs-pfifo-fast-even-though-net-core-default-qdisc-is-fq/28910 "2026-10-23T19:27:53Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![pibble](https://avatars.discourse-cdn.com/v4/letter/p/b2d939/32.png) [@pibble](https://community.fly.io/u/pibble)\
**Post date:** [October 23, 2026, 7:27pm UTC](https://community.fly.io/t/eth0-runs-pfifo-fast-even-though-net-core-default-qdisc-is-fq/28910/1 "2026-10-23T19:27:53Z")

</div>

On our Machines in fra (kernel 6.12.114-fly), the sysctls ask for fq and BBR:

```auto
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

```

`eth0` itself still runs `pfifo_fast`, with `tx_queue_len` 1000. `tc qdisc show dev eth0` lists `pfifo_fast` as the root qdisc on every Machine we checked.

The kernel only uses `default_qdisc` when a device gets its root qdisc. My guess is that init writes the sysctl after `eth0` is already up, so the setting never reaches it. I can’t see init, so that part is a guess.

This cost us real latency. Our app is a WebSocket relay that sends one small packet to each of about 4,000 viewers every 200 ms, all at once. A 1,000-packet queue overflows on every burst. In a 5-minute load test, `tc -s qdisc` counted about 1.5 million dropped packets per relay. TCP only resends a dropped packet when a retransmit timer fires, so the slowest 1% of viewers waited 450 ms instead of 260 ms, and the worst waited about 1 s.

We now run `tc qdisc replace dev eth0 root fq` as root at startup, then drop to our app user. In five 5-minute runs since, the qdisc dropped nothing and the slowest 1% stayed between 255 and 270 ms.

Could init put `fq` on `eth0` itself, for example by setting the sysctl before `eth0` comes up? Machines would then match their own sysctl, and apps wouldn’t need iproute2 and a root start just for this.

An older wishlist thread asked for these defaults: [Change net qdisc and tcp congestion control defaults](https://community.fly.io/t/change-net-qdisc-and-tcp-congestion-control-defaults/3954)

---

<div class="post-metadata">

**Author:** ![flyio-support](https://sea1.discourse-cdn.com/fly1/user_avatar/community.fly.io/flyio-support/32/46245_2.png) [@flyio-support](https://community.fly.io/u/flyio-support)\
**Post date:** [October 23, 2026, 8:01pm UTC](https://community.fly.io/t/eth0-runs-pfifo-fast-even-though-net-core-default-qdisc-is-fq/28910/2 "2026-10-23T20:01:48Z")

</div>

Hi, if you can tweak the settings as per your requirements as root and then can drop to your app user, I suggest you do that. I’ll review those settings but I imagine they’re like that for a reason and changing them fleet-wide might not be feasible, but you’re welcome to tweak them for your machines at startup.

---

<div class="post-metadata">

**Author:** ![flyio-support](https://sea1.discourse-cdn.com/fly1/user_avatar/community.fly.io/flyio-support/32/46245_2.png) [@flyio-support](https://community.fly.io/u/flyio-support)\
**Post date:** [October 23, 2026, 8:06pm UTC](https://community.fly.io/t/eth0-runs-pfifo-fast-even-though-net-core-default-qdisc-is-fq/28910/3 "2026-10-23T20:06:06Z")

</div>

Hi - someone who knows more than I do said what you’ve noticed is something we should fix - so we may tweak it after all. I’ll keep you posted.
