RFR: 8370024: HttpClient: QUIC congestion controller doesn't implement pacing

Daniel Fuchs dfuchs at openjdk.org
Thu Nov 6 11:13:15 UTC 2025


On Wed, 5 Nov 2025 18:04:39 GMT, Daniel Jeliński <djelinski at openjdk.org> wrote:

> Implement pacing for QUIC.
> 
> This is required by RFC 9002. Also, it improves the network utilization on links with long round-trip times.
> 
> The pacing algorithm itself was created based on the suggestions found in RFC 9002, and on the description of the Linux pacing algorithm.
> 
> Pacing is enabled when the round-trip time is less than twice the period at which the selector timeout fires. On Linux the selector timeout fires every millisecond, on Windows it's 15.6 milliseconds by default.
> 
> HttpClient tests came back clean.

src/java.net.http/share/classes/jdk/internal/net/http/quic/QuicPacer.java line 177:

> 175:         long rttMicros = rttEstimator.state().smoothedRttMicros();
> 176:         long cwnd = congestionController.congestionWindow();
> 177:         return lastUpdate.plus(Duration.ofNanos(rttMicros

you could consider using the two args version of `plus` that can take ChronoUnit.MICROS.

    public Deadline plus(long amountToAdd, TemporalUnit unit) { ...

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/28156#discussion_r2498537252


More information about the net-dev mailing list