curl performance tests

curl/perf on GitHub
1464 builds
First2026-09-13 11:05:02 (local time)
Last2026-11-13 10:10:52 (local time)
Period61.0 days
Rendered2026-11-13 09:11:03 UTC
378 rounds
R377 RELEASE-NOTES: updated deprecations, drop wrong contributors (1 builds)
🔗 schannel: fix race condition in shared credential refcount
🔗 dynhds: some love, add slist parsing
R376 GHA/windows: dedupe MSYS2/Cygwin skiprun jobs (7 builds)
R375 RELEASE-NOTES: synced (10 builds)
🔗 transfer: add `never_retry` bit
🔗 DEPRECATE.md: MbedTLS is on its way out
🔗 cf-https-connect: finish selection when no alternate ALPN exists
🔗 vquic: increase ancillary buffer capacity for UDP GRO
🔗 vquic: truncate existing qlog files when opening them
🔗 http3: deliver response trailers as trailers, do not process as headers
🔗 vtls: avoid sending early data twice when a send blocks
🔗 http-proxy: reconnect on non-chunked CONNECT error framing
🔗 ngtcp2: fix busy pool on send
🔗 ws: keep metadata in sync with data
R374 GHA/windows: trade speed for stability in MSYS2 installs (13 builds)
R373 GHA: bump to LibreSSL 4.4.1 (4 builds)
R372 appveyor: tidy up browser update removal, keep a copy of the preinstalled cert bundles (4 builds)
🔗 build: drop detecting no longer used `wc_Des_EcbEncrypt()`
🔗 pytest: skip flaky test_02_33, test_02_34 for mbedtls and rustls
R371 GHA/windows: also exclude 1084 from torture due to hangs (4 builds)
🔗 DISTROS.md: add DragonFly BSD
🔗 GHA/non-native: disable DragonFly BSD, broken after upstream package updates
R370 proxy: authentication header handling (1 builds)
R369 file: document response header behavior for curl/libcurl options (cont.) (3 builds)
R368 file: document response header behavior for curl/libcurl options (16 builds)
🔗 GHA: replace ubuntu-latest with ubuntu-26.04
R367 KNOWN_BUGS.md: fix typo [ci skip] (4 builds)
🔗 scp: upload reliability
R366 GHA/windows: reduce/tweak flaky/hung Windows jobs (1 builds)
R365 GHA: measure torture test run times (1 builds)
🔗 tests: exclude 3300, 3301, 3306 from torture tests
R364 GHA: update dependency awslabs/aws-lc to v5.13.0 (1 builds)
🔗 GHA/linux: fix C++ linkage in AWS-LC builds
🔗 build: auto-detect `explicit_bzero()` in configure
R363 openssl: allow OCSP response to be up to 4 days old (2 builds)
🔗 http: init 'leading_unfold' for each request
R362 test442: reduce maximum memory+malloc spend (1 builds)
🔗 cookie: have getlist() not touch the source cookie list
R361 RELEASE-NOTES: synced (1 builds)
🔗 libssh2: treat zero SFTP status as an error
🔗 openldap: delete unsolicited notification messages
R360 cli_ev_download: fix memleak on error (5 builds)
R359 altsvc: flush origin entries across ALPNs (4 builds)
🔗 altsvc: reject invalid destination hostnames
🔗 tool: preserve transfer error when Retry-After exceeds retry-max-time
R358 cookie: cleanups and parse faster (8 builds)
R357 http2: set initial origin for pushed streams (2 builds)
🔗 ngtcp2: harden transport streams settings
🔗 multi: disconnect conn if available in add_handle
🔗 test1565: fix torture mode
🔗 build: drop "CA unsafe search" option for UWP, it's a no-op
R356 openssl: disable SSL_MODE_AUTO_RETRY (2 builds)
🔗 cookie: consider no path set to be "/"
R355 docs: CURLOPT_RESOLVE and --resolve operating on ASCII names (3 builds)
R354 schannel: fail if there's no TLS enabled protocols (12 builds)
R353 openssl: do full peer checks when the offered session is not resumed (9 builds)
🔗 libssh2: check the timeout during long SFTP directory listings
R352 TLS: improve the pinned key handling (12 builds)
🔗 hostcheck: do not strip trailing dot from dNSName/CN
🔗 SSLCERTS.md: recommend --insecure and -k a little different
R351 proxy: sort request headers correctly in connect-udp (23 builds)
🔗 RELEASE-NOTES: synced
R350 test2096: verify that non-server certificates are rejected (1 builds)
R349 GHA/macos-fix-certs: show what we deleted from the system `cert.pem` (4 builds)
R348 libssh2: close connections that time-out (4 builds)
R347 gtls: enforce Extended Key Usage for server certs (5 builds)
🔗 docs: clarify QLOGDIR backend support
🔗 gtls: assume TLSv1.3 support is present at runtime
🔗 gtls: merge nested `if`s
🔗 cmake: verify GnuTLS version at configure time
R346 http2: refuse server push on internal handles (1 builds)
R345 ftp: handle STOP in ftp_pp_statemachine (1 builds)
R344 curl_fopen: fix `dirslash()` returning "" for a root-level path (5 builds)
R343 test1699: add basic unit tests for `dirslash()` (1 builds)
R342 appveyor: remove bad preinstalled certs, extend cert checker script (7 builds)
R341 GHA: update dependencies ngtcp2/*, nghttp2 (3 builds)
R340 GHA: update debian:bookworm-slim Docker digest to 734a72b (1 builds)
R339 GHA/windows: use preinstalled python in MSYS2 jobs, enable in all (6 builds)
🔗 runtests: fix starting python test servers on Windows
R338 runtests: show `srcdir` value on Windows (19 builds)
R337 transfer: add Curl_xfer_try_send() (1 builds)
🔗 cfilters: connection maintenance
R336 runtests: handle rare errors gracefully (1 builds)
🔗 appveyor: enable WinIDN in 3 jobs
R335 socketpair: revert support for Apple `pipe2()` (2 builds)
🔗 tests/perf: document the cookierecv test
R334 tests/perf: separate out the socketpair functions to rh.c (1 builds)
R333 perf/cookierecv: perf test for receiving cookies (1 builds)
🔗 parsedate: remove condition that is always FALSE
R332 cmake: do not enable `-sdl` for VS2010 (9 builds)
R331 appveyor: disable browser/OS auto-updates to improve build performance (cont.) (5 builds)
R330 hmac: sync feature guards between header and implementation (2 builds)
R329 ftp: stop sending QUIT (1 builds)
R328 parsedate: minor performance tweaks and cleanups (3 builds)
R327 ws: keep the received frame in the decoding writer (2 builds)
R326 multi: do not set transfer timers when failing before DO (11 builds)
R325 tool_getpass: reserve the VMS password terminator byte (1 builds)
🔗 easy: clear pending resolve entries on reset
🔗 ftplistparser: do not take the newline after the "total" line as a file type
🔗 cookie: only consider localhost secure when not proxied
🔗 vquic: access CMSG_DATA() only if enough data
🔗 sha256: sync feature guards between header and implementation
🔗 ws: collect the whole PING payload before the automatic PONG
R324 RELEASE-NOTES: synced (7 builds)
🔗 content encoding: reject incomplete zlib streams (gzip, deflate)
R323 digest: only percent-encode control codes in quoted values (1 builds)
🔗 amiga: use native socket error accessors on classic AmigaOS
🔗 vtls: remove cf_ssl_is_alive()
R322 GHA/linux: fix boringssl job picking up stray system OpenSSL `.pc` config (1 builds)
🔗 cmake: enable MSVC `-sdl` picky compiler option
R321 GHA: bump cygwin/cygwin-install-action and pip ruff (13 builds)
R320 GHA/pkg-install: scan for bad root certs before pip install, cert tidy-ups (9 builds)
R319 appveyor: disable browser/OS auto-updates to improve build performance (4 builds)
🔗 GHA: drop brew mitigation after macos runner update
R318 peer: use the given proxy port, fall back to the documented default (41 builds)
R317 GHA: update dependency reuse to v6.3.0 (1 builds)
R316 tests: exclude 2088, 2089, 2095 (mTLS), 17_01_sslinfo_plain for LibreSSL 4.4.0 due to upstream limit (5 builds)
R315 openssl: stop I/O after fatal shutdown errors (1 builds)
R314 tests/data: add missing `nghttpx` feature tags, and one minor tidy-up (10 builds)
R313 cmake: verify OpenSSL 3+ version early (2 builds)
🔗 cmake: detect, display and verify LibreSSL version
R312 docs/cmdline-opts/retry.md: mention duplicate data with redirected output (2 builds)
🔗 GHA/macos: disable MD5 SSH tests with Homebrew libssh2
R311 scripts: don't insist on all executable bits on scripts (5 builds)
R310 NTLM: drop support (5 builds)
R309 docs: fix 'remove directory' typo in TODO.md (1 builds)
R308 altsvc: percent-decode the protocol-id before mapping (1 builds)
🔗 content_encoding: reject incomplete brotli streams
R307 urlapi: return a blank user blank even with CURLU_URLENCODE (1 builds)
R306 test20: fix to move `may-retry-on-valgrind` to the keywords section (8 builds)
🔗 urlapi: make zoneids starting with 25 to work
R305 GHA/non-native: bump cross-platform-action, OpenBSD 8.0, NetBSD 10.2 (2 builds)
R304 GHA: fix vulnerable OS- and preinstalled brew CA bundles (1 builds)
🔗 ldap: return 'AppleLDAP' version string for Apple's legacy OpenLDAP fork
🔗 autotools: respect `SED` variable where missing
R303 openssl: block eMudhra certs from Windows ca-native import (2 builds)
R302 GHA/linux: move CircleCI jobs to GHA, to see logs and run them on all PRs (5 builds)
R301 connection health check: always on idle connections (1 builds)
🔗 test 1623: add test data
🔗 RELEASE-NOTES: synced
🔗 connection close: additional checks
R300 Dockerfile: update debian:bookworm-slim Docker digest to 99c0b25 (5 builds)
🔗 lib: make private functions static
🔗 docs: minor unit test updates
R299 tool_writeout_json: work around clang-tidy warning (1 builds)
R298 lib: drop unused functions, make single-use ones static (4 builds)
🔗 singleuse.pl: make it CMake compatible, fix to fail when input is missing
R297 writeout: write JSON strings in chunks instead of buffering them (10 builds)
🔗 test: add unit tests for Curl_range
🔗 ftplistparser: cap the max amount of wildcard entries
R296 ci: fix circleci apt-get hanging (2 builds)
R295 urlapi: copy whole path segments in dedotdotify() (2 builds)
R294 tests: combine parallel retry progress checks (2 builds)
R293 unit3214: shrink the largest allowed handle sizes (1 builds)
🔗 ws: set seen_close only after the whole CLOSE frame
R292 peer: extract host name punycoded (1 builds)
R291 ws: get random masks in batches (1 builds)
🔗 perf: add wssend, a WebSocket send test
🔗 http_aws_sigv4: use qsort instead of bubble sort
🔗 lib: drop using `linux/tcp.h` kernel header for the FastOpen feature
🔗 GHA: update dependency pizlonator/fil-c to v0.687
R290 ci: rustls-ffi 0.15.6 -> 0.15.7 (10 builds)
R289 GHA/http3-linux: bump to OpenSSL 4.1.0, fix fallout (5 builds)
R288 GHA: update dependency openldap/openldap to v2.7.2 (2 builds)
🔗 tool_progress: avoid forward declaration
R287 smtp: avoid signed overflow in dot-stuffing (1 builds)
🔗 perf: add wsrecv, a WebSocket receive test
🔗 THANKS-filter: pff, missing Treston in the previous
🔗 THANKS-filter: David H-yan and Treston Cuzzort
🔗 libssh: try the agent and default keys when the key file guess fails
🔗 tool_progress: count retried transfers once
R286 SECURITY: remove a dupe link, drop "confidentiality" mention (1 builds)
R285 tool_paramhlp: reject trailing garbage in seconds arguments (2 builds)
🔗 THANKS-filter: drop "Autofix powered by AI"
🔗 test466: merge into test459
🔗 lib: drop unused `linux/tcp.h`, `netinet/tcp.h` includes
R284 SECURITY-ADVISORY: document some news (1 builds)
R283 sendf: clear reader stack when line-conversion setup fails (1 builds)
🔗 RELEASE-NOTES: synced
R282 tool_parsecfg: count skipped lines in config file line numbers (1 builds)
R281 docs: clarify WebSocket send retries after CURLE_AGAIN (15 builds)
🔗 rustls: reject retries shorter than buffered plaintext
R280 VULN-DISCLOSURE-POLICY.md: take severity < HIGH to GitHub (6 builds)
R279 http: use memchr() in Curl_verify_header (1 builds)
R278 cmake: revert to use pthreads for mingw-w64 gcc AWS-LC builds (12 builds)
R277 cmake: omit pthread dependency when building with AWS-LC 5.6.0+ and mingw-w64 (1 builds)
R276 GHA/curl-for-win: forward `CI` env to containers (7 builds)
R275 GHA/linux-old: replace httrack with curl, pin downloads to SHA-256 where missing (2 builds)
R274 tool_writeout_json: escape bytes that are not UTF-8 (1 builds)
🔗 urlapi: do not pass a NULL path to printf for file URLs
R273 urlapi: do not add the zone id twice to a set IPv6 host (1 builds)
🔗 pytest: update pip filelock from 4.0.12 to 4.2.4
R272 file: reject a -Y range larger than the file (10 builds)
🔗 perf: add respheaders, a response header parsing test
🔗 scorecard: test websocket uploads
R271 pytest: don't use a regex for a simple string search (2 builds)
R270 tool_getparam: preserve field names for empty URL-encoded files (7 builds)
R269 ws: mask outgoing payload in chunks (4 builds)
🔗 test-linter.pl: detect duplicate sections and superfluous comments
🔗 runtests: enable retries for threaded tests
R268 wolfssl: get the public key to pin from wolfSSL (2 builds)
🔗 tool_cb_hdr: do not truncate existing file on filename-less C-D header
R267 http: protocol filters (1 builds)
🔗 docs: document curl_easy_send retry arg restrictions
🔗 vtls_scache: add auto-client awareness to session key
R266 GHA: update LibreSSL to 4.4.0 (6 builds)
R265 GHA/scorecard: re-enable `cache-mode` key (1 builds)
🔗 GHA/pkg-install: switch Ubuntu mirror away from Azure
R264 test-linter.pl: enable and fix perl warnings, misc tidy-ups (1 builds)
R263 tests/data: drop stray `data` section, merge duplicate `features` sections (1 builds)
R262 tests/servers.pm: minor improvements (2 builds)
R261 renovate: set `minimumReleaseAge` to 3 days for custom components (1 builds)
R260 CI: drop ineffective workaround for MSYS2 runtime (2 builds)
🔗 GHA: bump dependencies
R259 tests/data: delete repetitive comments (1 builds)
🔗 connect: tweak the timeout handling
R258 test3500: delete redundant feature requirement (2 builds)
R257 test2501, test2502: add missing `nghttpx-h3` feature (1 builds)
R256 tests: move non-libtest `libtest/*.pl` scripts one level up (1 builds)
🔗 tidy-up: perl formatting nits
R255 cshutdown: fix event handling (1 builds)
🔗 imap: fail on multiple literals in custom FETCH response
R254 spacecheck: ensure `.pl` files have exec bits set (1 builds)
🔗 renovate: bump OpenLDAP once per month
🔗 Revert "GHA: update openldap/openldap to v2_7_2"
R253 connect: bound post-connect blocking connects by their own start (1 builds)
R252 tool_getpass: keep the last character when there is no newline (1 builds)
🔗 GHA: update openldap/openldap to v2_7_2
🔗 tool_parsecfg: accept indented options and CRLF line endings again
🔗 formdata: reject NULL filename and buffer name options
R251 telnet: return errors when poll or reading the input fails (1 builds)
🔗 multi: return the error from curl_multi_socket_all
🔗 macos: handle close during connect
R250 tool: reject more than 2 GB of data to URL encode (1 builds)
🔗 RELEASE-NOTES: synced
🔗 urlapi: check host for bad content after IDN decode
R249 ftp: return the error from an invalid range on download (9 builds)
🔗 FAQ: explain why no LOGOUT or QUIT is sent after a failed login
🔗 multi: undo the counters when curl_multi_add_handle fails
🔗 mk-ca-bundle.pl: restore option for NSS repo
🔗 curl_memrchr: keep reverse searches within the buffer
R248 runtests: simplify with/without-server and retry keywords (5 builds)
🔗 pytest: adjust threshold in test_20_11_crazy_pings to better pass on arm64 (cont. 2)
🔗 labeler: add TLS for mk-ca-bundle updates
🔗 ngh2: a shim in front of nghttp2 calls
R247 pytest: timeline check time_queue (5 builds)
🔗 runtests: apply `--retry=` only to tests that may benefit from it
R246 GHA: update debian:bookworm-slim Docker digest to 7ff6ba3 (2 builds)
R245 GHA/macos: replace CMake package detection workaround on iOS (9 builds)
R244 GHA/windows: continue on failure in 'disk space used' steps (1 builds)
R243 GHA: update dependency google/boringssl to v0.20261020.0 (1 builds)
🔗 openssl: avoid OpenSSL API namespace for local fallback symbol
R242 Revert "cw-out: avoid nested flush when unpausing from a callback" (1 builds)
R241 GHA: update dependency rustls/rustls-ffi to v0.15.6 (1 builds)
R240 curl_setup.h: fix dangling pointer in Unicode `CURL_DUMP_MODULE_PATHS()` (Windows) (4 builds)
R239 vtls_scache: if using native-ca, use that in key (1 builds)
R238 API: readonly calls and callbacks (1 builds)
R237 mk-ca-bundle.pl: add `-x` option to exclude specific CA roots (1 builds)
🔗 wolfssl: require a peer certificate when verifying
🔗 transfer: drop a pending read rewind when a new transfer starts
R236 mk-ca-bundle.pl: include SHA-256 fingerprint for each CA root (3 builds)
R235 gtls/sectrust: fix ocsp checks (1 builds)
R234 cw-pause: only pass EOS with the last flushed piece (1 builds)
🔗 x509asn1: free the field buffer when a public key value fails to convert
🔗 cw-out: avoid nested flush when unpausing from a callback
R233 runtests.md: fix typo in previous commit (12 builds)
R232 test3230: delete local edit committed by accident [ci skip] (2 builds)
R231 test776: delete long-running, flaky, NTLM stress test (1 builds)
🔗 runtests: add with/without-server test feature tags
R230 setopt: keep a paused transfer paused when the speed limit is changed (5 builds)
🔗 http2: fail the parent transfer on CURL_PUSH_ERROROUT
🔗 tool_cb_hdr: treat an empty -J filename as no filename
R229 http2: do not let a rate limit enlarge the stream window (1 builds)
R228 runtests: add way to manually skip tests requiring Python (1 builds)
🔗 CI: try setting `proc_retry:1` for MSYS2/Cygwin runtimes
R227 VULN-DISCLOSURE-POLICY.md: officially don't care for old issues (1 builds)
R226 curl: apply --hsts to ipfs:// and ipns:// gateway requests (2 builds)
R225 libssh: refuse SCP downloads large than CURL_OFF_T_MAX (8 builds)
🔗 test: fix test_60_h3_proxy.py to include scheme in log line
R224 autotools: drop adjacent duplicate `LIBS` from `libcurl.pc` (1 builds)
🔗 tests: drop unused includes
R223 appveyor: unignore test 1096 (1 builds)
R222 appveyor: run tests again (4 builds)
R221 processhelp.pm: improve task info in trace output (Windows) (2 builds)
R220 tool: append buffered response headers in constant time (4 builds)
R219 test1488: drop unused C preprocessor logic (1 builds)
🔗 x509: verify that ASN.1 parsing does not get out of sync
🔗 tool_operhlp: trim remote filename separators in linear time
🔗 doh: inherit the CURLOPT_DNS_* options from the mother transfer
R218 DEPENDENCIES.md: document LibreSSL 3.4.1+ as required (due to TLSv1.3 API) (1 builds)
🔗 pytest: adjust threshold in test_20_11_crazy_pings to better pass on arm64 (cont.)
R217 CMake/unix-cache.cmake: document BSD version requirements for two features (8 builds)
🔗 cmake: fix detecting `netinet/ip.h` on OpenBSD, FreeBSD <14.3 (HTTP/3)
R216 INSTALL.md: various updates and improvements (1 builds)
R215 tests: use %TESTNUMBER more instead of the actual test number (1 builds)
R214 docs: encourage verifying tarball before unpacking (5 builds)
🔗 getinfo: clarify invalid URL handling for CURLINFO_EFFECTIVE_URL
🔗 openssl: avoid CA caching for providers
R213 vtls_scache: add scheme name to session key (2 builds)
R212 INSTALL-CMAKE.md: update 'Testing' section (6 builds)
🔗 runtests: pass `--disable` to more curl feature detection invocations
🔗 runtests: disable test server log output on feature detection
R211 runtests: retrieve curl version without using disk files (9 builds)
R210 RELEASE-NOTES: synced (3 builds)
🔗 urldata: move OpenSSL provider state to OpenSSL context struct
R209 mailmap: add Zheng Yu (1 builds)
R208 cert-status: tests and fixes (6 builds)
🔗 socketpair: fix compiler warning `-Wunreachable-code`
🔗 apple sectrust: require OCSP for cert-status
R207 cmake: silence MSVC linker warning in debug builds with `CURL_DROP_UNUSED=ON` (2 builds)
R206 proxy: fix 0.0.0.0/0 and ::/0 CIDR matching (2 builds)
🔗 cmake: drop duplicate deduplication of linker flags
🔗 autotools: drop adjacent duplicate `LDFLAGS` from `libcurl.pc`
🔗 cmake: fix preconditions for option `CURL_STATIC_CRT=ON`
R205 setopt: fix setting `CURLWS_NOAUTOPONG` with compilers lacking C99 bool type (1 builds)
R204 altsvc: cap 'ma' values at two years maximum (1 builds)
🔗 test3990.pl: fix REUSE and too long line
R203 libssh2: make the knownhost name check also verify length (1 builds)
🔗 rtsp: refuse doing uploads with CRLF conversions
R202 tests: add `--dump-module-paths` debug option (Windows) (7 builds)
R201 tool: preserve absent schemes when appending upload filenames (2 builds)
R200 testutil: better function implementation (5 builds)
🔗 cookie: reload complete self-generated cookie jar rows
R199 parsedate: minor simplifications (2 builds)
R198 GHA: update dependency rustls/rustls-ffi to v0.15.5, add valgrind exception (1 builds)
R197 conncache: poll an idle connection for pending input on every reuse (1 builds)
R196 share: connection pool shutdowns (2 builds)
🔗 curl_getdate.md: clarify that the weekday name means nothing
🔗 checksrc: extend `PRINTFZ` rule to `%zx`
R195 examples: simplify timeout handling in multi-uv.c (2 builds)
🔗 appveyor: explicitly set the CA bundle in the curl test run
🔗 tidy-up: simplify CRTDBG logic in `generate.bat`
R194 msvc: replace debug CRT GUI popups with stderr output (1 builds)
🔗 tests: provide 'getrlimit' in curlinfo
R193 RELEASE-NOTES: synced (11 builds)
R192 appveyor: minor improvements (9 builds)
R191 test_06_eyeballs: silence Code Quality warning (2 builds)
🔗 runtests: add `-S` option to show success logs
🔗 tests/server: fix crashing with VS2013 and earlier
🔗 checksrc: add off-by-default `PRINTFZ` rule, enable for examples
🔗 slist: duplicate lists in linear time
🔗 pingpong: allow impa to add a prefix directly
🔗 vtls: encode session peer key fields unambiguously
🔗 GHA/windows: drop Cygwin `site:` customization, upstream made it the default
R190 GHA/non-native: upgrade deprecated CMake no-deprecation option (1 builds)
R189 VERSIONS: add the new rock-solid curl releases (2 builds)
👉 curl-8_23_0
R188 RELEASE-NOTES: synced (2 builds)
🔗 THANKS: add 8.23.0 contributors
R187 dnscache: compare full hostnames when lookup keys are truncated (2 builds)
🔗 schannel: retain close_notify records across send retries
R186 Revert "setopt: clear the 'custom' CA booleans when set to NULL" (7 builds)
R185 GHA/scorecard: disable the `cache-mode` key (5 builds)
🔗 tidy-up: miscellaneous
R184 CI: add Scorecard workflow (1 builds)
R183 tool_getparam: restore --socks5-gssapi-service (6 builds)
R182 examples: showcase more options used (3 builds)
🔗 wcurl: import v2026.10.12
R181 lib557: exclude three floating point test cases for VS2013 and earlier (9 builds)
🔗 testcurl.pl: drop support for building c-ares from embedded source tree
R180 test1119, 1167: disable MSYS2 argument conversion narrowly (6 builds)
R179 openssl: support X509 store caching when CApath is configured (2 builds)
🔗 GnuTLS: remove our own OCSP signature verification
R178 multi: adjust the cleanup order in multi_done (7 builds)
🔗 VERSIONS/RELEASE-PROCEDURE: adjusted release details
R177 docs: note CAINFO/SSL_VERIFYPEER/SSL_VERIFYSTATUS effect on LDAP (11 builds)
🔗 test1664: delete duplicate sub-test
🔗 GHA: update dependency pyspelling to v2.13
R176 unit1664: add workaround for VS2019 16.3 - VS2022 17.4 x64 miscompile (1 builds)
R175 test428: skip when running on older MSYS2 versions (19 builds)
R174 GHA/non-native: lower pccritic score for FreeBSD jobs (1 builds)
R173 test1119, 1167: disable MSYS2 argument conversion (5 builds)
R172 GHA: update dependency awslabs/aws-lc to v5.11.0, ruff to v0.17.0 (8 builds)
R171 runtests: unset `CURL_MEMDEBUG` for curl requests made to the CI API (15 builds)
R170 GHA/windows: drop unused `-ac` runtests options (3 builds)
🔗 http_chunks: accept exactly 17 characters chunk-size
R169 mbedtls: pass correct length for PEM/DER key blobs to mbedtls_pk_parse_key (3 builds)
R168 h3-proxy: teardown fix (1 builds)
🔗 url: CURLOPT_INTERFACE fix connection reuse match
R167 cf-ngtcp2-cmn: drop debug output (2 builds)
R166 THANKS-filter: drop "OSS-Fuzz", it is a service not someone to credit (1 builds)
🔗 mailmap: join Joushua's addresses
R165 pytest: fixture fixes (1 builds)
🔗 cfilters: fail a send that reports more written than requested
🔗 connect: keep IP info and connect time when connect fails
🔗 pingpong: guard sendleft against a send reporting more than requested
🔗 imap: close the connection on premature done instead of finalizing
R164 config2setopts: restore error on --proxy for proxy disabled builds (9 builds)
R163 mqttd: work around bogus VS2019 32-bit compiler warning (6 builds)
🔗 schannel: fix guard for old MSVC workaround
🔗 ldap: tidy up variable scope, merge nested `#if`s
R162 pytest: start all servers early (2 builds)
R161 websocket: auto PONG with client reader fix (1 builds)
🔗 rustls: consume CURLOPT_SSLCERT_BLOB / CURLOPT_SSLKEY_BLOB in the rustls backend
R160 ECH: rework config, add test cases (5 builds)
R159 pingpong: schedule server response timeouts for the socket API (10 builds)
🔗 cf-https-connect: re-arm the timer for the hard eyeballs timeout
🔗 share link: forget connection
🔗 tests: add SFTP connection reuse tests
🔗 unit1399: check microsecond precision across redirects
🔗 openssl: hardening
🔗 gnutls: hardening
R158 tool: handling of "synthetic" errors (1 builds)
🔗 cookie: accept and ignore empty property names in Set-Cookie
R157 GHA/non-native: fail early if `mport` did not complete the install step (2 builds)
R156 appveyor: sync debug option logic with GHA (1 builds)
R155 pytest: adjust threshold in test_20_11_crazy_pings to better pass on arm64 (4 builds)
R154 multi: is_finished() fix (5 builds)
🔗 connect: do not busy-loop in blocking connect without a timeout
R153 http: reject empty header names (1 builds)
🔗 easy: change event pollset construction
🔗 websocket: error on EOS with incomplete frame
R152 http2: use stream in userdata (1 builds)
🔗 config2setopts: rename define for maximum cookie header length
👉 rc-8_23_0-3
R151 RELEASE-NOTES: synced (1 builds)
R150 tests: clean up Python test code (5 builds)
R149 GHA/linux: run `randcurl` step in the background (2 builds)
R148 tool: add Unicode and long-filename support to `--create-dir` (Windows) (2 builds)
🔗 tool_util: add Unicode support to `tool_execpath()`
R147 url: check syntax before applying default-protocol (6 builds)
🔗 curl_multi_perform: doc update
🔗 cshutdown: use ptrarray instead of llist
R146 pytest: set `PerSourcePenalties no` when sshd supports it (1 builds)
R145 GHA: update debian:bookworm-slim Docker digest to 7c7b2c9 (5 builds)
R144 DEPRECATE: Common Name support in TLS certificates for OpenSSL (1 builds)
🔗 cookie: cookies for a PSL domain from jar just limits tailmatch
R143 CI: sort target file information by filename (5 builds)
R142 GHA/https3-linux: isolate and mitigate arm64 compiler optimization bugs with openssl and quiche (2 builds)
R141 schannel: handle empty tokens during renegotiation (7 builds)
🔗 retry.md: clarify that the server can override retry delay time
R140 ngtcp2: use stream in userdata (4 builds)
🔗 GHA: auto-bump stunnel, amissl, add comments to manually bumped deps
R139 cookie: accept and ignore values for 'secure' and 'httponly' (1 builds)
🔗 GHA: update dependency openldap/openldap to v2.7.1
🔗 renovate: fix bump rule for OpenLDAP (cont.)
🔗 renovate: drop redundant annotation tags
R138 renovate: fix bump rule for OpenLDAP (1 builds)
🔗 GHA/http3-linux: downgrade to OpenSSL 3.5.x LTS (from 3.6.x)
🔗 GHA: enable Renovate bumps for previous versions of mbedTLS and OpenSSL
R137 dynhds: check size overflows (2 builds)
R136 docs: SSL session import/file updates (3 builds)
🔗 GHA: update dependency pizlonator/fil-c to v0.686
R135 RELEASE-NOTES: synced (8 builds)
🔗 sshserver.pl: set `PerSourcePenalties no` when sshd supports it
🔗 tests: rename debug env to `CURL_DEBUG_VERSION`
🔗 GHA: drop unused bot configs (stale-bot and lock-threads)
R134 KNOWN_BUGS: widen the aws-sigv4 payload hash entry (1 builds)
🔗 lib: small performance tweaks
🔗 GHA: update dependency libressl/portable to v4.3.3
🔗 GHA/windows: bump dl-mingw gcc-16 toolchain
R133 http: simplify Curl_http_follow (12 builds)
🔗 GHA: move 7 checker jobs to arm64
R132 mdlinkcheck: pass `--retry-max-time` to avoid server-controlled long retry times (1 builds)
R131 docs: document and align the blocking situations (11 builds)
R130 IPFS.md: replace sunset link, allowlist another one to avoid `mdlinkcheck` hang (12 builds)
R129 tidy-up: drop broken Unicode codepoint links (2 builds)
R128 GHA/windows: replace `diffie-hellman-group-exchange-sha256` with `diffie-hellman-group16-sha512` (8 builds)
R127 spacecheck.pl: ensure files do not have their executable bit set (2 builds)
R126 GHA/codeql: switch Linux job to arm64 (1 builds)
R125 GHA/http3-linux: add CPU and revision number to cache keys, switch 2 jobs to arm64 (4 builds)
R124 GHA/linux: move the other Linux clang-tidy job to arm64 (3 builds)
R123 GHA/linux: use automatic CPU arch for cached artifacts, related improvements (1 builds)
R122 GHA/linux: move one Linux clang-tidy job to arm64 (2 builds)
🔗 renovate: move configuration file to .github subdir
R121 GHA/http3-linux: bump OpenSSL 3 to latest (2 builds)
🔗 tests/cmake: suppress stderr in `if` expression
🔗 GHA/distcheck: pass unix-style paths in MSYS2 configurations
R120 os400: use correct free function (1 builds)
🔗 openssl: fix OpenSSL v4.1 no-deprecated build
🔗 http2: init some callbacks for HTTP/2 push easy handles
🔗 ws: check pointer args in curl_ws_recv
R119 GHA/distcheck: switch MSYS2 integration tests to ucrt64 (9 builds)
R118 GHA/http3-linux: fix missing nghttp2 in 'AM openssl-prev' job (3 builds)
R117 GHA: bump Actions and pips (3 builds)
R116 GHA/http3-linux: bump to gnutls/nettle 4.0 (2 builds)
R115 GHA/http3-linux: try `semver-coerced` in Renovate nettle version annotation (2 builds)
🔗 GHA: update dependency gnutls/gnutls to v3.8.13
🔗 GHA/linux: fix misplaced Renovate annotation for nettle / gnutls
🔗 GHA/http3-linux: replace URL using insecure redirects with secure alternative
R114 runtests: add extra room for mininum number of tests in sliced jobs (2 builds)
🔗 GHA/linux: make Intel C build more interesting
R113 test/servers.pm: restrict h2/3 port reuse (2 builds)
🔗 GHA/linux: bump recent Alpine container to latest
R112 lib: replace `CURLX_FILE_MODE()` with `mode_t` cast (1 builds)
🔗 GHA/linux: bump Slackware container, re-enable SSL via GnuTLS
🔗 urldata: shrink connectdata negotiate states
🔗 conncache: never discard a connection still in use
🔗 dnscache: check hostname on lookup
🔗 socketpair: fix accept loop
🔗 http2: limit trailers and headers count
🔗 http_chunks: limit trailers size
🔗 parsedate: validate NULL date pointer in curl_getdate
🔗 GHA/linux: move GCC analyzer to the 2nd valgrind slice
R111 tidy-up: null-terminator, NUL byte (9 builds)
🔗 test2007: set `MSYS2_ARG_CONV_EXCL` to avoid flaky failures
R110 apple: sync hash init calls, add comments (2 builds)
R109 curl-openssl.m4: sync LibreSSL detection method with rest of forks (1 builds)
🔗 tidy-up: miscellaneous
R108 GHA/linux: split long valgrind job into two (2 builds)
R107 GHA/windows: enable MSYS2 cache for MSVC Intel Win32 job (1 builds)
R106 GHA: drop `actionlint`, abandoned upstream (2 builds)
R105 GHA/windows: reuse pre-installed MSYS2 in MSVC arm64 job (1 builds)
R104 GHA/windows: reduce number MSYS2 package cache entries (1 builds)
R103 GHA/checksrc: install pyrefly via brew to save manual bumps (3 builds)
🔗 test2007: bump to use SHA256 public key hash (was: MD5)
🔗 GHA/linux: disable MD5 SSH tests with Homebrew libssh2
R102 multi_ntfy: recheck callback on dispatch (11 builds)
🔗 peer: compare zoneid case sensitive
R101 GHA/linux: build and link BoringSSL statically (1 builds)
🔗 tests/http: use @classmethod when appropriate
R100 cmake: enable C++ library for GCC in AWS-LC/BoringSSL static builds (1 builds)
🔗 GHA: drop redundant BoringSSL build subdirectory
R99 GHA: sync BoringSSL tarball source with Renovate trigger URL, bump version (2 builds)
🔗 GHA: update dependency openssl/openssl to v4.0.3
R98 Revert "tool_operate: set stdin non-blocking unconditionally" (1 builds)
R97 test5018: replace literal log dir with macro, to fix `runner.pm` Perl warning (1 builds)
R96 vquic: use `CURLX_FILE_MODE()` in `Curl_qlogdir()` (3 builds)
🔗 GHA/windows: reduce MSYS2/Cygwin builds
R95 GHA/windows: suppress MSYS2 deprecation warnings in dl-mingw jobs (1 builds)
R94 GHA/pkg-install: make `apt-get` less verbose again (1 builds)
🔗 GHA/windows: merge 32-bit mingw job into the dl-mingw one
🔗 schannel: fix compiler warning `-Wstrict-aliasing` in ALPN code
R93 GHA/non-native: add 32-bit Android job (2 builds)
🔗 curlx_fopen: add macro to cast file mode
🔗 GHA: bump msys2/setup-msys2 to v2.33.0, drop wolfssl workaround
R92 tests: fix typos in a comment (3 builds)
R91 renovate.json: bump pyrefly once per month (7 builds)
R90 GHA: update dependency pyrefly to v1.3.2 (1 builds)
🔗 GHA/linux: reduce require tests to fit flaky stunnel fail
🔗 sectrust: add guards for rest of Apple OS flavors
🔗 apple: shorten versions in `__builtin_available()` calls
R89 DEPRECATE.md: reflect SMB removal (1 builds)
🔗 GHA: bump required test minimums
R88 GHA/windows: install Python for a MSYS2/mingw job (3 builds)
R87 GHA/windows: enable httpsig in Cygwin/MSYS2 jobs (3 builds)
R86 test2072: enable on Cygwin/MSYS2 (1 builds)
🔗 ftpserver.pl: fix warnings when running test 804
🔗 GHA/windows: install Python for Cygwin tests
R85 cmake/Find*: drop deprecated compatibility config variables (1 builds)
🔗 curl_setup.h: drop compatibility raw C flag `ENABLE_IPV6`
R84 pytest: silence pytest warnings (2 builds)
R83 socketpair: use `pipe2()` on Apple OSes (requires SDK 27) (1 builds)
R82 apple: sync up version guard macro style (1 builds)
R81 GHA/macos: add workaround to pass OS target version in GCC cmake jobs (1 builds)
🔗 GHA/windows: replace legacy mingw64 jobs with ucrt64 and clang64
R80 GHA/windows: drop redundant verbose build option (1 builds)
🔗 schannel: fix `-Wextra-semi-stmt` with clang and extra debug enabled
R79 GHA/windows: move Linux cross-builds to arm64 runners (12 builds)
R78 quiche: fix building with quiche 0.30.0 in CI, update/extend build instructions (1 builds)
R77 GHA/linux: switch two remaining valgrind jobs to arm64 runners (for ~2x speed) (1 builds)
🔗 cmake: link llvm stdc++ lib to AWS-LC/BoringSSL-specific feature detections only
🔗 GHA/windows: try fixing mingw64 diffutils deleted upstream
R76 http_aws_sigv4: fix the s3express service name (18 builds)
R75 GHA/curl-for-win: switch to arm64 runners for Linux and Windows builds (5 jobs) (8 builds)
R74 cf-socket: adjust NO_SYN_RETRANSMISSIONS for older Windows (1 builds)
R73 GHA/curl-for-win: drop redundant env (1 builds)
R72 GHA/http3-linux: reduce quiche cache blob size (1 builds)
🔗 GHA: update dependency cloudflare/quiche to v0.30.0 (revert)
R71 mprintf: make mprintf() and mfprintf() return -1 on error (3 builds)
R70 GHA/linux: pin ubuntu-24.04 in jobs where it makes sense (10 builds)
🔗 DEPENDENCIES.md: fix release date for valgrind 3.0.0 to 2005-08-03
R69 GHA/linux: skip test 1674 in valgrind jobs (1 builds)
🔗 tests: require valgrind 3+ (2007-08-03)
R68 GHA/linux: switch Rustls valgrind jobs to arm64 for >2x performance (1 builds)
🔗 GHA: update dependency wolfSSL/wolfssl to v5.9.4
🔗 GHA/linux: use Rustls bare zip package (was: .deb)
R67 GHA/windows: fix MSVC arm job after upstream runner bump (2 builds)
R66 GHA: update dependency rustls/rustls-ffi to v0.15.4 (1 builds)
🔗 GHA/http3-linux: do not set `BORINGSSL_VERSION` for quiche builds
R65 http2: fix reset after 1xx response (4 builds)
🔗 KNOWN_BUGS: drop the curl-config private details entry
R64 imap: do size checks using 64-bit math (1 builds)
🔗 apple-sectrust: check ocsp copy alloc
R63 GHA/windows: bump stunnel to 5.82 (1 builds)
🔗 GHA/linux: move two steps to the background
R62 appveyor: drop two no-SSL jobs (1 builds)
R61 cf-ngtcp2-cmn: fix possible `-Wdeclaration-after-statement` (1 builds)
R60 vtls_scache: remember lock state locally (2 builds)
🔗 rustls: break recv loop on empty plain text
🔗 cpool: do not use admin handle for conn lookup
👉 rc-8_23_0-2
R59 RELEASE-NOTES: synced (10 builds)
🔗 ws: do not auto-pong in raw mode
🔗 ftplistparser: when wildcarding, skip files with slashes
🔗 tool_operate: set stdin non-blocking unconditionally
R58 httpsrr+ech: check target and port (1 builds)
🔗 cw-out: recheck callbacks for each call
🔗 GHA/macos: add Xcode 27, drop macos-14
R57 ssls: validate input arguments in import, export, and unpack (7 builds)
R56 peer: parsing a zoneid as number fix (1 builds)
🔗 mbedtls: resend length check
🔗 GHA: update dependency cloudflare/quiche to v0.30.0
🔗 GHA: update dependency pyrefly to v1.3.1
R55 libssh: work with empty priv_key (1 builds)
🔗 CURLOPT_POSTFIELDSIZE.md: improve wording
🔗 cf-h1-proxy: stricter status line parsing
🔗 cf-h1-proxy: reset chunk state on new request
R54 ci: allow 30 minutes for valgrind jobs (3 builds)
R53 http: verify headers in fewer passes (1 builds)
R52 gtls: no early return on verify fail (1 builds)
🔗 mqtt: remaininglength check for 32-bit systems
🔗 output-dir.md: expand on its behavior
🔗 easy: validate buffer pointer in curl_easy_recv and curl_easy_send
R51 sws: fix connection-monitor for connections closed before a request (1 builds)
R50 pytest: check server status without ssl verify (9 builds)
🔗 peer: preserve ipv6 props from "connect-to"
🔗 connection pool: use tbl and bsets
R49 wolfssl: remove BIO destroy callback (8 builds)
🔗 if2ip: check interface name case sensitive
🔗 cf-ngtcp2-proxy: check for stream close on rx win update
🔗 urlapi: return NULL from curl_url_dup() when given a NULL handle
R48 test-linter: verify test cases (1 builds)
R47 test: restore the old test 1609 as 3271 (1 builds)
R46 libtest/lib464.c: provide INADDR_LOOPBACK if not present (4 builds)
R45 mime: bound Curl_mime_duppart() recursion depth (10 builds)
🔗 uint-table: add remove-max precaution
🔗 urlapi: make curl_url_dup() copy the guessed_scheme flag
🔗 cf-socket: clamp keepalive seconds-to-milliseconds conversions
R44 tests: remove tool name from libtests using default (6 builds)
R43 tests: for libtests, assume a default name (1 builds)
R42 openldap: hand it a dup'd socket, not curl's own (1 builds)
🔗 tool: cache header scheme
🔗 socksd: count connections per test, widen the method2 sentinel
🔗 socks: track SOCKS5 authentication per socket, not per connection
🔗 TODO: TLS channel bindings exists
R41 vdns: announce resolver start before the HTTPS RR query is sent (1 builds)
🔗 cf-ngtcp2-proxy: fix rx flow control
R40 curl_easy_send/recv: check pointer arg (1 builds)
R39 tests: add 'libtest' keyword for libtests (3 builds)
🔗 tests: invoke lib%TESTNUMBER when using the same tool as test
🔗 mprintf: use size_t width for the bare Windows %I modifier
R38 inet_pton: reject a colon that ends an IPv6 address (2 builds)
🔗 urlapi: normalize legacy numeric IPv4 hosts set via CURLUPART_HOST
🔗 os400: restore HAVE_FCHMOD
R37 RELEASE-NOTES: synced (1 builds)
R36 escape: use hex-pair lookup in curl_easy_escape (13 builds)
R35 capsule: reject a capsule that can never be buffered (1 builds)
🔗 digest: quote the digest-uri param as well
🔗 getinfo: make sure CURLINFO_REDIRECT_URL does not contain creds
R34 http: only enable Negotiate/NTLM to allowed origins (1 builds)
R33 parsedate: remove the unused leading three letters (2 builds)
🔗 getinfo: make sure CURLINFO_EFFECTIVE_URL does not contain creds
R32 mprintf: avoid scanning strings twice for unbounded %s (2 builds)
🔗 base64: avoid repeated input loads when encoding
R31 CURLINFO_EFFECTIVE_URL.md: mention a short lifetime (1 builds)
R30 tool_doswin: recognize superscript numbers as reserved (1 builds)
🔗 mqtt: drain queued output before advancing the state machine
R29 examples: clean up crawler link parsing resources (2 builds)
🔗 http: ignore Proxy-Authenticate unless the response comes from a proxy
R28 vssh: do not busy-loop in blocking state machine without a timeout (9 builds)
🔗 tool_operate: clear the retry flag when the output file fails
R27 Dockerfile: update debian:bookworm-slim Docker digest to 3783cc0 (37 builds)
🔗 socks: support CURLAUTH_ONLY in CURLOPT_SOCKS5_AUTH
🔗 parsedate: time zone strings
R26 ftp: require TLS on the data connection for implicit FTPS (12 builds)
🔗 tool_getparam: do not print the value of a redacted argument
🔗 formdata: reject a negative content length in curl_formadd
🔗 strparse: speed up number parsing
👉 rc-8_23_0-1
R25 connectionpool: some tweaks (10 builds)
R24 u8_strset, u32_ptrset: fix boundaries handling (2 builds)
🔗 http: abide to close-rules when transfer-encoding off
🔗 rtspd: read the test number from the server.cmd file
R23 perf-numparser: add number parsing performance test (1 builds)
🔗 u32_ptrset: a set of uint32_t + void* values
R22 curl/curlver.h: bump to 8.23.0 (2 builds)
🔗 GHA: update pizlonator/fil-c to v0.685
🔗 cw-pause: fix O(N^2) list traversal in cw_pause_flush
🔗 tool_ipfs: keep the path percent-encoded when rewriting to the gateway
R21 RELEASE-NOTES: synced (9 builds)
🔗 rtsp: do not send a learned session id to another origin
🔗 ldap: base64-encode a non-SAFE DN and reject a control-byte type name
🔗 tool_help: guard category[2] access when category is bare "-"
🔗 KNOWN_BUGS: drop the empty error buffer entry, it no longer happens
🔗 parsedate: find day names, months and time zones faster
🔗 http2: don't send a CURLE_SEND_ERROR after a valid http2 response
R20 mime: bound Curl_mime_prepare_headers() recursion depth (8 builds)
🔗 ftplistparser: only use the list parser in CURLWC_MATCHING state
🔗 tests: add test cases for --styled-output
🔗 pytests: ftp wildcard matching
🔗 multi_ntfy: fix handling of more than 128 notifications in a batch
🔗 u8_strset: rename and mask
R19 perf-tests: output two-digital decimals always (2 builds)
R18 httpsig-key.md: correct the generating Ed25519 keys commands (1 builds)
R17 tool: buffer headers before remote filename selection (1 builds)
🔗 tests/perf/dateparser: add
R16 ftplistparser: no more overwriting set.write_func (1 builds)
R15 tftp: verify direction in a few places (2 builds)
R14 http2: update a refused stream's error after GOAWAY (12 builds)
🔗 lib: reject internal handles in the multi/easy public API
R13 http2: initialize URL handle for server pushes (3 builds)
R12 cookie: accept slightly longer lines in cookie jars (2 builds)
R11 rtsp: do not read a response body when CURLOPT_NOBODY is set (15 builds)
R10 peer: speed up "same destination" check (7 builds)
🔗 hash: vary bucket placement across process runs
R9 glob: reduce the number of allocations for URLs that don't need globbing. (6 builds)
R8 urlapi: reject more junk from the zone id (18 builds)
🔗 multi-event: fix timeout of pending transfers
R7 telnet: make it work through proxy tunnels (2 builds)
R6 pingpong: add a max loop counter for Curl_pp_readresp (1 builds)
🔗 test 3555: Basic TELNET negotiation over HTTP proxy
🔗 rtsp: accept a Content-Length body on methods that expected none
R5 test2924: CURLOPT_HTTP_TRANSFER_DECODING, chunked + Content-Length (3 builds)
R4 RELEASE-NOTES: synced (2 builds)
🔗 urlapi: reject spaces and control characters in zone id
R3 curl_formadd.md: mention the strlen() for names as well (9 builds)
🔗 mime: do curl_mime_free() non-recursively
🔗 test 1605: move from unit to libtest
R2 urlapi: run the urlparser perf test faster (8 builds)
R1 GHA/non-native: bump cross-platform-actions, FreeBSD 14.5, enable DragonFly BSD jobs (4 builds)
R0 docs: mention scripts/testnum in the test suite docs (1 builds)
57 data-points 100G-speed, b64dec, b64enc, build, connectdata, cookierecv, curlsize, dateparser, easy-handle, h1-req-cpu, h1-req-mem, h1-requests, h1parallel-cpu, h1parallel-mem, h1parallel-speed, h1parallel-upload-cpu, h1parallel-upload-mem, h1parallel-upload-speed, h1rate-cpu, h1rate-speed, h2-req-cpu, h2-req-mem, h2-requests, h2parallel-cpu, h2parallel-mem, h2parallel-speed, h2parallel-upload-cpu, h2parallel-upload-mem, h2parallel-upload-speed, h3-req-cpu, h3-req-mem, h3-requests, h3parallel-cpu, h3parallel-mem, h3parallel-speed, h3parallel-upload-cpu, h3parallel-upload-mem, h3parallel-upload-speed, libcurlsize, maprintf, multi-handle, numparser, respheaders, simplef, single-maxalloc, single-numallocs, snprintf, urldecode, urlencode, urlparser, wsrecv1024, wsrecv125, wssend1024, wssend125, wsucpu, wsumem, wsupload,
data groups cookies, cpu, encoders, http1, http2, http3, mem, parallel, parsers, printf, size, speed, structs, websocket,

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

higher is better, bytes/sec
1464 samples, 378 rounds
P0:      4288306526 (4.29 G)
P25:     5305245387 (5.31 G)
P50:     5462914348 (5.46 G)
P75:     5610010539 (5.61 G)
P100:    6168715312 (6.17 G)
Mean:    5439694491 (5.44 G)
Moving:  5048577127 (5.05 G), -7.19% from mean
Std dev: 223020267 (223.02 M), 4.10% of mean
Span:    +-940204393 (940.20 M), 17.28% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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)

Allocations for a single HTTP transfer (single-numallocs)

lower is better, allocs
1464 samples, 378 rounds
P0:      96
P25:     96
P50:     96
P75:     96
P100:    103
Mean:    96.70
Moving:  96.00, -0.73% from mean
Std dev: 1.63, 1.68% of mean
Span:    +-3.50, 3.62% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
Description Downloads a single 512M 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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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
1464 samples, 378 rounds
P0:      126759
P25:     126783
P50:     126848
P75:     126879
P100:    127127
Mean:    126845
Moving:  126783, -0.05% from mean
Std dev: 70, 0.06% of mean
Span:    +-184, 0.15% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
Description Downloads a single 512M 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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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 (h1parallel-speed)

higher is better, bytes/sec
1464 samples, 378 rounds
P0:      2929839113 (2.93 G)
P25:     3655562163 (3.66 G)
P50:     3687390338 (3.69 G)
P75:     3707142475 (3.71 G)
P100:    3766264161 (3.77 G)
Mean:    3670070339 (3.67 G)
Moving:  3665316944 (3.67 G), -0.13% from mean
Std dev: 64047584 (64.05 M), 1.75% of mean
Span:    +-418212523 (418.21 M), 11.40% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.8233)

Download speed parallel HTTP/2 (h2parallel-speed)

higher is better, bytes/sec
1464 samples, 378 rounds
P0:      2091783479 (2.09 G)
P25:     2468183106 (2.47 G)
P50:     2495053976 (2.50 G)
P75:     2512743249 (2.51 G)
P100:    2556274429 (2.56 G)
Mean:    2484106905 (2.48 G)
Moving:  2461477295 (2.46 G), -0.91% from mean
Std dev: 44560321 (44.56 M), 1.79% of mean
Span:    +-232245475 (232.25 M), 9.35% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.0013)

Download speed parallel HTTP/3 (h3parallel-speed)

higher is better, bytes/sec
1464 samples, 378 rounds
P0:      807396232 (807.40 M)
P25:     1042407553 (1.04 G)
P50:     1060518842 (1.06 G)
P75:     1078062652 (1.08 G)
P100:    1131195096 (1.13 G)
Mean:    1057493362 (1.06 G)
Moving:  1044659085 (1.04 G), -1.21% from mean
Std dev: 29018951 (29.02 M), 2.74% of mean
Span:    +-161899431 (161.90 M), 15.31% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.0265)

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

lower is better, bytes
1464 samples, 378 rounds
P0:      20795392 (20.80 M)
P25:     21196800 (21.20 M)
P50:     21336064 (21.34 M)
P75:     21569536 (21.57 M)
P100:    22167552 (22.17 M)
Mean:    21389611 (21.39 M)
Moving:  21224734 (21.22 M), -0.77% from mean
Std dev: 241211, 1.13% of mean
Span:    +-686080, 3.21% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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)

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

lower is better, bytes
1464 samples, 378 rounds
P0:      13524992 (13.52 M)
P25:     13819904 (13.82 M)
P50:     13905920 (13.91 M)
P75:     14004224 (14.00 M)
P100:    14409728 (14.41 M)
Mean:    13919366 (13.92 M)
Moving:  13922549 (13.92 M), 0.02% from mean
Std dev: 133911, 0.96% of mean
Span:    +-442368, 3.18% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.2502)

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

lower is better, bytes
1464 samples, 378 rounds
P0:      14946304 (14.95 M)
P25:     15290368 (15.29 M)
P50:     15392768 (15.39 M)
P75:     15515648 (15.52 M)
P100:    17502208 (17.50 M)
Mean:    15436206 (15.44 M)
Moving:  15406530 (15.41 M), -0.19% from mean
Std dev: 243931, 1.58% of mean
Span:    +-1277952 (1.28 M), 8.28% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.2958)

CPU use for parallel HTTP/1 (h1parallel-cpu)

lower is better, CPU%
1464 samples, 378 rounds
P0:      97.366
P25:     100.072
P50:     100.162
P75:     100.246
P100:    100.564
Mean:    100.154
Moving:  100.084, -0.07% from mean
Std dev: 0.160, 0.16% of mean
Span:    +-1.599, 1.60% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
Description
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.1084)

CPU use for parallel HTTP/2 (h2parallel-cpu)

lower is better, CPU%
1464 samples, 378 rounds
P0:      91.892
P25:     97.677
P50:     97.973
P75:     98.285
P100:    98.672
Mean:    97.900
Moving:  97.572, -0.34% from mean
Std dev: 0.537, 0.55% of mean
Span:    +-3.390, 3.46% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
Description
Data distribution

Full range

Downsamples the entire set to 100 data points.

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)

CPU use for parallel HTTP/3 (h3parallel-cpu)

lower is better, CPU%
1464 samples, 378 rounds
P0:      84.849
P25:     86.650
P50:     86.825
P75:     87.041
P100:    88.946
Mean:    86.905
Moving:  87.673, 0.88% from mean
Std dev: 0.433, 0.50% of mean
Span:    +-2.049, 2.36% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
Description
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.0004)

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

higher is better, bytes/sec
1464 samples, 378 rounds
P0:      2342284223 (2.34 G)
P25:     2538008552 (2.54 G)
P50:     2550471969 (2.55 G)
P75:     2556761227 (2.56 G)
P100:    2571869024 (2.57 G)
Mean:    2544871344 (2.54 G)
Moving:  2548142377 (2.55 G), 0.13% from mean
Std dev: 19137339 (19.14 M), 0.75% of mean
Span:    +-114792400 (114.79 M), 4.51% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.3361)

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

higher is better, bytes/sec
1464 samples, 378 rounds
P0:      478550161 (478.55 M)
P25:     1625411287 (1.63 G)
P50:     1648363144 (1.65 G)
P75:     1669333107 (1.67 G)
P100:    1731710286 (1.73 G)
Mean:    1643084688 (1.64 G)
Moving:  1645735939 (1.65 G), 0.16% from mean
Std dev: 58405148 (58.41 M), 3.55% of mean
Span:    +-626580062 (626.58 M), 38.13% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.1373)

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

higher is better, bytes/sec
1457 samples, 375 rounds
P0:      539512697 (539.51 M)
P25:     614507365 (614.51 M)
P50:     619739239 (619.74 M)
P75:     622949154 (622.95 M)
P100:    660021708 (660.02 M)
Mean:    618565805 (618.57 M)
Moving:  622855853 (622.86 M), 0.69% from mean
Std dev: 9659792 (9.66 M), 1.56% of mean
Span:    +-60254505 (60.25 M), 9.74% of mean
Most recent 100 rounds
Round 175 - 274 (of 375)
Round 75 - 174 (of 375)
Round 0 - 99 (of 375)
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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.0142)

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

lower is better, bytes
1464 samples, 378 rounds
P0:      21762048 (21.76 M)
P25:     22024192 (22.02 M)
P50:     22159360 (22.16 M)
P75:     22331392 (22.33 M)
P100:    25366528 (25.37 M)
Mean:    22189159 (22.19 M)
Moving:  22073344 (22.07 M), -0.52% from mean
Std dev: 230727, 1.04% of mean
Span:    +-1802240 (1.80 M), 8.12% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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)

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

lower is better, bytes
1464 samples, 378 rounds
P0:      20090880 (20.09 M)
P25:     20340736 (20.34 M)
P50:     20426752 (20.43 M)
P75:     20516864 (20.52 M)
P100:    20922368 (20.92 M)
Mean:    20439784 (20.44 M)
Moving:  20434862 (20.43 M), -0.02% from mean
Std dev: 135940, 0.67% of mean
Span:    +-415744, 2.03% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.0473)

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

lower is better, bytes
1457 samples, 375 rounds
P0:      39690240 (39.69 M)
P25:     50110464 (50.11 M)
P50:     50216960 (50.22 M)
P75:     50327552 (50.33 M)
P100:    50675712 (50.68 M)
Mean:    50190775 (50.19 M)
Moving:  50226462 (50.23 M), 0.07% from mean
Std dev: 424563, 0.85% of mean
Span:    +-5492736 (5.49 M), 10.94% of mean
Most recent 100 rounds
Round 175 - 274 (of 375)
Round 75 - 174 (of 375)
Round 0 - 99 (of 375)
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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.8024)

CPU use for parallel upload HTTP/1 (h1parallel-upload-cpu)

lower is better, CPU%
1464 samples, 378 rounds
P0:      98.664
P25:     99.924
P50:     99.974
P75:     100.029
P100:    100.200
Mean:    99.974
Moving:  99.962, -0.01% from mean
Std dev: 0.081, 0.08% of mean
Span:    +-0.768, 0.77% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
Description
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.8605)

CPU use for parallel upload HTTP/2 (h2parallel-upload-cpu)

lower is better, CPU%
1464 samples, 378 rounds
P0:      8.974
P25:     89.104
P50:     89.898
P75:     90.519
P100:    93.145
Mean:    89.658
Moving:  89.772, 0.13% from mean
Std dev: 2.800, 3.12% of mean
Span:    +-42.085, 46.94% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
Description
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.9075)

CPU use for parallel upload HTTP/3 (h3parallel-upload-cpu)

lower is better, CPU%
1457 samples, 375 rounds
P0:      65.798
P25:     68.036
P50:     68.534
P75:     69.938
P100:    75.982
Mean:    68.989
Moving:  70.944, 2.83% from mean
Std dev: 1.368, 1.98% of mean
Span:    +-5.092, 7.38% of mean
Most recent 100 rounds
Round 175 - 274 (of 375)
Round 75 - 174 (of 375)
Round 0 - 99 (of 375)
Description
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.0001)

HTTP/1 parallel requests (h1-requests)

higher is better, requests/sec
1464 samples, 378 rounds
P0:      47619
P25:     54850
P50:     56204
P75:     57426
P100:    59957
Mean:    56028
Moving:  56683, 1.17% from mean
Std dev: 1841, 3.29% of mean
Span:    +-6169, 11.01% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.0025)

HTTP/2 parallel requests (h2-requests)

higher is better, requests/sec
1464 samples, 378 rounds
P0:      30696
P25:     41920
P50:     42650
P75:     43376
P100:    46215
Mean:    42598
Moving:  42229, -0.87% from mean
Std dev: 1238, 2.91% of mean
Span:    +-7759, 18.22% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.1098)

HTTP/3 parallel requests (h3-requests)

higher is better, requests/sec
1464 samples, 378 rounds
P0:      26650
P25:     37306
P50:     37921
P75:     38482
P100:    40266
Mean:    37867
Moving:  37788, -0.21% from mean
Std dev: 984, 2.60% of mean
Span:    +-6808, 17.98% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.1311)

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

lower is better, bytes
1464 samples, 378 rounds
P0:      16867328 (16.87 M)
P25:     18563072 (18.56 M)
P50:     18817024 (18.82 M)
P75:     19038208 (19.04 M)
P100:    19578880 (19.58 M)
Mean:    18646057 (18.65 M)
Moving:  18631884 (18.63 M), -0.08% from mean
Std dev: 606482, 3.25% of mean
Span:    +-1355776 (1.36 M), 7.27% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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)

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

lower is better, bytes
1464 samples, 378 rounds
P0:      12300288 (12.30 M)
P25:     12525568 (12.53 M)
P50:     12587008 (12.59 M)
P75:     12660736 (12.66 M)
P100:    13180928 (13.18 M)
Mean:    12608780 (12.61 M)
Moving:  12583403 (12.58 M), -0.20% from mean
Std dev: 124902, 0.99% of mean
Span:    +-440320, 3.49% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.0164)

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

lower is better, bytes
1464 samples, 378 rounds
P0:      12849152 (12.85 M)
P25:     13090816 (13.09 M)
P50:     13160448 (13.16 M)
P75:     13258752 (13.26 M)
P100:    13762560 (13.76 M)
Mean:    13183227 (13.18 M)
Moving:  13208371 (13.21 M), 0.19% from mean
Std dev: 135122, 1.02% of mean
Span:    +-456704, 3.46% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.5714)

CPU use for HTTP/1 parallel requests (h1-req-cpu)

lower is better, CPU%
1464 samples, 378 rounds
P0:      94.430
P25:     99.655
P50:     100.016
P75:     100.363
P100:    101.441
Mean:    99.999
Moving:  99.999, -0.00% from mean
Std dev: 0.543, 0.54% of mean
Span:    +-3.506, 3.51% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
Description
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.5337)

CPU use for HTTP/2 parallel requests (h2-req-cpu)

lower is better, CPU%
1464 samples, 378 rounds
P0:      90.814
P25:     95.149
P50:     95.766
P75:     96.439
P100:    98.302
Mean:    95.755
Moving:  95.312, -0.46% from mean
Std dev: 0.957, 1.00% of mean
Span:    +-3.744, 3.91% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
Description
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.0003)

CPU use for HTTP/3 parallel requests (h3-req-cpu)

lower is better, CPU%
1464 samples, 378 rounds
P0:      87.824
P25:     97.243
P50:     97.561
P75:     97.854
P100:    98.797
Mean:    97.536
Moving:  97.492, -0.05% from mean
Std dev: 0.523, 0.54% of mean
Span:    +-5.486, 5.63% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
Description
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.1296)

Curl_easy struct size (easy-handle)

lower is better, bytes
1464 samples, 378 rounds
P0:      3016
P25:     3016
P50:     3048
P75:     3056
P100:    3088
Mean:    3039.08
Moving:  3016.00, -0.76% from mean
Std dev: 22.41, 0.74% of mean
Span:    +-36.00, 1.18% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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)

Curl_multi struct size (multi-handle)

lower is better, bytes
1464 samples, 378 rounds
P0:      656
P25:     656
P50:     656
P75:     656
P100:    696
Mean:    663.89
Moving:  656.00, -1.19% from mean
Std dev: 15.58, 2.35% of mean
Span:    +-20.00, 3.01% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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)

connectdata struct size (connectdata)

lower is better, bytes
1464 samples, 378 rounds
P0:      656
P25:     656
P50:     664
P75:     704
P100:    752
Mean:    685.02
Moving:  664.00, -3.07% from mean
Std dev: 34.78, 5.08% of mean
Span:    +-48.00, 7.01% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
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.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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)

Limit-rate CPU use (h1rate-cpu)

lower is better, CPU%
1464 samples, 378 rounds
P0:      2.400
P25:     2.571
P50:     2.617
P75:     2.669
P100:    3.258
Mean:    2.626
Moving:  2.643, 0.65% from mean
Std dev: 0.079, 3.01% of mean
Span:    +-0.429, 16.34% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
Description Downloads 20 files in 20 parallel transfers over HTTPS using HTTP/1, each file is 100MB. The transfers are limited to download at 5000KB/sec. This measures the CPU% used for the transfer and it should be as low as possible.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.5695)

Limit-rate network speed (h1rate-speed)

exact is better, bytes/sec
1464 samples, 378 rounds
P0:      5119082 (5.12 M)
P25:     5121478 (5.12 M)
P50:     5122029 (5.12 M)
P75:     5122232 (5.12 M)
P100:    5122583 (5.12 M)
Mean:    5121793 (5.12 M)
Moving:  5121978 (5.12 M), 0.00% from mean
Std dev: 596, 0.01% of mean
Span:    +-1750, 0.03% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
Description Downloads 20 files in 20 parallel transfers over HTTPS using HTTP/1, each file is 100MB. The transfers are limited to download at 5000KB/sec. The result should be as exact to 5000KB/sec as possible. 5120000 bytes/second.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.1251)

base64 encoding (b64enc)

lower is better, nanoseconds
1464 samples, 378 rounds
P0:      75.66
P25:     81.85
P50:     82.67
P75:     83.80
P100:    99.61
Mean:    82.57
Moving:  76.38, -7.50% from mean
Std dev: 4.67, 5.66% of mean
Span:    +-11.98, 14.50% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
Description This base64 encodes a 256-byte buffer holding the octet corresponding to its index, 10 million times. The result is the average time in nanoseconds the encode function takes.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.0092)

base64 decoding (b64dec)

lower is better, nanoseconds
1464 samples, 378 rounds
P0:      85.20
P25:     88.95
P50:     91.14
P75:     93.89
P100:    98.70
Mean:    91.27
Moving:  93.05, 1.95% from mean
Std dev: 2.70, 2.96% of mean
Span:    +-6.75, 7.40% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
Description This test base64 decodes a buffer into a 256-byte buffer holding the octet corresponding to its index. 10 million times. The result is the average time in nanoseconds the decode function takes.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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)

snprintf (snprintf)

lower is better, nanoseconds
1464 samples, 378 rounds
P0:      191.75
P25:     202.29
P50:     205.38
P75:     208.06
P100:    235.19
Mean:    205.29
Moving:  203.28, -0.98% from mean
Std dev: 3.91, 1.91% of mean
Span:    +-21.72, 10.58% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
Description Invokes a decently complicated curl_msnprintf() call ten million times and evaluates the average time in nanoseconds the call took.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.9312)

maprintf (maprintf)

lower is better, nanoseconds
1464 samples, 378 rounds
P0:      93.67
P25:     98.55
P50:     100.80
P75:     104.14
P100:    118.40
Mean:    101.42
Moving:  99.33, -2.06% from mean
Std dev: 3.74, 3.69% of mean
Span:    +-12.37, 12.19% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
Description This test repeatedly formats a request header block with `curl_maprintf()`, which allocates the result, and measures the time per call. It exercises the allocating output path and a `curl_off_t` conversion.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.9028)

simple printf (simplef)

lower is better, nanoseconds
1464 samples, 378 rounds
P0:      79.62
P25:     83.66
P50:     84.82
P75:     85.73
P100:    88.64
Mean:    84.60
Moving:  82.62, -2.35% from mean
Std dev: 1.58, 1.87% of mean
Span:    +-4.51, 5.33% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
Description This test repeatedly formats a commonly used simple message with `curl_msnprintf()`: literal text plus `%s`, a `size_t` and a `curl_off_t`, with no width or precision. Where `snprintf` measures an elaborate format, this measures the common one.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.3127)

URL parsing (urlparser)

lower is better, nanoseconds
1464 samples, 378 rounds
P0:      126.84
P25:     131.09
P50:     132.41
P75:     134.13
P100:    180.90
Mean:    132.50
Moving:  130.47, -1.53% from mean
Std dev: 3.41, 2.57% of mean
Span:    +-27.03, 20.40% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
Description This test has a list of 500+ different URLs. It parses each URL seven times using different URL parser options. It then repeats it all 2500 times, for a total of 10,097,500 URL parser invocations. The result is the average time in nanoseconds the URL parsing function took across all invocations.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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)

URL encode (urlencode)

lower is better, nanoseconds
1464 samples, 378 rounds
P0:      94.59
P25:     96.57
P50:     112.05
P75:     113.76
P100:    158.75
Mean:    111.07
Moving:  95.73, -13.81% from mean
Std dev: 14.09, 12.69% of mean
Span:    +-32.08, 28.88% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
Description URL encodes a 256-byte buffer holding the octet corresponding to its index. 2.5 million times. The result is the average time in nanoseconds the encode function takes.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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)

URL decode (urldecode)

lower is better, nanoseconds
1464 samples, 378 rounds
P0:      160.14
P25:     165.16
P50:     166.93
P75:     168.76
P100:    183.27
Mean:    167.01
Moving:  166.82, -0.12% from mean
Std dev: 2.69, 1.61% of mean
Span:    +-11.57, 6.92% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
Description URL descode an encoded string that decodes into a 256-byte buffer holding the octet corresponding to its index. 2.5 million times. The result is the average time in nanoseconds the decode function takes.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.1445)

date parsing (dateparser)

lower is better, nanoseconds
1368 samples, 361 rounds
P0:      20.63
P25:     26.19
P50:     27.06
P75:     27.45
P100:    59.53
Mean:    26.43
Moving:  21.38, -19.11% from mean
Std dev: 3.75, 14.20% of mean
Span:    +-19.45, 73.60% of mean
Most recent 100 rounds
Round 161 - 260 (of 361)
Round 61 - 160 (of 361)
Round 0 - 99 (of 361)
Description This test has a list of 180+ different strings holding specific timestamps. They include both valid and invalid dates. The test parses each such timestamp 100,000 times each. The result is the average time in nanoseconds the date parser function curl_getdate() took across all invocations.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.5796)

number parsing (numparser)

lower is better, nanoseconds
1344 samples, 354 rounds
P0:      8.24
P25:     9.40
P50:     9.51
P75:     9.61
P100:    22.50
Mean:    9.60
Moving:  9.43, -1.75% from mean
Std dev: 1.22, 12.70% of mean
Span:    +-7.13, 74.34% of mean
Most recent 100 rounds
Round 154 - 253 (of 354)
Round 54 - 153 (of 354)
Round 0 - 99 (of 354)
Description This test has a list of 140+ different octal, decimal and hexadecimal numbers in strings. They include both valid and invalid numbers. The test parses each such number 500,000 times each. The result is the average time in nanoseconds the parser functions took across all invocations.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.4915)

autotools build time (build)

lower is better, seconds
1464 samples, 378 rounds
P0:      20.000
P25:     20.473
P50:     20.646
P75:     20.856
P100:    23.021
Mean:    20.696
Moving:  20.896, 0.97% from mean
Std dev: 0.335, 1.62% of mean
Span:    +-1.511, 7.30% of mean
Most recent 100 rounds
Round 178 - 277 (of 378)
Round 78 - 177 (of 378)
Round 0 - 99 (of 378)
Description This measures the time used for the configure + make sequence when building curl for the performance tests. Disabled shared build, unity with optimization.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.0289)

HTTP/1 response header parsing (respheaders)

lower is better, nanoseconds
490 samples, 106 rounds
P0:      13975.28
P25:     14462.52
P50:     14674.74
P75:     14955.64
P100:    22325.60
Mean:    15158.07
Moving:  14853.85, -2.01% from mean
Std dev: 1825.47, 12.04% of mean
Span:    +-4175.16, 27.54% of mean
Most recent 100 rounds
Round 0 - 99 (of 106)
Description Measure HTTP response header parsing performance. 25,000 responses each having 200 HTTP/1.1 headers. The average time it takes to parse all 200.
Data distribution

Full range

Downsamples the entire set to 100 data points.

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.0257)

WebSocket receive 125 byte frames (wsrecv125)

lower is better, nanoseconds
428 samples, 91 rounds
P0:      36.66
P25:     38.85
P50:     40.30
P75:     44.54
P100:    52.91
Mean:    41.56
Moving:  39.25, -5.55% from mean
Std dev: 3.09, 7.44% of mean
Span:    +-8.12, 19.55% of mean
Most recent 91 rounds
Description Upgrades a connection to WebSocket over a local socket pair, with no server involved, and receives unmasked 500,000 binary 125-byte frames. Times the average handling time per frame.
Data distribution

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)

WebSocket send 125 byte frames (wssend125)

lower is better, nanoseconds
386 samples, 78 rounds
P0:      614.51
P25:     621.04
P50:     624.21
P75:     628.72
P100:    683.70
Mean:    625.53
Moving:  626.89, 0.22% from mean
Std dev: 7.03, 1.12% of mean
Span:    +-34.60, 5.53% of mean
Most recent 78 rounds
Description Upgrades a connection to WebSocket over a local socket pair, with no server involved, and sends 500,000 binary 125-byte frames. Times the average handling time per frame.
Data distribution

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.1366)

WebSocket receive 1024 byte frames (wsrecv1024)

lower is better, nanoseconds
428 samples, 91 rounds
P0:      114.52
P25:     117.53
P50:     119.94
P75:     123.06
P100:    170.69
Mean:    120.73
Moving:  118.13, -2.15% from mean
Std dev: 4.50, 3.73% of mean
Span:    +-28.09, 23.26% of mean
Most recent 91 rounds
Description Upgrades a connection to WebSocket over a local socket pair, with no server involved, and receives unmasked 500,000 binary 1,024-byte frames. Times the average handling time per frame.
Data distribution

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)

WebSocket send 1024 byte frames (wssend1024)

lower is better, nanoseconds
386 samples, 78 rounds
P0:      702.14
P25:     712.86
P50:     717.65
P75:     723.06
P100:    754.43
Mean:    718.34
Moving:  720.06, 0.24% from mean
Std dev: 7.80, 1.09% of mean
Span:    +-26.14, 3.64% of mean
Most recent 78 rounds
Description Upgrades a connection to WebSocket over a local socket pair, with no server involved, and sends 500,000 binary 1,024-byte frames. Times the average handling time per frame.
Data distribution

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.6289)

Transfer speed single WebSocket upload (wsupload)

higher is better, bytes/sec
423 samples, 89 rounds
P0:      834015835 (834.02 M)
P25:     954331038 (954.33 M)
P50:     972779005 (972.78 M)
P75:     1013638907 (1.01 G)
P100:    1257906783 (1.26 G)
Mean:    987302215 (987.30 M)
Moving:  971388781 (971.39 M), -1.61% from mean
Std dev: 56036187 (56.04 M), 5.68% of mean
Span:    +-211945474 (211.95 M), 21.47% of mean
Most recent 89 rounds
Description
Data distribution

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.3193)

Memory use single WebSocket upload (wsumem)

lower is better, bytes
423 samples, 89 rounds
P0:      10199040 (10.20 M)
P25:     10346496 (10.35 M)
P50:     10399744 (10.40 M)
P75:     10440704 (10.44 M)
P100:    10756096 (10.76 M)
Mean:    10396180 (10.40 M)
Moving:  10417930 (10.42 M), 0.21% from mean
Std dev: 74703, 0.72% of mean
Span:    +-278528, 2.68% of mean
Most recent 89 rounds
Description Uploads 2GB data over WebSocket in a single stream to a local Apache httpd. Measures amount of RSS memory used during the transfer.
Data distribution

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.0426)

CPU use single WebSocket upload (wsucpu)

lower is better, CPU%
423 samples, 89 rounds
P0:      62.533
P25:     73.420
P50:     74.891
P75:     78.868
P100:    100.440
Mean:    76.598
Moving:  75.281, -1.72% from mean
Std dev: 5.184, 6.77% of mean
Span:    +-18.954, 24.74% of mean
Most recent 89 rounds
Description Uploads 2GB data over WebSocket in a single stream to a local Apache httpd. Measures CPU use.
Data distribution

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.2408)

Cookie receive speed (cookierecv)

lower is better, nanoseconds
218 samples, 45 rounds
P0:      566.06
P25:     586.31
P50:     629.53
P75:     637.08
P100:    668.46
Mean:    615.42
Moving:  597.14, -2.97% from mean
Std dev: 26.37, 4.29% of mean
Span:    +-51.20, 8.32% of mean
Most recent 45 rounds
Description Measure HTTP cookie parsing performance. The test sends 50,000 responses each having 18 set-cookie headers. The average time it takes to parse each cookie.
Data distribution

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)

curl tool binary size (curlsize)

lower is better, bytes
423 samples, 89 rounds
P0:      1493456 (1.49 M)
P25:     1497552 (1.50 M)
P50:     1501648 (1.50 M)
P75:     1501680 (1.50 M)
P100:    1505808 (1.51 M)
Mean:    1499919 (1.50 M)
Moving:  1502193 (1.50 M), 0.15% from mean
Std dev: 2578, 0.17% of mean
Span:    +-6176, 0.41% of mean
Most recent 89 rounds
Description The size of the curl tool on disk, built optimized with a static libcurl on x64-86. Stripped.
Data distribution

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)

libcurl.a binary size (libcurlsize)

lower is better, bytes
423 samples, 89 rounds
P0:      1071012 (1.07 M)
P25:     1071788 (1.07 M)
P50:     1072692 (1.07 M)
P75:     1073252 (1.07 M)
P100:    1076444 (1.08 M)
Mean:    1072755 (1.07 M)
Moving:  1074551 (1.07 M), 0.17% from mean
Std dev: 1356, 0.13% of mean
Span:    +-2716, 0.25% of mean
Most recent 89 rounds
Description The size of the libcurl.a static lib on disk, built optimized on x64-86. Stripped.
Data distribution

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)

configure

--enable-unity --disable-shared --enable-ipv6 --with-gssapi --enable-werror --with-nghttp2 --with-openssl --with-ngtcp2 --with-nghttp3 --with-test-caddy=/home/dast/caddy/caddy_linux_amd64 --enable-httpsrr --with-test-nghttpx=/home/dast/build-nghttp2/bin/nghttpx --enable-proxy-http3 --enable-httpsig

curl -V

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