curl performance tests

270 builds analyzed. Last run ended 2026-08-14 13:51:24 (Daniel's local time). This page was rendered at 2026-08-14 11:51:25 UTC.
32 rounds

R0, R1, R2, R3, R4, R5, R6, R7, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31,

24 tests 100G-speed, single-numallocs, single-maxalloc, h1parallel-speed, h2parallel-speed, h3parallel-speed, h1parallel-mem, h2parallel-mem, h3parallel-mem, h1parallel-upload-speed, h2parallel-upload-speed, h3parallel-upload-speed, h1parallel-upload-mem, h2parallel-upload-mem, h3parallel-upload-mem, h1-requests, h2-requests, h3-requests, h1-req-mem, h2-req-mem, h3-req-mem, easy-handle, multi-handle, connectdata,
build details
R31 Revert "uint-bset: add slot0 member" (1 builds)
plus: 554efab7f6 multi: drop the assert from large expires
R30 multi: cap expire times to INT_MAX internally (9 builds)
plus: e825e55867 RELEASE-NOTES: synced
R29 dict: avoid busy-loop in sendf() when the socket is not writable (1 builds)
R28 test_20_11: more leniency (2 builds)
R27 libcurl.pc: Add Copyright tag to the pkgconf file (43 builds)
R26 tool_operate: refactor schannel checks and move win32 cert checks to function (9 builds)
R25 conncache: don't assume curl_off_t increment wrap-around (5 builds)
R24 tool_operate: limit `is_using_schannel()` call to Windows (10 builds)
R23 cmake: use built-in variable and target property dump functions with CMake 4.5+ (3 builds)
R22 multihandle: move two struct fields (5 builds)
R21 multi: hold timeout values in 'int' instead of 'long' (26 builds)
R20 header api: add guards (6 builds)
plus: 743096a496 uint-bset: add slot0 member
plus: 507ee5d792 progress: fix progress meter update to run every second again
R19 url: fix negotiate/ntlm connection reuse (15 builds)
R18 mailmap: Ralf Mueller (2 builds)
plus: 574749016d tests: verify AWS SigV4 redirect auth scope
R17 tidy-up: C and CI (2 builds)
R16 progress: cleanup, less memory (2 builds)
R15 keylog: add a random size argument to Curl_tls_keylog_write() (1 builds)
R14 thrdqueue: drop name strdups from Curl_thrdq_create (1 builds)
R13 urlapi: avoid dedotdotify() if possible (2 builds)
plus: da04aa96ab tidy-up: comments and formatting
R12 CI: dump `libcurl.pc` (and `curl-config`) to log, verify `.pc` with `pccritic` tool (2 builds)
R11 build: strip empty properties from `libcurl.pc` (4 builds)
R10 configure: replace stray raw `grep` with `$GREP` (1 builds)
R9 tool_operate: only check for schannel if on windows (1 builds)
plus: b9254da617 build: clear `Require.private` for static-only builds in `libcurl.pc`
R8 content_encoding: exact-match the identity transfer-coding token (52 builds)
R7 libcurl.pc: add `License` tag (7 builds)
R6 build: strip duplicate spaces after `Libs.private:` in `libcurl.pc` (10 builds)
R5 servers: add option to build without window handler (Windows) (2 builds)
R4 scorecard: report 'rss-max' (1 builds)
plus: 6c7993d4d9 build: strip trailing spaces from `libcurl.pc`
R3 schannel: reuse the send buffer (5 builds)
R2 ldap: reject control characters in URL-decoded filter values (12 builds)
plus: 874a54de5d multi: use index list for expire timeouts
plus: 1cf6be5a0b GHA/linux: replace raw C option with `CMAKE_BUILD_TYPE=Debug` in tsan job
plus: 43680a50cf appveyor: sync Debug options in two jobs
plus: a833c83a87 build: minor debug option message fixes/improvements
plus: 5ef4e1cabc checksrc: check for `assert`, replace in tests where missing, drop from examples
plus: 5050196dcc build: require `!NDEBUG` for debug-enabled (aka development) builds
R1 DoH: improvements (22 builds)
R0 build: replace `assert()` with `DEBUGASSERT()`, where missing (6 builds)

Download speed 100G single transfer HTTP:// (100G-speed)

higher is better, bytes/sec
270 samples, 32 rounds
P0:      4857984365 (4.86 G)
P25:     5409857578 (5.41 G)
P50:     5494996262 (5.49 G)
P75:     5567323381 (5.57 G)
P100:    5941451695 (5.94 G)
Mean:    5489689324 (5.49 G)
Std dev: 125622017 (125.62 M), 2.29% of mean
Span:    +-541733665 (541.73 M), 9.87% of mean

Stake:   2026-08-11 initial ('stake' is a set typical value for this test)
         5475738172 (5.48 G)
         -13951152 (-13.95 M) from mean, (-0.25%) current results are BETTER
         -19258090 (-19.26 M) from P50, (-0.35%) current results are BETTER
test description Downloads a single 100 gigabyte file over clear-text HTTP/1.1 from an Apache httpd server running on localhost with the curl tool. The measured network transfer speed in bytes per second is what the curl tool itself reports.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically insignificant (P: 0.8711)

Allocations for a single HTTP transfer (single-numallocs)

lower is better, allocs
270 samples, 32 rounds
P0:      95
P25:     95
P50:     100
P75:     105
P100:    105
Mean:    100
Std dev: 4, 4.73% of mean
Span:    +-5, 5.00% of mean

Stake:   2026-08-13 after #22561 ('stake' is a set typical value for this test)
         95
         -5 from mean, (-5.09%) current results are worse
         -5 from P50, (-5.00%) current results are worse
test description Downloads a single 512K file over clear-text HTTP/1.1 from an Apache httpd server running on localhost. Using the built-in memory-tracking, all allocations done by curl and libcurl are logged and then counted.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically SIGNIFICANT (P: 0.0000)

Allocated memory for a single HTTP transfer (single-maxalloc)

lower is better, bytes
270 samples, 32 rounds
P0:      130590
P25:     130590
P50:     130622
P75:     130894
P100:    132622
Mean:    130917
Std dev: 597, 0.46% of mean
Span:    +-1016, 0.78% of mean

Stake:   2026-08-12 after #22547 ('stake' is a set typical value for this test)
         130622
         -295 from mean, (-0.23%) current results are worse
         0 from P50, (0.00%) 
test description Downloads a single 512K file over clear-text HTTP/1.1 from an Apache httpd server running on localhost. Using the built-in memory-tracking, all allocations done by curl and libcurl are logged and then added up. This number is the peak number of bytes allocated concurrently at any point through the operation.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically SIGNIFICANT (P: 0.0000)

Download speed parallel HTTP/1 (100x500MB) (h1parallel-speed)

higher is better, bytes/sec
266 samples, 32 rounds
P0:      3108061588 (3.11 G)
P25:     3518331712 (3.52 G)
P50:     3551819613 (3.55 G)
P75:     3573232218 (3.57 G)
P100:    3609748043 (3.61 G)
Mean:    3538558462 (3.54 G)
Std dev: 53402992 (53.40 M), 1.51% of mean
Span:    +-250843227 (250.84 M), 7.09% of mean

Stake:   2026-08-11 initial ('stake' is a set typical value for this test)
         3518118326 (3.52 G)
         -20440136 (-20.44 M) from mean, (-0.58%) current results are BETTER
         -33701287 (-33.70 M) from P50, (-0.95%) current results are BETTER
test description Downloads 100 files each in 100 parallel transfers, each getting a 500MB file. Using HTTP/1.1 over HTTPS from an Apache httpd running on localhost. This measures total throughput in bytes per second.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically SIGNIFICANT (P: 0.0104)

Download speed parallel HTTP/2 (100x500MB) (h2parallel-speed)

higher is better, bytes/sec
267 samples, 32 rounds
P0:      2426388792 (2.43 G)
P25:     2557703062 (2.56 G)
P50:     2590166459 (2.59 G)
P75:     2607960754 (2.61 G)
P100:    2659707876 (2.66 G)
Mean:    2580854403 (2.58 G)
Std dev: 37866567 (37.87 M), 1.47% of mean
Span:    +-116659542 (116.66 M), 4.52% of mean

Stake:   2026-08-13 adjusted ('stake' is a set typical value for this test)
         2588820345 (2.59 G)
         7965941 (7.97 M) from mean, (0.31%) current results are worse
         -1346114 (-1.35 M) from P50, (-0.05%) current results are BETTER
test description Downloads 100 files each in 100 parallel transfers, each getting a 500MB file. Using HTTP/2 over HTTPS from an Apache httpd running on localhost. This measures total throughput in bytes per second.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically insignificant (P: 0.4555)

Download speed parallel HTTP/3 (100x500MB) (h3parallel-speed)

higher is better, bytes/sec
269 samples, 32 rounds
P0:      991431663 (991.43 M)
P25:     1085636076 (1.09 G)
P50:     1099566113 (1.10 G)
P75:     1112459569 (1.11 G)
P100:    1171450837 (1.17 G)
Mean:    1097434409 (1.10 G)
Std dev: 23424428 (23.42 M), 2.13% of mean
Span:    +-90009586 (90.01 M), 8.20% of mean

Stake:   2026-08-11 initial ('stake' is a set typical value for this test)
         1098816436 (1.10 G)
         1382026 (1.38 M) from mean, (0.13%) current results are worse
         -749677 from P50, (-0.07%) current results are BETTER
test description Downloads 100 files each in 100 parallel transfers, each getting a 500MB file. Using HTTP/3 over HTTPS from a Caddy server running on localhost. This measures total throughput in bytes per second.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically insignificant (P: 0.7703)

Memory use RSS for parallel HTTP/1 (100x500MB) (h1parallel-mem)

lower is better, bytes
266 samples, 32 rounds
P0:      21594387 (21.59 M)
P25:     22016000 (22.02 M)
P50:     22231040 (22.23 M)
P75:     22396928 (22.40 M)
P100:    22753280 (22.75 M)
Mean:    22203779 (22.20 M)
Std dev: 241218, 1.09% of mean
Span:    +-579446, 2.61% of mean

Stake:   2026-08-11 initial ('stake' is a set typical value for this test)
         21989653 (21.99 M)
         -214126 from mean, (-0.96%) current results are worse
         -241387 from P50, (-1.09%) current results are worse
test description Downloads 100 files each in 100 parallel transfers, each getting a 500MB file. Using HTTP/1.1 over HTTPS from an Apache httpd running on localhost. This measures the maximum RSS size in number of bytes used by the process during the transfer.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically insignificant (P: 0.1192)

Memory use RSS for parallel HTTP/2 (100x500MB) (h2parallel-mem)

lower is better, bytes
267 samples, 32 rounds
P0:      13855226 (13.86 M)
P25:     14327808 (14.33 M)
P50:     14487552 (14.49 M)
P75:     14630912 (14.63 M)
P100:    14934016 (14.93 M)
Mean:    14477468 (14.48 M)
Std dev: 208271, 1.44% of mean
Span:    +-539394, 3.73% of mean

Stake:   2026-08-11 initial ('stake' is a set typical value for this test)
         14281647 (14.28 M)
         -195821 from mean, (-1.35%) current results are worse
         -205905 from P50, (-1.42%) current results are worse
test description Downloads 100 files each in 100 parallel transfers, each getting a 500MB file. Using HTTP/2 over HTTPS from an Apache httpd running on localhost. This measures the maximum RSS size in number of bytes used by the process during the transfer.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically insignificant (P: 0.5813)

Memory use RSS for parallel HTTP/3 (100x500MB) (h3parallel-mem)

lower is better, bytes
269 samples, 32 rounds
P0:      15239914 (15.24 M)
P25:     15835136 (15.84 M)
P50:     16007168 (16.01 M)
P75:     16134144 (16.13 M)
P100:    16924672 (16.92 M)
Mean:    15978505 (15.98 M)
Std dev: 276611, 1.73% of mean
Span:    +-842378, 5.27% of mean

Stake:   2026-08-11 initial ('stake' is a set typical value for this test)
         15606417 (15.61 M)
         -372088 from mean, (-2.33%) current results are worse
         -400751 from P50, (-2.50%) current results are worse
test description Downloads 100 files each in 100 parallel transfers, each getting a 500MB file. Using HTTP/3 over HTTPS from a Caddy server running on localhost. This measures the maximum RSS size in number of bytes used by the process during the transfer.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically insignificant (P: 0.2426)

Upload speed parallel HTTP/1 (100x500MB) (h1parallel-upload-speed)

higher is better, bytes/sec
252 samples, 31 rounds
P0:      2391689303 (2.39 G)
P25:     2462876790 (2.46 G)
P50:     2474460953 (2.47 G)
P75:     2481074922 (2.48 G)
P100:    2491219118 (2.49 G)
Mean:    2469993460 (2.47 G)
Std dev: 15190592 (15.19 M), 0.62% of mean
Span:    +-49764907 (49.76 M), 2.01% of mean

Stake:   2026-08-11 initial ('stake' is a set typical value for this test)
         2475714830 (2.48 G)
         5721369 (5.72 M) from mean, (0.23%) current results are worse
         1253876 (1.25 M) from P50, (0.05%) current results are worse
test description Uploads 100 files each in 50 parallel transfers, each uploading a 500MB file. Using HTTP/1.1 over HTTPS to an Apache httpd running on localhost. This measures the total throughput in number of bytes per second.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically insignificant (P: 0.6732)

Upload speed parallel HTTP/2 (100x500MB) (h2parallel-upload-speed)

higher is better, bytes/sec
252 samples, 31 rounds
P0:      142046138 (142.05 M)
P25:     1622740352 (1.62 G)
P50:     1645396382 (1.65 G)
P75:     1662141615 (1.66 G)
P100:    1747663018 (1.75 G)
Mean:    1634437305 (1.63 G)
Std dev: 102049106 (102.05 M), 6.24% of mean
Span:    +-802808439 (802.81 M), 49.12% of mean

Stake:   2026-08-11 initial ('stake' is a set typical value for this test)
         1649047518 (1.65 G)
         14610212 (14.61 M) from mean, (0.89%) current results are worse
         3651135 (3.65 M) from P50, (0.22%) current results are worse
test description Uploads 100 files each in 50 parallel transfers, each uploading a 500MB file. Using HTTP/2 over HTTPS to an Apache httpd running on localhost. This measures the total throughput in number of bytes per second.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically insignificant (P: 0.2843)

Upload speed parallel HTTP/3 (100x500MB) (h3parallel-upload-speed)

higher is better, bytes/sec
251 samples, 31 rounds
P0:      277422247 (277.42 M)
P25:     292450326 (292.45 M)
P50:     307783419 (307.78 M)
P75:     339237637 (339.24 M)
P100:    358699380 (358.70 M)
Mean:    315686219 (315.69 M)
Std dev: 24701529 (24.70 M), 7.82% of mean
Span:    +-40638566 (40.64 M), 12.87% of mean

Stake:   2026-08-11 adjusted ('stake' is a set typical value for this test)
         322526712 (322.53 M)
         6840492 (6.84 M) from mean, (2.17%) current results are worse
         14743292 (14.74 M) from P50, (4.79%) current results are worse
test description Uploads 100 files each in 50 parallel transfers, each uploading a 500MB file. Using HTTP/3 over HTTPS to an Apache httpd (via a httpx proxy) running on localhost. This measures the total throughput in number of bytes per second.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically insignificant (P: 0.4555)

Memory use RSS for parallel upload HTTP/1 (100x500MB) (h1parallel-upload-mem)

lower is better, bytes
252 samples, 31 rounds
P0:      22457437 (22.46 M)
P25:     22888448 (22.89 M)
P50:     23005184 (23.01 M)
P75:     23117824 (23.12 M)
P100:    24817664 (24.82 M)
Mean:    23006793 (23.01 M)
Std dev: 203656, 0.89% of mean
Span:    +-1180113 (1.18 M), 5.13% of mean

Stake:   2026-08-11 initial ('stake' is a set typical value for this test)
         22748540 (22.75 M)
         -258253 from mean, (-1.12%) current results are worse
         -256644 from P50, (-1.12%) current results are worse
test description Uploads 100 files each in 50 parallel transfers, each uploading a 500MB file. Using HTTP/1.1 over HTTPS to an Apache httpd running on localhost. This measures the maximum RSS size in number of bytes used by the process during the transfer.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically insignificant (P: 0.1834)

Memory use RSS for parallel upload HTTP/2 (100x500MB) (h2parallel-upload-mem)

lower is better, bytes
252 samples, 31 rounds
P0:      20717568 (20.72 M)
P25:     21028864 (21.03 M)
P50:     21168128 (21.17 M)
P75:     21258240 (21.26 M)
P100:    21458944 (21.46 M)
Mean:    21142102 (21.14 M)
Std dev: 155458, 0.74% of mean
Span:    +-370688, 1.75% of mean

Stake:   2026-08-11 initial ('stake' is a set typical value for this test)
         21196967 (21.20 M)
         54864 from mean, (0.26%) current results are BETTER
         28839 from P50, (0.14%) current results are BETTER
test description Uploads 100 files each in 50 parallel transfers, each uploading a 500MB file. Using HTTP/2 over HTTPS to an Apache httpd running on localhost. This measures the maximum RSS size in number of bytes used by the process during the transfer.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically insignificant (P: 0.8967)

Memory use RSS for parallel upload HTTP/3 (100x500MB) (h3parallel-upload-mem)

lower is better, bytes
251 samples, 31 rounds
P0:      541272542 (541.27 M)
P25:     543068160 (543.07 M)
P50:     543207424 (543.21 M)
P75:     543318016 (543.32 M)
P100:    543588352 (543.59 M)
Mean:    543081321 (543.08 M)
Std dev: 453477, 0.08% of mean
Span:    +-1157904 (1.16 M), 0.21% of mean

Stake:   2026-08-12 rss-max ('stake' is a set typical value for this test)
         543180800 (543.18 M)
         99478 from mean, (0.02%) current results are BETTER
         -26624 from P50, (-0.00%) current results are worse
test description Uploads 100 files each in 50 parallel transfers, each uploading a 500MB file. Using HTTP/3 over HTTPS to an Apache httpd (via a httpx proxy) running on localhost. This measures the maximum RSS size in number of bytes used by the process during the transfer.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically insignificant (P: 0.3810)

HTTP/1 parallel requests (100000 x 40) (h1-requests)

higher is better, requests/sec
229 samples, 29 rounds
P0:      23753
P25:     30827
P50:     31424
P75:     31850
P100:    32538
Mean:    31193
Std dev: 998, 3.20% of mean
Span:    +-4392, 14.08% of mean

Stake:   2026-08-11 early ('stake' is a set typical value for this test)
         31096
         -97 from mean, (-0.31%) current results are BETTER
         -328 from P50, (-1.05%) current results are BETTER
test description Downloads 100,000 small files (10K) using 40 parallel transfers over HTTP/1.1 HTTPS from an Apache httpd running on localhost. Measures how many such requests per second it manages to perform.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically insignificant (P: 0.5813)

HTTP/2 parallel requests (100000 x 40) (h2-requests)

higher is better, requests/sec
229 samples, 29 rounds
P0:      29607
P25:     30511
P50:     30708
P75:     30900
P100:    31310
Mean:    30686
Std dev: 294, 0.96% of mean
Span:    +-851, 2.78% of mean

Stake:   2026-08-11 early ('stake' is a set typical value for this test)
         30399
         -287 from mean, (-0.94%) current results are BETTER
         -309 from P50, (-1.01%) current results are BETTER
test description Downloads 100,000 small files (10K) using 40 parallel transfers over HTTP/2 HTTPS from an Apache httpd running on localhost. Measures how many such requests per second it manages to perform.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically insignificant (P: 0.1630)

HTTP/3 parallel requests (100000 x 40) (h3-requests)

higher is better, requests/sec
229 samples, 29 rounds
P0:      27741
P25:     28790
P50:     29009
P75:     29220
P100:    29935
Mean:    28972
Std dev: 371, 1.28% of mean
Span:    +-1096, 3.79% of mean

Stake:   2026-08-11 early ('stake' is a set typical value for this test)
         28920
         -52 from mean, (-0.18%) current results are BETTER
         -89 from P50, (-0.31%) current results are BETTER
test description Downloads 100,000 small files (10K) using 40 parallel transfers over HTTP/3 HTTPS from a Caddy server running on localhost. Measures how many such requests per second it manages to perform.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically insignificant (P: 0.6265)

Memory use for HTTP/1 parallel requests (100000 x 40) (h1-req-mem)

lower is better, bytes
229 samples, 29 rounds
P0:      17920000 (17.92 M)
P25:     18305024 (18.31 M)
P50:     18571264 (18.57 M)
P75:     18763776 (18.76 M)
P100:    19636224 (19.64 M)
Mean:    18556785 (18.56 M)
Std dev: 303621, 1.64% of mean
Span:    +-858112, 4.62% of mean

Stake:   2026-08-13 after rss-max ('stake' is a set typical value for this test)
         18572918 (18.57 M)
         16132 from mean, (0.09%) current results are BETTER
         1654 from P50, (0.01%) current results are BETTER
test description Downloads 100,000 small files (10K) using 40 parallel transfers over HTTP/1.1 HTTPS from an Apache httpd running on localhost. Measures the maximum RSS size in number of bytes used by the process during the transfer.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically insignificant (P: 0.3140)

Memory use for HTTP/2 parallel requests (100000 x 40) (h2-req-mem)

lower is better, bytes
229 samples, 29 rounds
P0:      12857344 (12.86 M)
P25:     13221888 (13.22 M)
P50:     13299712 (13.30 M)
P75:     13414400 (13.41 M)
P100:    13692928 (13.69 M)
Mean:    13309738 (13.31 M)
Std dev: 139501, 1.05% of mean
Span:    +-417792, 3.14% of mean

Stake:   2026-08-13 after rss-max ('stake' is a set typical value for this test)
         13330887 (13.33 M)
         21148 from mean, (0.16%) current results are BETTER
         31175 from P50, (0.23%) current results are BETTER
test description Downloads 100,000 small files (10K) using 40 parallel transfers over HTTP/2 HTTPS from an Apache httpd running on localhost. Measures the maximum RSS size in number of bytes used by the process during the transfer.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically insignificant (P: 0.4359)

Memory use for HTTP/3 parallel requests (100000 x 40) (h3-req-mem)

lower is better, bytes
229 samples, 29 rounds
P0:      13500416 (13.50 M)
P25:     13758464 (13.76 M)
P50:     13856768 (13.86 M)
P75:     13934592 (13.93 M)
P100:    14229504 (14.23 M)
Mean:    13844953 (13.84 M)
Std dev: 125371, 0.91% of mean
Span:    +-364544, 2.63% of mean

Stake:   2026-08-13 after rss-max ('stake' is a set typical value for this test)
         13864330 (13.86 M)
         19376 from mean, (0.14%) current results are BETTER
         7562 from P50, (0.05%) current results are BETTER
test description Downloads 100,000 small files (10K) using 40 parallel transfers over HTTP/3 HTTPS from a Caddy server running on localhost. Measures the maximum RSS size in number of bytes used by the process during the transfer.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically insignificant (P: 0.2048)

Curl_easy struct size (easy-handle)

lower is better, bytes
134 samples, 13 rounds
P0:      4248
P25:     4248
P50:     4248
P75:     4248
P100:    4256
Mean:    4248
Std dev: 2, 0.06% of mean
Span:    +-4, 0.09% of mean

Stake:   2026-08-13 lowered ('stake' is a set typical value for this test)
         4248
         0 from mean, (-0.02%) current results are worse
         0 from P50, (0.00%) 
test description Uses the 'pahole' tool to extract the object size of the Curl_easy struct (counted in number of bytes) from the build. One of these structs is allocated as a handle for each libcurl transfer. The exact size of this struct depends on architecture and build options. This is also a debug-build, which may inflate the size somewhat.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically insignificant (P: 0.1416)

Curl_multi struct size (multi-handle)

lower is better, bytes
134 samples, 13 rounds
P0:      872
P25:     912
P50:     912
P75:     912
P100:    920
Mean:    910
Std dev: 11, 1.26% of mean
Span:    +-24, 2.64% of mean

Stake:   2026-08-12 bumped ('stake' is a set typical value for this test)
         920
         9 from mean, (1.07%) current results are BETTER
         8 from P50, (0.88%) current results are BETTER
test description Uses the 'pahole' tool to extract the object size of the Curl_multi struct (counted in number of bytes) from the build. One of these structs is allocated for each multi handle, and it may hold multiple concurrent transfers. The exact size of this struct depends on architecture and build options. This is a debug-build, which may inflate the size somewhat.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically insignificant (P: 0.1744)

connectdata struct size (connectdata)

lower is better, bytes
134 samples, 13 rounds
P0:      824
P25:     824
P50:     824
P75:     824
P100:    824
Mean:    824
Std dev: 0, 0.00% of mean
Span:    +-0, 0.00% of mean

Stake:   2026-08-13 adjusted ('stake' is a set typical value for this test)
         824
         0 from mean, (0.00%) 
         0 from P50, (0.00%) 
test description Uses the 'pahole' tool to extract the object size of the connectdata struct (counted in number of bytes) from the build. One of these structs is allocated for every concurrent connection libcurl holds. The exact size of this struct depends on architecture and build options. This is also a debug-build, which may inflate the size somewhat.

Most recent 100 rounds

Data distribution

Data distribution

Full range

Full range

Downsamples the entire set to 20 data points.
Trend

Trend

Draws a trend-line for the full range set. The trend is only considered statistically significant if the P value is less than 0.05. Mann-Kendall says: statistically insignificant (P: 1.0000)

configure

--disable-shared --enable-debug --enable-ipv6 --with-gssapi --enable-werror --with-nghttp2 --prefix=/home/dast/test-curl-install --with-openssl --with-ngtcp2 --with-nghttp3 --with-libssh2 --with-test-caddy=/home/dast/caddy/caddy_linux_amd64 --enable-ssls-export --enable-httpsrr --with-test-nghttpx=/home/dast/build-nghttp2/bin/nghttpx --with-backtrace --enable-ntlm --enable-smb --enable-proxy-http3 --enable-httpsig

curl -V

WARNING: this libcurl is Debug-enabled, do not use in production

curl 8.22.0-DEV (x86_64-pc-linux-gnu) libcurl/8.22.0-DEV OpenSSL/3.6.3 zlib/1.3.2 brotli/1.2.0 zstd/1.5.7 libidn2/2.3.8 libpsl/0.23.1 libssh2/1.11.1 nghttp2/1.70.0 ngtcp2/1.24.0 nghttp3/1.17.0 mit-krb5/1.22.1 OpenLDAP/2.6.13
Release-Date: [unreleased]
Protocols: dict file ftp ftps gopher gophers http https imap imaps ipfs ipns ldap ldaps mqtt mqtts pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp ws wss
Features: alt-svc AsynchDNS brotli Debug GSS-API HSTS HTTP2 HTTP3 HTTPS-proxy HTTPSIG HTTPSRR IDN IPv6 Kerberos Largefile libz NTLM proxy-HTTP3 PSL SPNEGO SSL SSLS-EXPORT threadsafe UnixSockets zstd