Skip to content
rustle

rustle against gost

Same machines, same rules, one core each. rustle is first in 41 of 41 tests of the campaign; 41 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 41 of the 41 tests where both it and gost ran. gost was not ahead in any of them. 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 gost
Protocolrustlegost
HTTP proxy and CONNECT tunnelsYesYes
HTTPS proxy port (TLS)YesYes
HTTP/2 to clientsYesYes
WebSocket upgradesYesYes

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

Test by test

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

Plain HTTP proxy port

Plain HTTP proxy port: rustle against gost
TestrustlegostRatio
HTTP, 1 KB responsesreq/s55,2584,75512× more
HTTP, 10 KB responsesreq/s40,7834,4369.2× more
HTTP, 1 KB responses, a new connection per requestreq/s27,8274,7805.8× more
HTTP, 1 MB responsesreq/s2,6241,0462.5× more
HTTP, 10 MB responsesreq/s2681451.9× more
CONNECT tunnels, bulk transferGbit/s22.013.21.7× more
CPU cost per request (1 KB)µs/req18.1210.012× less
Memory with 1,000 open tunnelsMB1416112× less
Memory with 5,000 open tunnelsMB4065316× less
Memory with 10,000 open tunnelsMB541,24323× less
Memory with 25,000 open tunnelsMB953,22834× less

HTTPS proxy (resumed TLS sessions)

HTTPS proxy (resumed TLS sessions): rustle against gost
TestrustlegostRatio
HTTP, 1 KB responsesreq/s49,4612,52820× more
HTTP, 10 KB responsesreq/s35,4602,43315× more
HTTP, 1 KB responses, a new connection per requestreq/s6,1192,5162.4× more
HTTP, 1 MB responsesreq/s1,2976152.1× more
HTTP, 10 MB responsesreq/s142831.7× more
CONNECT tunnels, bulk transferGbit/s12.07.11.7× more
Memory with 1,000 open tunnelsMB572404.2× less
Memory with 5,000 open tunnelsMB2539033.6× less
Memory with 10,000 open tunnelsMB4662,1104.5× less
Memory with 25,000 open tunnelsMB8104,0945.1× less

HTTPS proxy, full handshake on every connection

HTTPS proxy, full handshake on every connection: rustle against gost
TestrustlegostRatio
HTTP, 1 KB responses, a new connection per request, full handshakereq/s5,4582,2462.4× more

HTTP/2 over TLS

HTTP/2 over TLS: rustle against gost
TestrustlegostRatio
HTTP, 1 KB responsesreq/s33,4515,2316.4× more
HTTP, 10 KB responsesreq/s24,7894,7325.2× more
HTTP, 1 KB responses, a new connection per requestreq/s4,9742,1872.3× more
HTTP, 1 MB responsesreq/s8604471.9× more
HTTP, 10 MB responsesreq/s88501.7× more
CONNECT tunnels, bulk transferGbit/s8.87.81.1× more
Memory with 1,000 open tunnelsMB702253.2× less
Memory with 5,000 open tunnelsMB3301,2453.8× less
Memory with 10,000 open tunnelsMB7052,6393.7× less
Memory with 25,000 open tunnelsMB1,2635,8844.7× less

WebSocket, plain

WebSocket, plain: rustle against gost
TestrustlegostRatio
WebSocket, 64-byte messagesmsg/s58,50646,8081.2× more
WebSocket round trip, 64-byte messages (p99)ms1.32.62.0× less
CPU cost per WebSocket messageµs/msg17.121.41.3× less
WebSocket, 64 KB messagesGbit/s11.66.91.7× more
WebSocket, one connection per exchangemsg/s10,7403,7262.9× more

WebSocket over TLS

WebSocket over TLS: rustle against gost
TestrustlegostRatio
WebSocket, 64-byte messagesmsg/s56,95544,4261.3× more
WebSocket round trip, 64-byte messages (p99)ms1.32.72.1× less
WebSocket, 64 KB messagesGbit/s5.83.81.5× more
WebSocket, one connection per exchangemsg/s4,4622,1902.0× 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 gost was run

gost 3.3.0

official image

  • GOGC=400
  • logger level error (GOST_LOGGER_LEVEL=error)
  • Go sizes GOMAXPROCS from the cpuset

What the campaign showed

  • Reopens an upstream connection for almost every proxied request (its HTTP handler disables keep-alive by default).
  • HTTP/2 is a dedicated listener, not ALPN on the TLS port.
  • Gives the same 2.5k req/s over TLS with or without keep-alive: its overhead is per request, not per connection.

Why each setting was chosen

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

Try rustle

Open source, fast, optimized, safe.