Curl Performance Tests

speckx1 pts0 comments

curl performance tests

275 builds analyzed. Last run ended 2026-08-14 15:31:24 (Daniel's local time). This<br>page was rendered at 2026-08-14 13:31:25 UTC.

33 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, R32,<br>24 tests<br>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,<br>build details

R32 connections: use admin handles only for maintenance (5 builds)

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)<br>higher is better, bytes/sec

275 samples, 33 rounds<br>P0: 4857984365 (4.86 G)<br>P25: 5408710863 (5.41 G)<br>P50: 5494526918 (5.49 G)<br>P75: 5567323381 (5.57 G)<br>P100: 5941451695 (5.94 G)<br>Mean: 5488973558 (5.49 G)<br>Std dev: 125428527 (125.43 M), 2.29% of mean<br>Span: +-541733665 (541.73 M), 9.87% of mean

Stake: 2026-08-11 initial ('stake' is a set typical value for this test)<br>5475738172 (5.48 G)<br>-13235386 (-13.24 M) from mean, (-0.24%) current results are BETTER<br>-18788746 (-18.79 M) from P50, (-0.34%) current results are BETTER

test description

Downloads a single 100 gigabyte file over clear-text HTTP/1.1 from an Apache<br>httpd server running on localhost with the curl tool. The measured network<br>transfer speed in bytes per second is what the curl tool itself reports.

Most recent 100 rounds

Data distribution<br>Data distribution

Full range<br>Full range

Downsamples the entire set to 20 data points.

Trend<br>Trend

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

Allocations for...

builds plus speed build from libcurl

Related Articles