Follow-Up: HTTP/3 Performance Observations with NGINX 1.29.1 and 1.29.2

Reference to original post: https://community.nginx.org/t/seeking-clarification-on-http-3-performance-differences-between-nginx-1-27-5-and-1-27-4/5417/4

We conducted HTTP/3 performance tests across NGINX versions 1.25.5 to the latest 1.29.2 under consistent network emulation conditions.

Starting from version 1.27.5, NGINX switched its QUIC congestion control algorithm from reno to cubic. While we cannot confirm whether this change is the root cause of performance differences, we suggest that future NGINX releases provide a configuration parameter allowing users to select the QUIC congestion control algorithm based on their deployment needs.

Test Results(Average of 100 runs per version, in seconds)

Version No Packet Loss (sec) 1% Packet Loss (sec)
nginx-1.25.5 12.329 21.339
nginx-1.27.4 13.592 24.173
nginx-1.27.5 27.251 221.720
nginx-1.28.0 19.456 195.452
nginx-1.29.0 19.498 186.282
nginx-1.29.1 20.957 187.009
nginx-1.29.2 16.910 185.894

Test Configuration Summary

  • nginx.conf setting: http3_stream_buffer_size 50m;

  • Network emulation (tc + netem): limit 6000, delay 50ms, packet loss 0% / 1%

  • Test file size: 47MB

Additional Observation

Comparing nginx-1.29.1 and nginx-1.29.2, we observed the following:

  • Under no packet loss, nginx-1.29.2 (16.910 sec) performed better than nginx-1.29.1 (20.957 sec), showing a noticeable improvement.

  • Under 1% packet loss, nginx-1.29.2 (185.894 sec) was slightly better than nginx-1.29.1 (187.009 sec), though the difference is marginal.

This may suggest that some internal optimizations were introduced in nginx-1.29.2, but the performance under packet loss remains significantly lower compared to earlier versions using QUIC reno.