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.