Microsoft Windows "Receive Window
Auto-Tuning" Causes Bufferbloat

September 3, 2014 (updated 09/03/2014) - Technology Blog Index

  1. Windows RWIN auto-tuning algorithm causes bufferbloat

What is wrong with Microsoft Windows receive window (RWIN) auto-tuning?

Using WireShark, I have been noticing on test downloads (PC connected directly to cable modem) on a 120Mbps Internet connection, connecting to a server 52ms away, that Windows 7 auto-tuning sets the receive window size to 3,841,024, which is way higher than it should be set:
Because the BDP (Bandwidth Delay Product) suggests that a receive window around 780,000 bytes (120Mbps/8×.052) is all that is needed.

Clearly, auto-tuning algorithms need to tune above this level to allow for download speed variations, and potential bandwidth growth.

But Windows auto-tunes to 4.9 times (3841024/780000) the BDP -- telling me that something is very wrong with Microsoft's auto-tuning algorithm.

And the result is ever increasing bufferbloat.

As the server transmits packets and allows up to 3,841,024 bytes in unacknowledged data, those packets must queue up somewhere, and for me, that is within the CMTS connected to my cable modem, which then causes RTT times to dramatically increase over 200ms for all subsequent network activity.

It is almost as if Microsoft's auto-tuning algorithm does not take into account the side effects of setting a receive window too large (bufferbloat and increased RTT times) and is then seeing increased RTT times and calculating a larger receive window buffer, which itself causes even more bufferbloat, and even higher RTT times.

  2. Another Windows auto-tuning bug

Looking at WireShark captures, it appears very clear that the Windows 7 auto-tuning algorithm assumes that the congestion window on servers is initialized to 2. Where today, most are set to 10 (see RFC6928), and some even higher.

Why? Because for me, I always see a temporary 'stall' for one RTT, where Windows auto-tuning has not increased the receive window quickly enough (example seen right).

And the only thing that seems to make sense is that if cwnd were equal to 2, then Microsoft is increasing auto-tuning 'just in time'.

Which indicates to me that Microsoft's algorithm assumes an initial cwnd of 2.

Some content may be copyrighted by their respective owners and is reproduced
in this paper under Title 17 Section 107 (Fair Use) of the copyright code.
The rest of this document is Copyright © 2014-2017 Jerry Jongerius