Skip to content
rustle

rustle against 3proxy

Same machines, same rules, one core each. rustle is first in 41 of 41 tests of the campaign; 16 of them run on both proxies, with the conditions next to every number.

1 core per proxy · authentication on · Scaleway Elastic Metal, Paris, AMD EPYC 8224P · 25 Gbit/s private network (23.5 measured) · median of 3 runs · seed 2004113323 · campaign of 2026-10-28.

The short version

rustle had the better value in 16 of the 16 tests where both it and 3proxy ran. 3proxy was not ahead in any of them. In this campaign 3proxy has no HTTPS proxy port and HTTP/2 to clients, so the tests that need them are not in the tables. Every value is a median of 3 runs, with the exact figures in the tables below.

What each one supports

Protocols supported by rustle and 3proxy
Protocolrustle3proxy
HTTP proxy and CONNECT tunnelsYesYes
HTTPS proxy port (TLS)YesNo
HTTP/2 to clientsYesNo
WebSocket upgradesYesYes

As built and configured in the campaign, see “How 3proxy was run” below.

Test by test

Best clean concurrency level of each proxy. The last column is the ratio of rustle’s figure to 3proxy’s: how many times more or less. For memory and CPU, less is better.

Plain HTTP proxy port

Plain HTTP proxy port: rustle against 3proxy
Testrustle3proxyRatio
HTTP, 1 KB responsesreq/s55,25821,0322.6× more
HTTP, 10 KB responsesreq/s40,78319,1692.1× more
HTTP, 1 KB responses, a new connection per requestreq/s27,8275,1325.4× more
HTTP, 1 MB responsesreq/s2,6241,7841.5× more
HTTP, 10 MB responsesreq/s2681911.4× more
CONNECT tunnels, bulk transferGbit/s22.015.71.4× more
CPU cost per request (1 KB)µs/req18.147.62.6× less
Memory with 1,000 open tunnelsMB141047.4× less
Memory with 5,000 open tunnelsMB4049912× less
Memory with 10,000 open tunnelsMB5499218× less
Memory with 25,000 open tunnelsMB952,46126× less

WebSocket, plain

WebSocket, plain: rustle against 3proxy
Testrustle3proxyRatio
WebSocket, 64-byte messagesmsg/s58,50633,1361.8× more
WebSocket round trip, 64-byte messages (p99)ms1.33.22.5× less
CPU cost per WebSocket messageµs/msg17.130.21.8× less
WebSocket, 64 KB messagesGbit/s11.67.91.5× more
WebSocket, one connection per exchangemsg/s10,74025143× more

These are the figures of one campaign, on one kind of traffic. What the numbers do not show, multi-core results and the other proxies

How 3proxy was run

3proxy 1.0.0

from source, Makefile.Linux

  • proxy -a -osTCP_NODELAY -ocTCP_NODELAY (documented for small exchanges; -a = no Forwarded header, like the others)
  • maxconn, nscache, timeouts

What the campaign showed

  • Its best level at 1 KB is 256 connections: it used 19 % of a core at 64 connections and 99 % at 1,024 in the A/B of FAIRNESS.md, hence the concurrency sweep.
  • Without any socket option it sits in Nagle and a 40 ms delayed ACK (about 1.5k req/s at 1 KB in the A/B): the default config measures a missing documented option, which is why the options above are set.
  • Supports WebSocket upgrades but spends about 4 ms of CPU per new connection.
  • No TLS or HTTP/2 listener.
  • Thread-per-connection: uses the n cores of the multi-core curve without a core-count setting.

Why each setting was chosen · Source repository of 3proxy

Found a setting that makes 3proxy faster? Open an issue on the proxy repository: the campaign is built to be re-run.

Try rustle

Open source, fast, optimized, safe.