curl performance tests
1942 builds
| First | 2026-08-10 12:05:01 (local time) |
| Last | 2026-09-26 01:10:41 (local time) |
| Period | 46.5 days |
| Rendered | 2026-09-25 23:10:49 UTC |
280 rounds
R279 GHA/linux: skip test 1674 in valgrind jobs (1 builds)
🔗 tests: require valgrind 3+ (2007-08-03)
R278 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)
R277 GHA/windows: fix MSVC arm job after upstream runner bump (2 builds)
R276 GHA: update dependency rustls/rustls-ffi to v0.15.4 (1 builds)
🔗 GHA/http3-linux: do not set `BORINGSSL_VERSION` for quiche builds
R275 http2: fix reset after 1xx response (4 builds)
🔗 KNOWN_BUGS: drop the curl-config private details entry
R274 imap: do size checks using 64-bit math (1 builds)
🔗 apple-sectrust: check ocsp copy alloc
R273 GHA/windows: bump stunnel to 5.82 (1 builds)
🔗 GHA/linux: move two steps to the background
R272 appveyor: drop two no-SSL jobs (1 builds)
R271 cf-ngtcp2-cmn: fix possible `-Wdeclaration-after-statement` (1 builds)
R270 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
R269 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
R268 httpsrr+ech: check target and port (1 builds)
🔗 cw-out: recheck callbacks for each call
🔗 GHA/macos: add Xcode 27, drop macos-14
R267 ssls: validate input arguments in import, export, and unpack (7 builds)
R266 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
R265 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
R264 ci: allow 30 minutes for valgrind jobs (3 builds)
R263 http: verify headers in fewer passes (1 builds)
R262 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
R261 sws: fix connection-monitor for connections closed before a request (1 builds)
R260 pytest: check server status without ssl verify (9 builds)
🔗 peer: preserve ipv6 props from "connect-to"
🔗 connection pool: use tbl and bsets
R259 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
R258 test-linter: verify test cases (1 builds)
R257 test: restore the old test 1609 as 3271 (1 builds)
R256 libtest/lib464.c: provide INADDR_LOOPBACK if not present (4 builds)
R255 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
R254 tests: remove tool name from libtests using default (6 builds)
R253 tests: for libtests, assume a default name (1 builds)
R252 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
R251 vdns: announce resolver start before the HTTPS RR query is sent (1 builds)
🔗 cf-ngtcp2-proxy: fix rx flow control
R250 curl_easy_send/recv: check pointer arg (1 builds)
R249 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
R248 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
R247 RELEASE-NOTES: synced (1 builds)
R246 escape: use hex-pair lookup in curl_easy_escape (13 builds)
R245 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
R244 http: only enable Negotiate/NTLM to allowed origins (1 builds)
R243 parsedate: remove the unused leading three letters (2 builds)
🔗 getinfo: make sure CURLINFO_EFFECTIVE_URL does not contain creds
R242 mprintf: avoid scanning strings twice for unbounded %s (2 builds)
🔗 base64: avoid repeated input loads when encoding
R241 CURLINFO_EFFECTIVE_URL.md: mention a short lifetime (1 builds)
R240 tool_doswin: recognize superscript numbers as reserved (1 builds)
🔗 mqtt: drain queued output before advancing the state machine
R239 examples: clean up crawler link parsing resources (2 builds)
🔗 http: ignore Proxy-Authenticate unless the response comes from a proxy
R238 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
R237 Dockerfile: update debian:bookworm-slim Docker digest to 3783cc0 (37 builds)
🔗 socks: support CURLAUTH_ONLY in CURLOPT_SOCKS5_AUTH
🔗 parsedate: time zone strings
R236 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
R235 connectionpool: some tweaks (10 builds)
R234 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
R233 perf-numparser: add number parsing performance test (1 builds)
🔗 u32_ptrset: a set of uint32_t + void* values
R232 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
R231 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
R230 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
R229 perf-tests: output two-digital decimals always (2 builds)
R228 httpsig-key.md: correct the generating Ed25519 keys commands (1 builds)
R227 tool: buffer headers before remote filename selection (1 builds)
🔗 tests/perf/dateparser: add
R226 ftplistparser: no more overwriting set.write_func (1 builds)
R225 tftp: verify direction in a few places (2 builds)
R224 http2: update a refused stream's error after GOAWAY (12 builds)
🔗 lib: reject internal handles in the multi/easy public API
R223 http2: initialize URL handle for server pushes (3 builds)
R222 cookie: accept slightly longer lines in cookie jars (2 builds)
R221 rtsp: do not read a response body when CURLOPT_NOBODY is set (15 builds)
R220 peer: speed up "same destination" check (7 builds)
🔗 hash: vary bucket placement across process runs
R219 glob: reduce the number of allocations for URLs that don't need globbing. (6 builds)
R218 urlapi: reject more junk from the zone id (18 builds)
🔗 multi-event: fix timeout of pending transfers
R217 telnet: make it work through proxy tunnels (2 builds)
R216 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
R215 test2924: CURLOPT_HTTP_TRANSFER_DECODING, chunked + Content-Length (3 builds)
R214 RELEASE-NOTES: synced (2 builds)
🔗 urlapi: reject spaces and control characters in zone id
R213 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
R212 urlapi: run the urlparser perf test faster (8 builds)
R211 GHA/non-native: bump cross-platform-actions, FreeBSD 14.5, enable DragonFly BSD jobs (4 builds)
R210 docs: mention scripts/testnum in the test suite docs (5 builds)
R209 tidy-up: drop mentions of `impacket` (13 builds)
R208 netrc: empty quoted values now produce a valid empty string (1 builds)
R207 SMB: drop support (1 builds)
🔗 lib: CURL_GLOBAL_WIN32 -> CURL_GLOBAL_WINSOCK
R206 GHA: enforce egress firewall for the labeler workflow (16 builds)
R205 CI: tidy up (2 builds)
R204 GHA: switch back to Azure apt mirror, strip the rest (5 builds)
R203 fnmatch: replace recursive matcher with iterative greedy algorithm (1 builds)
🔗 dynhds: grow header array geometrically
🔗 cw-out: avoid O(n^2) work while buffering paused output
R202 dnscache/conncache tweaks (1 builds)
R201 GHA: update pip dependencies (1 builds)
🔗 GHA: drop local fuzzer job in favor of running within the curl-fuzzer repo
R200 urldata: remove ssl_primary_config from easy handle (3 builds)
R199 conncache: avoid evicting connect-only connections (2 builds)
🔗 happy eyeballs: bound work from many duplicate/failing addresses
🔗 headers: avoid O(n^2) rescans in curl_easy_nextheader()
🔗 libssh2: skip repeat checkp() for already-absent hashed key types
🔗 lib: make private functions static and remove unused code
R198 GHA: set `cache-mode` (9 builds)
🔗 http proxy: some code cleanups
🔗 GHA: update awslabs/aws-lc to v5.8.0
🔗 CURLOPT_SSL_CTX_FUNCTION.md: client cert caveats
🔗 base64: optimize decode lookup table and quantum loop
R197 mulit_ev: remove socket references on forget (12 builds)
R196 tool_easysrc: reset the handle between --next operations (2 builds)
🔗 easy: duplicating a zero byte memory area needs no malloc
R195 lib: connection shutdown, cleanup code (10 builds)
🔗 netrc: survive comment-only .netrc file
🔗 h2 push: fix port check on pushed authority
🔗 url: match connections without force reuse and candidates
R194 RELEASE-NOTES: synced (9 builds)
🔗 os400: document curl_formadd_CCSID multi-chunk peculiarity
R193 test440: raise alloc limit (1 builds)
🔗 hash: change key arguments to const
R192 url: ntlm/negotiate, prohibit connection reuse on follows (2 builds)
R191 shellcheck-ci.sh: drop redundant GHA expression filter (1 builds)
R190 libssh2: match hashed known_hosts entries by host (11 builds)
🔗 ssl: dedup ssl_fsslctx
🔗 urldata: remove conn->given
🔗 hsts: cap max-age to two years
🔗 GHA: fix yaml comment in http3-linux.yml
R189 GHA: share apt/brew/pip install logic between workflows, related tidy-ups (7 builds)
🔗 conncache: remove bundle dest
R188 easy: make ca_cache_timeout standalone (2 builds)
🔗 mbedtls: fix ticket handling
🔗 http2: changes in error handling
R187 GHA: start using `background: true` to parallelize job steps (2 builds)
R186 GHA/linux: enable egress firewall reporting in one job, disable MotD (2 builds)
R185 hsts: on load, only remove exact duplicates (1 builds)
R184 imap: compare selected mailbox names case-sensitively (2 builds)
R183 test1679: unset `SSL_CERT_FILE`, use `TESTNUMBER` (7 builds)
🔗 GHA/curl-for-win: upload artifact as `curl.exe` (without using zip)
R182 cshutdown: make it smaller (2 builds)
R181 ftp: URL encode file names when wildcarding (6 builds)
R180 tests: raise some alloc limits (3 builds)
R179 VERSIONS: add Rock-solid releases shipping today (3 builds)
R178 appveyor.yml: fix the yaml, use 'true' instead of 'yes' (1 builds)
R177 build: convert HAS_TIME_T_UNSIGNED to a compile-time check (10 builds)
🔗 perf: add maprintf and simpleformat printf tests
🔗 config2setopts: always set the security options for SCP/SFTP
R176 appveyor: save an artifact for the vs2026 debug build (16 builds)
R175 openssl: use non-deprecated API for MD5/MD4 (8 builds)
🔗 curl_fopen: restore the uid and gid checks
🔗 RELEASE-NOTES: synced
R174 tool: (re)set SSL verification in --libcurl output (1 builds)
🔗 getparam: switch off CONNECT headers when using -J
🔗 lib: rename curlx/fopen.[ch] to curlx/win32-fopen.[ch]
R173 cookie: ignore individual cookie errors when loading (6 builds)
🔗 test 4657: -J with multiple redirects, use the last name
🔗 digest.h: add forward declaration
R172 schannel: clear borrowed sslContext on close (8 builds)
R171 http: reject resumed uploads (9 builds)
R170 schannel: auto_client_cert conn matching (6 builds)
🔗 hash: select key operations by type
🔗 ftp: tighten use_ssl check for conn reuse
🔗 digest: parse without storing 'value' in local buffer
R169 tool_cb_wrt: inject the no-clobber number before the extension (3 builds)
R168 digest: fix maximum length quoted value parsing (1 builds)
R167 build: drop `HTTP_ONLY` option (2 builds)
🔗 digest: check peer equality for staleness
🔗 multi: reduce struct size with small cleanups
R166 ossl_verifyhost: remove assumption of null termination of ASN1_STRING. (1 builds)
🔗 openssl/gtls: reject CRLfile with native CA store, matching rustls
🔗 CURLOPT*ISSUERCERT*: not verified cryptographically
R165 connect: fix for first ms connection shutdown (1 builds)
R164 GHA: update dependency google/boringssl to v0.20260903.0 (1 builds)
🔗 HTTP-CONNECT: do not react to 401 responses
R163 uint-bset: skip unused slots when counting (18 builds)
🔗 multi: remove redundant completion message list
R162 multihandle: some easy shrinks (2 builds)
🔗 connectdata: use less curltime
R161 GHA/non-native: re-enable FreeBSD riscv64 (1 builds)
🔗 multi: store timeout epoch as whole seconds
R160 escape: polish encoding and decoding for speed (1 builds)
🔗 mprintf: stage output and emit it in runs
🔗 clang-tidy: merge nested `if()`s
R159 appveyor: fix description, drop redundant env (1 builds)
🔗 curl_addrinfo: drop redundant parentheses
🔗 warnless: dedupe Intel compiler warning suppression pragmas
🔗 global_init: tidy up, simplify, fix issues
🔗 multi_ntfy: replace enabled bitset with inline flags
🔗 runtests: Added runnernums in order to have O(1) lookup
R158 tool_cb_wrt: try up to .9999 when no-clobbering (1 builds)
🔗 RELEASE-NOTES: synced
R157 x509: stricter parsing (1 builds)
🔗 docs: add the missing .html to the url-encode book link
R156 tests/perf: split "percent" into urlencode + urldecode (8 builds)
🔗 clang-tidy: disable readability-redundant-parentheses
R155 perf/base64: split into separate encoding plus decoding tests (1 builds)
🔗 CURLOPT_SHARE.md: remove bad explanation for cookie sharing
R154 vquic: fix preprocessor check for old Darwin versions (8 builds)
🔗 test1399: improve reliability
R153 tests: Test certificates with embedded zero bytes (3 builds)
R152 doh: reject undersized HTTPS RDATA (2 builds)
🔗 vtls: fix Curl_cert_hostcheck when the pattern is not a C string
🔗 ngtcp2: shrink max sendbuf
👉 curl-8_22_0
🔗 RELEASE-NOTES: synced
🔗 VERSIONS: add 8.22.0 and the pending next release
🔗 THANKS: contributors from the 8.22.0 release
R151 clang-tidy: enable check `bugprone-assignment-in-selection-statement` (8 builds)
R150 doh: drop assert from doh_resp_decode_httpsrr() (7 builds)
R149 tidy-up: misc C and CMake nits (1 builds)
🔗 GHA: bump Actions and pips
R148 lib: expire/progress handling, do less clock calls (2 builds)
🔗 h2proxy: remember goaway "last_stream_id"
R147 perf/percent: basic percent encode/decode performance test (4 builds)
R146 sspi ambient user checks: remove again (1 builds)
R145 http2: remove assert in ingress processing (1 builds)
🔗 tool_doswin: fix stdin data truncation
R144 wcurl: import v2026.08.30 (1 builds)
R143 tidy-up: formatting, messages and comments (6 builds)
🔗 autotools: alpha-sort `ETAGS_ARGS` list
R142 perf: 0-pad the nanosecond decimals correctly (2 builds)
🔗 CURLOPT_USERNAME.md: ambient username caveats
R141 perf/urlparser: provide a built-in set of URLs (1 builds)
R140 perf: restore the -DDEBUGBUILD for debug builds (1 builds)
🔗 cf-socket: avoid broken NetBSD SOCK_NONBLOCK
R139 build: add performance tests (2 builds)
🔗 openssl: avoid strlen() on the data from OpenSSL
R138 transfer: DID handling (15 builds)
🔗 schannel: fix ALPN erroneously disabled
R137 curl_setup.h: merge two `#if` blocks (1 builds)
🔗 winsock: drop redundant version checks at initialization
R136 strings: add length to CURL_EASY_STR_SET() (2 builds)
R135 clock: save one call (1 builds)
R134 GHA/non-native: disable riscv64 FreeBSD job due to upstream issue (2 builds)
R133 gopher: fix partial sends of CRLF (1 builds)
R132 conncache: guess maxconnects different (1 builds)
R131 lib: drop unused `system_win32.h` includes (19 builds)
R130 easy_lock: silence `portability-no-assembler` with clang-tidy 23.1.0+ (13 builds)
🔗 easy: fix unused global on non-Windows
R129 tidy-up: drop redundant parentheses (1 builds)
R128 GHA/non-native: bump cross-platform-actions to 1.5.0 (3 builds)
R127 schannel: add ALPN support for mingw-w64 <9 and 🔗 sspi: add local helper macro to avoid UNICODE branching
🔗 spnego_sspi: drop redundant UNICODE branch
🔗 GHA: run on `curl-*` branches
R126 CI: add a test of labeler patterns (11 builds)
🔗 CI: add a test of Python code using pyrefly
🔗 tests: enable and fix some new Python ruff warnings
R125 conncache: lower limit for auto maxconnects (29 builds)
R124 distfiles.sh: check tarball for unexpected files (29 builds)
R123 cookie: cookies set for an exact PSL domain is host-only (1 builds)
R122 dist: fix to drop test bundle .c files from the source tarball (1 builds)
R121 HISTORY.md: PSL support in 2015 (1 builds)
R120 sspi: enable channel-binding in mingw-w64 <9 builds (4 builds)
R119 tool: checkfds, open on null device (8 builds)
🔗 include: include when building for modern Linux.
R118 RELEASE-NOTES: synced (1 builds)
🔗 schannel: clear PFX password before free
R117 os400: rewrite upper ebcdic wrappers using dynbuf (4 builds)
🔗 os400: port latest header files changes to ILE/RPG interface
🔗 ipv6 scope_id: set from first peer
🔗 share unlink: forget connection
🔗 mprintf: acknowledge %F
🔗 HISTORY: September 1999: started using CVS
R116 h2 push: use squeaky clean easy handle (6 builds)
R115 mprintf: avoid never-ending loop for positive-infinite (22 builds)
R114 schannel: refresh stream sizes after renegotiation (3 builds)
R113 connection reuse: check SSL configs when doing a scheme upgrade (6 builds)
R112 mprintf: fix long double output (1 builds)
R111 proxy: CONNECT trailers handling (4 builds)
R110 macos sectrust: fail ocsp verify when not builtin (1 builds)
🔗 CODE_STYLE.md: describe how we write typecasts
R109 setopt: allow setting a referer from CURLINFO_REFERER (5 builds)
🔗 multi: xfer table initial size and growth
R108 imap: APPEND CRLF fix (1 builds)
R107 Makefile.am: improve etags (8 builds)
🔗 cookie: improve TAB handling
🔗 libcurl.md: emphasize that the output needs checking
R106 ngtcp2: avoid NULL deref in cf_ngtcp2_send (2 builds)
R105 connection reuse: age check (2 builds)
R104 CURLOPT_SOCKOPTFUNCTION.md: ALREADY_CONNECTED does not work for HTTP/3 (16 builds)
R103 openssl: aws-lc ocsp workaround (2 builds)
🔗 http digest: tie peer/credentials on input
R102 wolfssl: do not run Curl_wssl_setup_x509_store() twice (14 builds)
R101 test322: fix for disabled-manual builds (1 builds)
🔗 scripts/testnum: provide a few available test numbers
R100 tool_paramhlp: --proto only supports one modifier (2 builds)
🔗 hsts: only match the exact strings
R99 setopt: make NULL `CURLOPT_AWS_SIGV4` disable aws-sigv4 auth (1 builds)
R98 build: fold lists to use one source filename per line (1 builds)
R97 tidy-up: minimum version comments and messages (1 builds)
🔗 tool_cb_hdr: do not truncate etags output to stdout
R96 GHA/checkdocs: verify examples with picky warnings enables, also with clang (1 builds)
R95 tests: support switching off the stdout redirect per-test (1 builds)
R94 quic: upload improvements (2 builds)
R93 cmake: check libgsasl version at configure time (2 builds)
R92 FAQ: correct an option typo (2 builds)
👉 rc-8_22_0-3
🔗 RELEASE-NOTES: synced
R91 urldata: sort the connectdata struct fields by size (2 builds)
R90 altsvc: continue after unknown parameters (16 builds)
R89 strcase: inline the raw case conversions (2 builds)
R88 vtls: move 'native_ca_store' ssl_config_data => ssl_primary_config (12 builds)
R87 openssl: avoid conn reuse if provider is used (1 builds)
🔗 GHA: update openssl/openssl to v4.0.2
R86 ngtcp2+openssL: fix early data (1 builds)
R85 openssl: no server cert is only okay if also not pinned (5 builds)
R84 Dockerfile: update debian:bookworm-slim Docker digest to 8820086 (4 builds)
🔗 cmake: optimize OpenSSL fork detection
🔗 cmake/FindLibgsasl: fix to set `LIBGSASL_VERSION` with pkg-config detection
R83 spnego_sspi: pass channel bindings on initial context (3 builds)
🔗 tool_doswin: don't use `TerminateThread` in stdin relay
R82 vtls_scache: use case sensitive path match (4 builds)
R81 protocol: simpler Curl_getn_scheme runs faster (18 builds)
R80 vssh: silence gcc-11 `-Wnull-dereference`, dedupe `CURL_EASY_STR()` calls (21 builds)
R79 circleci: bump images to their latest revision (3 builds)
🔗 circleci: update URL in comment, include in future URL checks
R78 lib: silence gcc-16 compiler warnings `-Wmaybe-uninitialized` (2 builds)
R77 RELEASE-NOTES: synced (29 builds)
🔗 docs: mention possible auth option conflicts
R76 tidy-up: fix typos in docs and comments (3 builds)
R75 cookie: allow loading cookies for localhost (1 builds)
R74 docs: remove doubled word in SECURITY-ADVISORY.md (14 builds)
R73 docs: make 5 example snippets compile cleanly with clang (76 builds)
R72 GHA: update dependency pizlonator/fil-c to v0.684 (24 builds)
R71 VERSIONS.md: document Rock-solid curl releases (23 builds)
R70 ws: fix write callback error handling (5 builds)
R69 GHA/checksrc: preprocess workflows to lint more shell code (34 builds)
🔗 u8_strset: start with 8 default entries
R68 GHA: install MSYS2 Perl manually for latest GitHub runners (5 builds)
R67 lib: new easy option string storage (1 builds)
🔗 openssl: fix DER buffer leak in Apple SecTrust verification
R66 ldap: base64-encode LDIF values beginning with colon or less-than (28 builds)
🔗 docs: connection reuse behavior for socket callbacks
R65 tool_msgs: make notef() respect --silent (4 builds)
R64 url: fix handling of empty user in ntml matching (16 builds)
R63 test_07_upload: skip tests if nghttpx lacks QUIC (3 builds)
R62 http: custom Authorization: header overrides Negotiate (51 builds)
R61 docs: clarify that cookies need domain set to match (2 builds)
R60 urldata: remove the aptr struct (45 builds)
46 data-points
100G-speed, b64dec, b64enc, build, connectdata, 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, maprintf, multi-handle, numparser, simplef, single-maxalloc, single-numallocs, snprintf, urldecode, urlencode, urlparser,
data groups
cpu, encoders, http1, http2, http3, mem, parallel, parsers, printf, speed, structs,
4 moving averages to watch
Download speed single transfer HTTP:// (100G-speed)
higher is better, bytes/sec
1942 samples, 280 rounds
P0: 4581217330 (4.58 G)
P25: 5399567106 (5.40 G)
P50: 5537490307 (5.54 G)
P75: 5638137973 (5.64 G)
P100: 6190875672 (6.19 G)
Mean: 5525626694 (5.53 G)
Moving: 5443600184 (5.44 G), -1.48% from mean
Std dev: 185447569 (185.45 M), 3.36% of mean
Span: +-804829171 (804.83 M), 14.57% of mean
Most recent 100 rounds
Round 80 - 179 (of 280)
Round 0 - 99 (of 280)
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 insignificant (P: 0.5574)
Allocations for a single HTTP transfer (single-numallocs)
lower is better, allocs
1942 samples, 280 rounds
P0: 95
P25: 99
P50: 99
P75: 100
P100: 105
Mean: 99
Moving: 97, -1.81% from mean
Std dev: 2, 2.23% of mean
Span: +-5, 5.02% of mean
Most recent 100 rounds
Round 80 - 179 (of 280)
Round 0 - 99 (of 280)
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 insignificant (P: 0.0585)
Allocated memory for a single HTTP transfer (single-maxalloc)
lower is better, bytes
1942 samples, 280 rounds
P0: 126832
P25: 127662
P50: 128070
P75: 129910
P100: 132622
Mean: 128643
Moving: 126979, -1.29% from mean
Std dev: 1369, 1.06% of mean
Span: +-2895, 2.25% of mean
Most recent 100 rounds
Round 80 - 179 (of 280)
Round 0 - 99 (of 280)
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)
higher is better, bytes/sec
1937 samples, 280 rounds
P0: 2577915632 (2.58 G)
P25: 3540543015 (3.54 G)
P50: 3574410317 (3.57 G)
P75: 3596985680 (3.60 G)
P100: 3748897221 (3.75 G)
Mean: 3569088660 (3.57 G)
Moving: 3650190921 (3.65 G), 2.27% from mean
Std dev: 79210648 (79.21 M), 2.22% of mean
Span: +-585490794 (585.49 M), 16.40% of mean
Most recent 100 rounds
Round 80 - 179 (of 280)
Round 0 - 99 (of 280)
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 SIGNIFICANT (P: 0.0000)
higher is better, bytes/sec
1939 samples, 280 rounds
P0: 2095945908 (2.10 G)
P25: 2498775009 (2.50 G)
P50: 2547379278 (2.55 G)
P75: 2605442323 (2.61 G)
P100: 2659707876 (2.66 G)
Mean: 2542370124 (2.54 G)
Moving: 2483888308 (2.48 G), -2.30% from mean
Std dev: 68202112 (68.20 M), 2.68% of mean
Span: +-281880984 (281.88 M), 11.09% of mean
Most recent 100 rounds
Round 80 - 179 (of 280)
Round 0 - 99 (of 280)
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.0000)
higher is better, bytes/sec
1941 samples, 280 rounds
P0: 876627702 (876.63 M)
P25: 1062303489 (1.06 G)
P50: 1087911981 (1.09 G)
P75: 1104715638 (1.10 G)
P100: 1171450837 (1.17 G)
Mean: 1081745086 (1.08 G)
Moving: 1067571090 (1.07 G), -1.31% from mean
Std dev: 32582212 (32.58 M), 3.01% of mean
Span: +-147411567 (147.41 M), 13.63% of mean
Most recent 100 rounds
Round 80 - 179 (of 280)
Round 0 - 99 (of 280)
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.0000)
lower is better, bytes
1937 samples, 280 rounds
P0: 21037056 (21.04 M)
P25: 21950464 (21.95 M)
P50: 22319104 (22.32 M)
P75: 22482944 (22.48 M)
P100: 22962176 (22.96 M)
Mean: 22216085 (22.22 M)
Moving: 21502361 (21.50 M), -3.21% from mean
Std dev: 361571, 1.63% of mean
Span: +-962560, 4.33% of mean
Most recent 100 rounds
Round 80 - 179 (of 280)
Round 0 - 99 (of 280)
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)
lower is better, bytes
1939 samples, 280 rounds
P0: 13537280 (13.54 M)
P25: 14249984 (14.25 M)
P50: 14544896 (14.54 M)
P75: 14684160 (14.68 M)
P100: 15085568 (15.09 M)
Mean: 14465662 (14.47 M)
Moving: 13910835 (13.91 M), -3.84% from mean
Std dev: 281943, 1.95% of mean
Span: +-774144, 5.35% of mean
Most recent 100 rounds
Round 80 - 179 (of 280)
Round 0 - 99 (of 280)
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 SIGNIFICANT (P: 0.0000)
lower is better, bytes
1941 samples, 280 rounds
P0: 14946304 (14.95 M)
P25: 15761408 (15.76 M)
P50: 16015360 (16.02 M)
P75: 16171008 (16.17 M)
P100: 17469440 (17.47 M)
Mean: 15958975 (15.96 M)
Moving: 15410462 (15.41 M), -3.44% from mean
Std dev: 327587, 2.05% of mean
Span: +-1261568 (1.26 M), 7.91% of mean
Most recent 100 rounds
Round 80 - 179 (of 280)
Round 0 - 99 (of 280)
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 SIGNIFICANT (P: 0.0000)
lower is better, CPU%
1937 samples, 280 rounds
P0: 97.263
P25: 100.118
P50: 100.207
P75: 100.288
P100: 100.536
Mean: 100.191
Moving: 100.133, -0.06% from mean
Std dev: 0.191, 0.19% of mean
Span: +-1.637, 1.63% of mean
Most recent 100 rounds
Round 80 - 179 (of 280)
Round 0 - 99 (of 280)
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.2209)
lower is better, CPU%
1939 samples, 280 rounds
P0: 92.475
P25: 99.004
P50: 99.702
P75: 99.772
P100: 99.982
Mean: 99.313
Moving: 98.142, -1.18% from mean
Std dev: 0.752, 0.76% of mean
Span: +-3.753, 3.78% of mean
Most recent 100 rounds
Round 80 - 179 (of 280)
Round 0 - 99 (of 280)
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)
lower is better, CPU%
1941 samples, 280 rounds
P0: 84.928
P25: 92.156
P50: 92.832
P75: 93.345
P100: 97.391
Mean: 91.644
Moving: 86.581, -5.53% from mean
Std dev: 2.729, 2.98% of mean
Span: +-6.232, 6.80% of mean
Most recent 100 rounds
Round 80 - 179 (of 280)
Round 0 - 99 (of 280)
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)
higher is better, bytes/sec
1924 samples, 279 rounds
P0: 1964322029 (1.96 G)
P25: 2468614959 (2.47 G)
P50: 2479061311 (2.48 G)
P75: 2490636621 (2.49 G)
P100: 2565620563 (2.57 G)
Mean: 2482558540 (2.48 G)
Moving: 2541292466 (2.54 G), 2.37% from mean
Std dev: 35974959 (35.97 M), 1.45% of mean
Span: +-300649266 (300.65 M), 12.11% of mean
Most recent 100 rounds
Round 79 - 178 (of 279)
Round 0 - 99 (of 279)
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 SIGNIFICANT (P: 0.0000)
higher is better, bytes/sec
1924 samples, 279 rounds
P0: 70272149 (70.27 M)
P25: 1622888030 (1.62 G)
P50: 1646824071 (1.65 G)
P75: 1667199676 (1.67 G)
P100: 1747663018 (1.75 G)
Mean: 1638336664 (1.64 G)
Moving: 1649074244 (1.65 G), 0.66% from mean
Std dev: 80609672 (80.61 M), 4.92% of mean
Span: +-838695434 (838.70 M), 51.19% of mean
Most recent 100 rounds
Round 79 - 178 (of 279)
Round 0 - 99 (of 279)
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.0563)
higher is better, bytes/sec
1914 samples, 279 rounds
P0: 268008334 (268.01 M)
P25: 301576492 (301.58 M)
P50: 351427143 (351.43 M)
P75: 619090059 (619.09 M)
P100: 762398300 (762.40 M)
Mean: 453444798 (453.44 M)
Moving: 615497680 (615.50 M), 35.74% from mean
Std dev: 153858349 (153.86 M), 33.93% of mean
Span: +-247194983 (247.19 M), 54.51% of mean
Most recent 100 rounds
Round 79 - 178 (of 279)
Round 0 - 99 (of 279)
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.0000)
lower is better, bytes
1924 samples, 279 rounds
P0: 22003712 (22.00 M)
P25: 22753280 (22.75 M)
P50: 23015424 (23.02 M)
P75: 23138304 (23.14 M)
P100: 25808896 (25.81 M)
Mean: 22933133 (22.93 M)
Moving: 22337863 (22.34 M), -2.60% from mean
Std dev: 324343, 1.41% of mean
Span: +-1902592 (1.90 M), 8.30% of mean
Most recent 100 rounds
Round 79 - 178 (of 279)
Round 0 - 99 (of 279)
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)
lower is better, bytes
1924 samples, 279 rounds
P0: 20099072 (20.10 M)
P25: 20860928 (20.86 M)
P50: 21102592 (21.10 M)
P75: 21225472 (21.23 M)
P100: 21622784 (21.62 M)
Mean: 21025206 (21.03 M)
Moving: 20443299 (20.44 M), -2.77% from mean
Std dev: 272434, 1.30% of mean
Span: +-761856, 3.62% of mean
Most recent 100 rounds
Round 79 - 178 (of 279)
Round 0 - 99 (of 279)
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.0000)
lower is better, bytes
1914 samples, 279 rounds
P0: 27279360 (27.28 M)
P25: 50384896 (50.38 M)
P50: 542994432 (542.99 M)
P75: 543264768 (543.26 M)
P100: 543703040 (543.70 M)
Mean: 322306761 (322.31 M)
Moving: 50236129 (50.24 M), -84.41% from mean
Std dev: 245050470 (245.05 M), 76.03% of mean
Span: +-258211840 (258.21 M), 80.11% of mean
Most recent 100 rounds
Round 79 - 178 (of 279)
Round 0 - 99 (of 279)
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 SIGNIFICANT (P: 0.0000)
lower is better, CPU%
1924 samples, 279 rounds
P0: 95.789
P25: 99.953
P50: 100.006
P75: 100.054
P100: 100.211
Mean: 99.997
Moving: 99.980, -0.02% from mean
Std dev: 0.138, 0.14% of mean
Span: +-2.211, 2.21% of mean
Most recent 100 rounds
Round 79 - 178 (of 279)
Round 0 - 99 (of 279)
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.1179)
lower is better, CPU%
1924 samples, 279 rounds
P0: 4.179
P25: 92.796
P50: 95.639
P75: 96.117
P100: 97.435
Mean: 94.033
Moving: 89.424, -4.90% from mean
Std dev: 4.869, 5.18% of mean
Span: +-46.628, 49.59% of mean
Most recent 100 rounds
Round 79 - 178 (of 279)
Round 0 - 99 (of 279)
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)
lower is better, CPU%
1914 samples, 279 rounds
P0: 65.393
P25: 84.334
P50: 99.691
P75: 99.776
P100: 99.995
Mean: 89.570
Moving: 69.055, -22.90% from mean
Std dev: 12.706, 14.19% of mean
Span: +-17.301, 19.32% of mean
Most recent 100 rounds
Round 79 - 178 (of 279)
Round 0 - 99 (of 279)
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)
higher is better, requests/sec
1901 samples, 277 rounds
P0: 22998
P25: 31018
P50: 31938
P75: 35175
P100: 57858
Mean: 36560
Moving: 54733, 49.71% from mean
Std dev: 9804, 26.82% of mean
Span: +-17430, 47.67% of mean
Most recent 100 rounds
Round 77 - 176 (of 277)
Round 0 - 99 (of 277)
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.0000)
higher is better, requests/sec
1901 samples, 277 rounds
P0: 28121
P25: 30443
P50: 30728
P75: 31236
P100: 45660
Mean: 33367
Moving: 42753, 28.13% from mean
Std dev: 5166, 15.48% of mean
Span: +-8769, 26.28% of mean
Most recent 100 rounds
Round 77 - 176 (of 277)
Round 0 - 99 (of 277)
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 SIGNIFICANT (P: 0.0000)
higher is better, requests/sec
1901 samples, 277 rounds
P0: 20416
P25: 28890
P50: 29285
P75: 31909
P100: 40665
Mean: 31240
Moving: 38046, 21.78% from mean
Std dev: 3705, 11.86% of mean
Span: +-10124, 32.41% of mean
Most recent 100 rounds
Round 77 - 176 (of 277)
Round 0 - 99 (of 277)
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 SIGNIFICANT (P: 0.0000)
Memory use for HTTP/1 parallel requests (h1-req-mem)
lower is better, bytes
1901 samples, 277 rounds
P0: 17235968 (17.24 M)
P25: 18186240 (18.19 M)
P50: 18481152 (18.48 M)
P75: 19193856 (19.19 M)
P100: 20090880 (20.09 M)
Mean: 18678629 (18.68 M)
Moving: 18811617 (18.81 M), 0.71% from mean
Std dev: 643610, 3.45% of mean
Span: +-1427456 (1.43 M), 7.64% of mean
Most recent 100 rounds
Round 77 - 176 (of 277)
Round 0 - 99 (of 277)
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.0038)
Memory use for HTTP/2 parallel requests (h2-req-mem)
lower is better, bytes
1901 samples, 277 rounds
P0: 12328960 (12.33 M)
P25: 13053952 (13.05 M)
P50: 13299712 (13.30 M)
P75: 13414400 (13.41 M)
P100: 13905920 (13.91 M)
Mean: 13215882 (13.22 M)
Moving: 12643942 (12.64 M), -4.33% from mean
Std dev: 274266, 2.08% of mean
Span: +-788480, 5.97% of mean
Most recent 100 rounds
Round 77 - 176 (of 277)
Round 0 - 99 (of 277)
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.0000)
Memory use for HTTP/3 parallel requests (h3-req-mem)
lower is better, bytes
1901 samples, 277 rounds
P0: 12849152 (12.85 M)
P25: 13598720 (13.60 M)
P50: 13811712 (13.81 M)
P75: 13918208 (13.92 M)
P100: 14430208 (14.43 M)
Mean: 13727431 (13.73 M)
Moving: 13184040 (13.18 M), -3.96% from mean
Std dev: 260435, 1.90% of mean
Span: +-790528, 5.76% of mean
Most recent 100 rounds
Round 77 - 176 (of 277)
Round 0 - 99 (of 277)
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 SIGNIFICANT (P: 0.0000)
CPU use for HTTP/1 parallel requests (h1-req-cpu)
lower is better, CPU%
1901 samples, 277 rounds
P0: 96.417
P25: 99.768
P50: 99.996
P75: 100.215
P100: 101.197
Mean: 99.994
Moving: 99.973, -0.02% from mean
Std dev: 0.335, 0.34% of mean
Span: +-2.390, 2.39% of mean
Most recent 100 rounds
Round 77 - 176 (of 277)
Round 0 - 99 (of 277)
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.3451)
CPU use for HTTP/2 parallel requests (h2-req-cpu)
lower is better, CPU%
1901 samples, 277 rounds
P0: 90.999
P25: 99.563
P50: 99.975
P75: 100.215
P100: 100.802
Mean: 99.257
Moving: 96.096, -3.18% from mean
Std dev: 1.588, 1.60% of mean
Span: +-4.901, 4.94% of mean
Most recent 100 rounds
Round 77 - 176 (of 277)
Round 0 - 99 (of 277)
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 HTTP/3 parallel requests (h3-req-cpu)
lower is better, CPU%
1901 samples, 277 rounds
P0: 87.824
P25: 99.332
P50: 99.798
P75: 100.068
P100: 100.761
Mean: 99.400
Moving: 97.778, -1.63% from mean
Std dev: 1.051, 1.06% of mean
Span: +-6.469, 6.51% of mean
Most recent 100 rounds
Round 77 - 176 (of 277)
Round 0 - 99 (of 277)
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)
lower is better, bytes
1795 samples, 258 rounds
P0: 3048
P25: 3368
P50: 3424
P75: 3936
P100: 4256
Mean: 3564
Moving: 3064, -14.05% from mean
Std dev: 380, 10.68% of mean
Span: +-604, 16.94% of mean
Most recent 100 rounds
Round 58 - 157 (of 258)
Round 0 - 99 (of 258)
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)
lower is better, bytes
1795 samples, 258 rounds
P0: 656
P25: 672
P50: 872
P75: 872
P100: 920
Mean: 814
Moving: 688, -15.53% from mean
Std dev: 96, 11.85% of mean
Span: +-132, 16.21% of mean
Most recent 100 rounds
Round 58 - 157 (of 258)
Round 0 - 99 (of 258)
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)
lower is better, bytes
1795 samples, 258 rounds
P0: 704
P25: 760
P50: 816
P75: 816
P100: 824
Mean: 798
Moving: 715, -10.36% from mean
Std dev: 32, 4.03% of mean
Span: +-60, 7.52% of mean
Most recent 100 rounds
Round 58 - 157 (of 258)
Round 0 - 99 (of 258)
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)
lower is better, CPU%
1456 samples, 235 rounds
P0: 2.476
P25: 2.650
P50: 2.707
P75: 2.763
P100: 3.789
Mean: 2.711
Moving: 2.639, -2.65% from mean
Std dev: 0.097, 3.58% of mean
Span: +-0.656, 24.21% of mean
Most recent 100 rounds
Round 35 - 134 (of 235)
Round 0 - 99 (of 235)
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 SIGNIFICANT (P: 0.0000)
exact is better, bytes/sec
1456 samples, 235 rounds
P0: 5119499 (5.12 M)
P25: 5121319 (5.12 M)
P50: 5121829 (5.12 M)
P75: 5122028 (5.12 M)
P100: 5122437 (5.12 M)
Mean: 5121586 (5.12 M)
Moving: 5121703 (5.12 M), 0.00% from mean
Std dev: 628, 0.01% of mean
Span: +-1468, 0.03% of mean
Most recent 100 rounds
Round 35 - 134 (of 235)
Round 0 - 99 (of 235)
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.1033)
lower is better, nanoseconds
555 samples, 125 rounds
P0: 75.73
P25: 88.68
P50: 93.41
P75: 97.20
P100: 218.80
Mean: 115.06
Moving: 78.27, -31.97% from mean
Std dev: 49.81, 43.29% of mean
Span: +-71.53, 62.17% of mean
Most recent 100 rounds
Round 0 - 99 (of 125)
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.0000)
lower is better, nanoseconds
555 samples, 125 rounds
P0: 85.20
P25: 88.61
P50: 90.45
P75: 131.90
P100: 377.28
Mean: 152.02
Moving: 89.42, -41.18% from mean
Std dev: 107.24, 70.54% of mean
Span: +-146.04, 96.06% of mean
Most recent 100 rounds
Round 0 - 99 (of 125)
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)
lower is better, nanoseconds
602 samples, 139 rounds
P0: 191.75
P25: 201.36
P50: 205.70
P75: 421.97
P100: 489.35
Mean: 268.44
Moving: 204.30, -23.89% from mean
Std dev: 105.38, 39.26% of mean
Span: +-148.80, 55.43% of mean
Most recent 100 rounds
Round 0 - 99 (of 139)
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 SIGNIFICANT (P: 0.0000)
lower is better, nanoseconds
458 samples, 103 rounds
P0: 95.62
P25: 103.86
P50: 105.40
P75: 107.28
P100: 299.86
Mean: 114.31
Moving: 99.85, -12.65% from mean
Std dev: 41.36, 36.18% of mean
Span: +-102.12, 89.34% of mean
Most recent 100 rounds
Round 0 - 99 (of 103)
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 SIGNIFICANT (P: 0.0000)
lower is better, nanoseconds
458 samples, 103 rounds
P0: 78.80
P25: 82.39
P50: 83.63
P75: 84.67
P100: 215.65
Mean: 89.86
Moving: 84.36, -6.12% from mean
Std dev: 27.95, 31.11% of mean
Span: +-68.43, 76.14% of mean
Most recent 100 rounds
Round 0 - 99 (of 103)
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.2003)
lower is better, nanoseconds
602 samples, 139 rounds
P0: 130.43
P25: 133.44
P50: 156.10
P75: 347.99
P100: 405.80
Mean: 201.95
Moving: 134.29, -33.50% from mean
Std dev: 96.63, 47.85% of mean
Span: +-137.69, 68.18% of mean
Most recent 100 rounds
Round 0 - 99 (of 139)
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)
lower is better, nanoseconds
554 samples, 124 rounds
P0: 94.59
P25: 133.72
P50: 137.75
P75: 145.43
P100: 2131.33
Mean: 218.52
Moving: 105.18, -51.87% from mean
Std dev: 286.36, 131.04% of mean
Span: +-1018.37, 466.03% of mean
Most recent 100 rounds
Round 0 - 99 (of 124)
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)
lower is better, nanoseconds
554 samples, 124 rounds
P0: 160.51
P25: 165.70
P50: 168.31
P75: 172.85
P100: 602.36
Mean: 209.64
Moving: 167.83, -19.94% from mean
Std dev: 87.64, 41.81% of mean
Span: +-220.93, 105.38% of mean
Most recent 100 rounds
Round 0 - 99 (of 124)
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 SIGNIFICANT (P: 0.0000)
lower is better, nanoseconds
207 samples, 53 rounds
P0: 24.93
P25: 25.59
P50: 26.27
P75: 27.00
P100: 59.53
Mean: 28.16
Moving: 26.93, -4.34% from mean
Std dev: 7.61, 27.04% of mean
Span: +-17.30, 61.44% of mean
Most recent 53 rounds
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
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.0071)
lower is better, nanoseconds
183 samples, 46 rounds
P0: 8.24
P25: 8.72
P50: 9.40
P75: 9.55
P100: 22.50
Mean: 9.95
Moving: 9.55, -4.02% from mean
Std dev: 3.26, 32.72% of mean
Span: +-7.13, 71.66% of mean
Most recent 46 rounds
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
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.0028)
autotools build time (build)
lower is better, seconds
435 samples, 98 rounds
P0: 20.000
P25: 21.000
P50: 21.000
P75: 21.000
P100: 24.000
Mean: 21.089
Moving: 20.716, -1.77% from mean
Std dev: 0.471, 2.23% of mean
Span: +-2.000, 9.48% of mean
Most recent 98 rounds
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
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.0-DEV (x86_64-pc-linux-gnu) libcurl/8.23.0-DEV OpenSSL/3.6.4 zlib/1.3.2 brotli/1.2.0 zstd/1.5.7 libidn2/2.3.8 libpsl/0.23.3 nghttp2/1.70.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