mirror of
https://github.com/3proxy/3proxy.git
synced 2026-10-16 00:25:48 +08:00
Benchmarks: measure the proxy under stress, add results
bench.py: - the proxy gets one CPU, the client four, the origin three (8 CPUs), so the proxy is what runs out first - CPU time is the busy time of a role's CPUs from /proc/stat, softirqs included: with IRQ time accounting the cgroup's own figure leaves out much of the network work - every run records which side set its pace (proxy, client, origin), by the busy share of the role's CPUs and of its busiest thread - a 50 KB keep-alive scenario with 2000 clients - haproxy with splice: haproxy::splice-auto and haproxy::splice - wrk timeouts counted apart from errors; tools found by absolute path; leftovers of an interrupted run are cleaned up report.py turns runs into Markdown tables: throughput, the proxy's CPU per gigabyte or per request, its peak memory, splice and copying proxies in groups of their own, the best of each group marked. RESULTS.md has the comparison of 0.9.4, 1.0.1, devel, nginx and haproxy, with and without splice, on an Apple M4 and an Intel Skylake virtual machine, and how it was measured; data/ has the measurements. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
94feaf2728
commit
c13c048f3f
@ -3,6 +3,9 @@
|
|||||||
Compares the speed and the cost of 3proxy versions, and of other proxies doing
|
Compares the speed and the cost of 3proxy versions, and of other proxies doing
|
||||||
the same job, on Linux.
|
the same job, on Linux.
|
||||||
|
|
||||||
|
Results of the latest comparison, with the setup they were measured on, are
|
||||||
|
in [RESULTS.md](RESULTS.md); the measurements are in [data/](data/).
|
||||||
|
|
||||||
## How the measurement is isolated
|
## How the measurement is isolated
|
||||||
|
|
||||||
The client, the proxy and the origin each run in a network namespace of
|
The client, the proxy and the origin each run in a network namespace of
|
||||||
@ -15,14 +18,29 @@ their own, linked by veth pairs:
|
|||||||
|
|
||||||
so they share no loopback, and a packet crosses the same path whichever proxy
|
so they share no loopback, and a packet crosses the same path whichever proxy
|
||||||
is measured. Each role also runs in a cgroup of its own pinned to separate
|
is measured. Each role also runs in a cgroup of its own pinned to separate
|
||||||
CPUs (`--cpus`, default `cli=0-3,prx=4-5,srv=6-7`), so one does not take CPU
|
CPUs (`--cpus`, default `cli=0-3,prx=4,srv=5-7` for 8 CPUs), so one does not
|
||||||
from another, and RPS steers what each veth receives to the receiver's CPUs.
|
take CPU from another, and RPS steers what each veth receives to the
|
||||||
The proxy's cgroup is created anew for every run, which is what makes its
|
receiver's CPUs, so the kernel's network work for a role is done on its own
|
||||||
CPU time and peak memory readable on their own.
|
CPUs too. The proxy's cgroup is created anew for every run, which is what
|
||||||
|
makes its peak memory readable on its own.
|
||||||
|
|
||||||
Every proxy is given the same CPUs: nginx gets as many workers and haproxy as
|
The proxy gets the fewest CPUs on purpose: the measurement is about the proxy,
|
||||||
many threads as the proxy cgroup has CPUs; 3proxy runs a thread per
|
so it has to be what runs out first. Every proxy is given the same CPUs: nginx
|
||||||
connection inside the same cpuset. Logging is off everywhere.
|
gets as many workers and haproxy as many threads as the proxy has CPUs;
|
||||||
|
3proxy runs a thread per connection inside the same cpuset. Logging is off
|
||||||
|
everywhere.
|
||||||
|
|
||||||
|
CPU time is the busy time of a role's CPUs read from `/proc/stat`: its
|
||||||
|
processes and the interrupts and softirqs handled there. The cgroup's own CPU
|
||||||
|
time is not enough: a kernel with `CONFIG_IRQ_TIME_ACCOUNTING` leaves the
|
||||||
|
softirqs out of it, and that is where much of the network work is done (a
|
||||||
|
quarter of a proxy's CPU in these tests).
|
||||||
|
|
||||||
|
Every run records which side set its pace (`bound`): the role whose CPUs were
|
||||||
|
busy at least 90% of the time, or which had a thread doing so (an iperf3
|
||||||
|
stream is one thread, so one busy core is its limit however many CPUs the
|
||||||
|
role has). A run bound by the client or the origin says only that the proxy
|
||||||
|
can do at least that much.
|
||||||
|
|
||||||
`none` is no proxy at all: the client reaches the origin through the proxy
|
`none` is no proxy at all: the client reaches the origin through the proxy
|
||||||
namespace with the kernel forwarding, the upper bound for every scenario.
|
namespace with the kernel forwarding, the upper bound for every scenario.
|
||||||
@ -35,11 +53,13 @@ For every run, in a CSV under `bench/results/`:
|
|||||||
|---|---|
|
|---|---|
|
||||||
| `gbit`, `rate` | throughput, requests per second for HTTP |
|
| `gbit`, `rate` | throughput, requests per second for HTTP |
|
||||||
| `p50_ms`, `p99_ms` | latency from wrk (closed loop: compare at equal load only) |
|
| `p50_ms`, `p99_ms` | latency from wrk (closed loop: compare at equal load only) |
|
||||||
| `prx_cpu_s` | CPU seconds the proxy used, all its threads and processes |
|
| `prx_cpu_s`, `prx_task_s` | busy CPU seconds of the proxy's CPUs, network work included; the CPU time of its processes alone |
|
||||||
| `cpu_s_per_gb`, `cpu_us_per_req` | the proxy's cost per unit of work: the fairest figure, least affected by which side was the limit |
|
| `cpu_s_per_gb`, `cpu_us_per_req` | the proxy's cost per unit of work: the fairest figure, least affected by which side was the limit |
|
||||||
| `peak_mb` | the proxy's peak memory |
|
| `peak_mb` | the proxy's peak memory |
|
||||||
| `cli_util`, `prx_util`, `srv_util` | how busy each role's CPUs were: a client or origin near 100% means the result says nothing about the proxy |
|
| `cli_util`, `prx_util`, `srv_util` | how busy each role's CPUs were |
|
||||||
| `errors`, `retrans` | socket errors and non-2xx answers; TCP retransmissions in the stream scenarios |
|
| `cli_thread`, `srv_thread` | the busiest client and origin thread, as a share of one CPU |
|
||||||
|
| `bound` | `proxy`, `client`, `origin`, or `none` when nothing was busy all the time |
|
||||||
|
| `errors`, `timeouts`, `retrans` | socket errors and non-2xx answers; requests slower than wrk's 2 seconds; TCP retransmissions in the stream scenarios |
|
||||||
|
|
||||||
Repetitions rotate the order of the proxies, so drift over time (heat, the
|
Repetitions rotate the order of the proxies, so drift over time (heat, the
|
||||||
host) falls on all of them alike; the summary gives medians.
|
host) falls on all of them alike; the summary gives medians.
|
||||||
@ -51,6 +71,7 @@ host) falls on all of them alike; the summary gives medians.
|
|||||||
| `stream1`, `stream1-down` | one iperf3 stream through a TCP relay (3proxy `tcppm`, nginx `stream`, haproxy `mode tcp`), upload and download |
|
| `stream1`, `stream1-down` | one iperf3 stream through a TCP relay (3proxy `tcppm`, nginx `stream`, haproxy `mode tcp`), upload and download |
|
||||||
| `stream16` | sixteen streams |
|
| `stream16` | sixteen streams |
|
||||||
| `http-ka-1k`, `http-ka-1m` | HTTP over kept-alive connections through an HTTP proxy (absolute URIs), 1 KB and 1 MB answers |
|
| `http-ka-1k`, `http-ka-1m` | HTTP over kept-alive connections through an HTTP proxy (absolute URIs), 1 KB and 1 MB answers |
|
||||||
|
| `http-ka-50k-2000` | the same with 2000 clients at once, 50 KB answers |
|
||||||
| `http-close-1k` | a new connection for every request |
|
| `http-close-1k` | a new connection for every request |
|
||||||
|
|
||||||
nginx is not a forward proxy: it answers absolute URIs by passing them to its
|
nginx is not a forward proxy: it answers absolute URIs by passing them to its
|
||||||
@ -60,13 +81,15 @@ these scenarios compare like with like.
|
|||||||
## Running
|
## Running
|
||||||
|
|
||||||
Root, `iproute2`, `iperf3`, `wrk`, `nginx` (with the stream module:
|
Root, `iproute2`, `iperf3`, `wrk`, `nginx` (with the stream module:
|
||||||
`libnginx-mod-stream` on Debian and Ubuntu) and, to compare with it,
|
`libnginx-mod-stream` on Debian and Ubuntu, `nginx-mod-stream` on
|
||||||
|
RHEL-like systems) and, to compare with it,
|
||||||
`haproxy`.
|
`haproxy`.
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
bench/build.sh 0.9.9.1 1.0.1 # tags into bench/bin/
|
bench/build.sh 0.9.9.1 1.0.1 # tags into bench/bin/
|
||||||
NAME=devel bench/build.sh . # the working tree
|
NAME=devel bench/build.sh . # the working tree
|
||||||
CC="gcc -fcommon" bench/build.sh 0.8.13 # before 0.9, newer gcc
|
CC="gcc -fcommon" bench/build.sh 0.8.13 # before 0.9, newer gcc
|
||||||
|
CC="gcc -fpermissive" bench/build.sh 0.9.4 # 0.9.x with gcc 14 and later
|
||||||
|
|
||||||
sudo bench/bench.py \
|
sudo bench/bench.py \
|
||||||
--proxy none \
|
--proxy none \
|
||||||
@ -76,11 +99,20 @@ sudo bench/bench.py \
|
|||||||
--proxy nginx --proxy haproxy
|
--proxy nginx --proxy haproxy
|
||||||
```
|
```
|
||||||
|
|
||||||
|
`bench/report.py <csv>` turns a run into Markdown tables: throughput, the
|
||||||
|
proxy's CPU per gigabyte or per request, and its peak memory.
|
||||||
|
|
||||||
After the binary, a 3proxy entry can carry options for both its services:
|
After the binary, a 3proxy entry can carry options for both its services:
|
||||||
`-s0` keeps 0.9.0 to 0.9.8, which use splice() by default, from using it, and
|
`-s0` keeps 0.9.0 to 0.9.8, which use splice() by default, from using it, and
|
||||||
`-ocTCP_NODELAY -osTCP_NODELAY` turns Nagle's algorithm off on the client and
|
`-ocTCP_NODELAY -osTCP_NODELAY` turns Nagle's algorithm off on the client and
|
||||||
server sockets.
|
server sockets.
|
||||||
|
|
||||||
|
haproxy can be measured with splice() too: `haproxy::splice-auto` lets its
|
||||||
|
heuristic splice a direction once reads fill the buffer three times in a row,
|
||||||
|
`haproxy::splice` splices both directions always (`option splice-request` and
|
||||||
|
`option splice-response`). nginx has no splice() support, so it has no such
|
||||||
|
variant.
|
||||||
|
|
||||||
`--scenario` picks scenarios, `--reps` and `--duration` set the repetitions
|
`--scenario` picks scenarios, `--reps` and `--duration` set the repetitions
|
||||||
and their length, `--netem "delay 1ms rate 10gbit"` puts a slower, longer link
|
and their length, `--netem "delay 1ms rate 10gbit"` puts a slower, longer link
|
||||||
between the client and the proxy, `--mtu` changes the links' MTU.
|
between the client and the proxy, `--mtu` changes the links' MTU.
|
||||||
@ -92,6 +124,10 @@ between the client and the proxy, `--mtu` changes the links' MTU.
|
|||||||
keep absolute figures for real hardware.
|
keep absolute figures for real hardware.
|
||||||
* wrk measures latency in a closed loop, so a slower proxy is also offered
|
* wrk measures latency in a closed loop, so a slower proxy is also offered
|
||||||
less load; compare latencies only between runs of similar throughput.
|
less load; compare latencies only between runs of similar throughput.
|
||||||
|
* The roles have CPUs of their own but share the memory: memory bandwidth,
|
||||||
|
which copying proxies use most, cannot be split, and on some hosts it,
|
||||||
|
rather than the CPU, sets the limit. A CPU waiting for memory counts as
|
||||||
|
busy, so such a limit shows as less work per busy second.
|
||||||
* Versions are built with the Makefile they shipped with, so compiler flags
|
* Versions are built with the Makefile they shipped with, so compiler flags
|
||||||
differ between them (0.8 builds with `-O2`, 0.9.9 and later with
|
differ between them (0.8 builds with `-O2`, 0.9.9 and later with
|
||||||
`-O3 -flto`) as they did for their users.
|
`-O3 -flto`) as they did for their users.
|
||||||
|
|||||||
211
bench/RESULTS.md
Normal file
211
bench/RESULTS.md
Normal file
@ -0,0 +1,211 @@
|
|||||||
|
# Benchmark results
|
||||||
|
|
||||||
|
3proxy 0.9.4, 1.0.1 and devel against nginx and haproxy, measured on two
|
||||||
|
machines, 11 October 2026. How the benchmark works is in
|
||||||
|
[README.md](README.md); the measurements are in [data/](data/), and
|
||||||
|
`bench/report.py` turns them into the tables below.
|
||||||
|
|
||||||
|
## In short
|
||||||
|
|
||||||
|
* **Bulk TCP, no splice:** devel and 1.0.1 move 19-22 Gbit/s per CPU core,
|
||||||
|
1.5 to 2.2 times nginx and haproxy and 2.4 to 3.6 times 0.9.4, at 0.36-0.43
|
||||||
|
CPU seconds per gigabyte against 0.59-0.87 for nginx and haproxy.
|
||||||
|
* **Bulk TCP and large HTTP answers with splice():** 3proxy with splice moves
|
||||||
|
1.3 to 2.1 times what it does without, at 40-55% less CPU per gigabyte. On
|
||||||
|
the Skylake host it is level with haproxy splicing every connection with TCP
|
||||||
|
streams and 11% behind it with 1 MB HTTP answers; on the M4 it is ahead (37.8
|
||||||
|
against 22.1 Gbit/s with 16 streams, 35.3 against 28.0 with 1 MB HTTP
|
||||||
|
answers). haproxy's own heuristic (`splice-auto`) does not engage for 1 MB
|
||||||
|
HTTP answers on the M4 (haproxy 2.8) and stays at its copying speed.
|
||||||
|
* **Small requests:** nginx and haproxy answer 2 to 3 times more 1 KB requests
|
||||||
|
per core over kept-alive connections, and 3 times more when every request
|
||||||
|
opens a new connection: 3proxy runs a thread per connection. splice() makes
|
||||||
|
small requests slower (13.4-14.9k against 15.8-18.1k requests per second),
|
||||||
|
which is why it stays off unless asked for.
|
||||||
|
* **2000 clients, 50 KB answers:** devel leads the copying proxies on the
|
||||||
|
Skylake host (10.5k requests per second against nginx's 9.2k and haproxy's
|
||||||
|
7.3k), nginx leads on the M4 (11.0k against devel's 10.4k); haproxy splicing
|
||||||
|
every connection is fastest there (11.9k). splice() does not help 3proxy with
|
||||||
|
answers this small.
|
||||||
|
* **1.0.1 against devel:** 1.0.1 manages 6k requests per second over kept-alive
|
||||||
|
connections whatever the CPU, held by a 10 ms sleep each time a request is
|
||||||
|
answered; devel has it removed and also sets TCP_NODELAY by default.
|
||||||
|
* **Memory:** with few connections 3proxy needs the least (devel 8-17 MB
|
||||||
|
against 30-54 MB for nginx and haproxy; 57 MB when every request opens a new
|
||||||
|
connection on the Skylake host); with 2000 connections at once, a thread for
|
||||||
|
each costs it 150-200 MB against nginx's 90-113 MB.
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
| | M4 | Skylake |
|
||||||
|
|---|---|---|
|
||||||
|
| host | Apple M4 Pro laptop, UTM (Apple Virtualization) | OpenStack virtual machine, KVM |
|
||||||
|
| virtual machine | 8 CPUs, 8 GB | 8 CPUs (Intel Xeon, Skylake, 2.0 GHz), 8 GB |
|
||||||
|
| system | Ubuntu 24.04, Linux 6.8, aarch64 | AlmaLinux 10, Linux 6.12, x86_64 |
|
||||||
|
| nginx | 1.24.0 | 1.26.3 |
|
||||||
|
| haproxy | 2.8.16 | 3.0.5 |
|
||||||
|
| wrk, iperf3 | 4.1.0, 3.16 | 4.2.0, 3.17.1 |
|
||||||
|
|
||||||
|
### How the client, the proxy and the origin were kept apart
|
||||||
|
|
||||||
|
* **Network:** each runs in a network namespace of its own, linked by veth
|
||||||
|
pairs (client 10.0.1.2 - 10.0.1.1 proxy 10.0.2.1 - 10.0.2.2 origin), so they
|
||||||
|
share no loopback and every proxy is crossed by the same path. MTU 1500.
|
||||||
|
* **CPU:** each runs in a cgroup pinned to CPUs of its own: the client
|
||||||
|
(wrk, iperf3) on CPUs 0-3, the proxy on CPU 4, the origin (nginx serving
|
||||||
|
files from tmpfs, iperf3 -s) on CPUs 5-7. RPS steers what each veth receives
|
||||||
|
to the receiving side's CPUs, so the kernel's network work for a role is
|
||||||
|
done on its own CPUs too. The proxy has the fewest CPUs on purpose: it has to
|
||||||
|
be what runs out first.
|
||||||
|
* **Every proxy gets the same CPU:** one nginx worker, one haproxy thread, and
|
||||||
|
3proxy's thread per connection confined to the same CPU.
|
||||||
|
* **CPU time** is the busy time of the role's CPUs from `/proc/stat`, its own
|
||||||
|
processes plus the interrupts and softirqs handled there (a quarter of a
|
||||||
|
proxy's time here), so a proxy is also charged for the kernel's work on its
|
||||||
|
connections - which is where splice() moves the copying.
|
||||||
|
* **Which side set the pace** is recorded for every run: the role whose CPUs,
|
||||||
|
or one thread of it, were busy at least 90% of the time.
|
||||||
|
* **Repetitions:** three runs of 10 seconds per proxy and scenario, the order
|
||||||
|
of the proxies rotated between repetitions; the tables give medians. The
|
||||||
|
haproxy splice columns come from a second session an hour later, with plain
|
||||||
|
haproxy run again to see how far the conditions moved: by 2.5% or less on
|
||||||
|
the M4 and 7.5% or less on the Skylake host, except for one origin-bound
|
||||||
|
case (-9.7%).
|
||||||
|
|
||||||
|
### Proxies
|
||||||
|
|
||||||
|
| column | configuration |
|
||||||
|
|---|---|
|
||||||
|
| 0.9.4 | 0.9.4, `-s0` (no splice) `-ocTCP_NODELAY -osTCP_NODELAY` |
|
||||||
|
| 1.0.1 | 1.0.1, `-ocTCP_NODELAY -osTCP_NODELAY` (built without splice) |
|
||||||
|
| devel | devel as of these tests, defaults (TCP_NODELAY is on by default) |
|
||||||
|
| nginx | `proxy_pass` to an upstream with `keepalive 1024`, `stream` for TCP, `reuseport` |
|
||||||
|
| haproxy | `mode http` with `http-reuse always`, `mode tcp` for TCP |
|
||||||
|
| 0.9.4 splice | 0.9.4, which splices by default, `-ocTCP_NODELAY -osTCP_NODELAY` |
|
||||||
|
| devel splice | devel with `-s` |
|
||||||
|
| haproxy splice-auto | `option splice-auto`: splices a direction once reads fill the buffer three times in a row |
|
||||||
|
| haproxy splice | `option splice-request` and `option splice-response`: splices always |
|
||||||
|
|
||||||
|
nginx has no splice() support. 3proxy versions are built with the Makefile
|
||||||
|
they shipped with (`-O3 -flto` for 1.0.1 and devel, `-O2` for 0.9.4, which on
|
||||||
|
gcc 14 also needs `-fpermissive`). Logging is off everywhere.
|
||||||
|
|
||||||
|
### Scenarios
|
||||||
|
|
||||||
|
| scenario | load |
|
||||||
|
|---|---|
|
||||||
|
| stream1, stream1-down | one iperf3 stream through a TCP relay (3proxy `tcppm`), upload and download |
|
||||||
|
| stream16 | 16 iperf3 streams |
|
||||||
|
| http-ka-1k, http-ka-1m | 64 (1 KB) or 16 (1 MB) kept-alive connections through the HTTP proxy |
|
||||||
|
| http-ka-50k-2000 | 2000 kept-alive connections, 50 KB answers |
|
||||||
|
| http-close-1k | 64 connections, a new one for every request |
|
||||||
|
|
||||||
|
## How to read the tables
|
||||||
|
|
||||||
|
* Columns: the client talking to the origin with no proxy (only the kernel
|
||||||
|
forwarding, for reference), then the proxies copying through user space,
|
||||||
|
then after the second ‖ the proxies using splice().
|
||||||
|
* **Bold**: the best of its group in the row, and any other of the group whose
|
||||||
|
three runs overlap the best one's - the measurement cannot tell them apart.
|
||||||
|
* ‡: the client or the origin, not the proxy, set the pace in most runs, so the
|
||||||
|
proxy can do at least that much. Single streams often end there with
|
||||||
|
splice(): one iperf3 stream is one thread, and the proxy needs less of a CPU
|
||||||
|
than it.
|
||||||
|
* CPU is per gigabyte for the bulk scenarios and per request for the small
|
||||||
|
ones.
|
||||||
|
* http-ka-50k-2000: every proxy but haproxy leaves some requests waiting longer
|
||||||
|
than wrk's 2 second limit (counted as timeouts in the data, 140-540 a run);
|
||||||
|
haproxy serves the 2000 connections more evenly, with none over 2 seconds but
|
||||||
|
a median wait 2 to 3 times longer.
|
||||||
|
|
||||||
|
## M4 (Apple M4 Pro, virtual machine)
|
||||||
|
|
||||||
|
#### Throughput, Gbit/s (thousands of requests per second for HTTP)
|
||||||
|
|
||||||
|
| scenario | no proxy | ‖ | 0.9.4 | 1.0.1 | devel | nginx | haproxy | ‖ | 0.9.4 splice | devel splice | haproxy splice-auto | haproxy splice |
|
||||||
|
|---|---:|:-:|---:|---:|---:|---:|---:|:-:|---:|---:|---:|---:|
|
||||||
|
| stream1 | 62.0 | ‖ | 8.3 | **22.1** | **22.0** | 13.5 | 13.6 | ‖ | 25.1 | **45.7 ‡** | 29.5 | **44.7** |
|
||||||
|
| stream16 | 141.2 | ‖ | 8.7 | **20.9** | **20.9** | 13.5 | 9.5 ‡ | ‖ | 24.5 | **37.8 ‡** | 15.9 ‡ | 22.1 ‡ |
|
||||||
|
| stream1-down | 61.8 | ‖ | 8.8 | **22.4** | **22.1** | 13.6 | 13.6 | ‖ | **47.9 ‡** | **47.4 ‡** | 30.4 | **47.6 ‡** |
|
||||||
|
| http-ka-1k | 1.24 (120.3k/s) | ‖ | 0.14 (14.1k/s) | 0.06 (6.0k/s) | 0.16 (15.8k/s) | 0.38 (37.0k/s) | **0.45 (44.3k/s)** | ‖ | 0.14 (13.4k/s) | 0.15 (14.9k/s) | **0.45 (44.1k/s)** | **0.45 (44.1k/s)** |
|
||||||
|
| http-ka-1m | 71.55 (8.5k/s) | ‖ | 8.33 (1.0k/s) | 12.46 (1.5k/s) | **21.90 (2.6k/s) ‡** | 12.63 (1.5k/s) | 6.02 (0.7k/s) ‡ | ‖ | 32.99 (3.9k/s) ‡ | **35.30 (4.2k/s) ‡** | 5.91 (0.7k/s) ‡ | 28.00 (3.3k/s) ‡ |
|
||||||
|
| http-ka-50k-2000 | 34.79 (84.5k/s) | ‖ | 3.12 (7.6k/s) | 3.69 (9.0k/s) | 4.27 (10.4k/s) | **4.55 (11.0k/s)** | 4.01 (9.6k/s) | ‖ | 3.73 (9.1k/s) | 4.07 (9.9k/s) | 4.00 (9.6k/s) | **4.92 (11.9k/s)** |
|
||||||
|
| http-close-1k | 0.50 (48.7k/s) | ‖ | 0.05 (5.0k/s) | 0.05 (4.4k/s) | 0.05 (5.2k/s) | 0.14 (13.3k/s) | **0.17 (16.6k/s)** | ‖ | 0.05 (4.8k/s) | 0.05 (5.0k/s) | **0.17 (16.7k/s)** | **0.17 (16.8k/s)** |
|
||||||
|
|
||||||
|
#### Proxy CPU time per gigabyte or per request
|
||||||
|
|
||||||
|
| scenario | no proxy | ‖ | 0.9.4 | 1.0.1 | devel | nginx | haproxy | ‖ | 0.9.4 splice | devel splice | haproxy splice-auto | haproxy splice |
|
||||||
|
|---|---:|:-:|---:|---:|---:|---:|---:|:-:|---:|---:|---:|---:|
|
||||||
|
| stream1 | – | ‖ | 0.96 s/GB | **0.36 s/GB** | **0.36 s/GB** | 0.59 s/GB | 0.59 s/GB | ‖ | 0.32 s/GB | **0.17 s/GB** | 0.27 s/GB | **0.18 s/GB** |
|
||||||
|
| stream16 | – | ‖ | 0.92 s/GB | **0.38 s/GB** | **0.38 s/GB** | 0.59 s/GB | 0.84 s/GB | ‖ | 0.33 s/GB | **0.21 s/GB** | 0.51 s/GB | 0.36 s/GB |
|
||||||
|
| stream1-down | – | ‖ | 0.91 s/GB | **0.36 s/GB** | **0.36 s/GB** | 0.59 s/GB | 0.59 s/GB | ‖ | **0.17 s/GB** | **0.17 s/GB** | 0.26 s/GB | **0.17 s/GB** |
|
||||||
|
| http-ka-1k | – | ‖ | 71 µs/req | 105 µs/req | 63 µs/req | 27 µs/req | **23 µs/req** | ‖ | 74 µs/req | 67 µs/req | **23 µs/req** | **23 µs/req** |
|
||||||
|
| http-ka-1m | – | ‖ | 0.96 s/GB | 0.44 s/GB | **0.37 s/GB** | 0.64 s/GB | 1.34 s/GB | ‖ | 0.24 s/GB | **0.23 s/GB** | 1.37 s/GB | 0.29 s/GB |
|
||||||
|
| http-ka-50k-2000 | – | ‖ | 2.67 s/GB | 2.27 s/GB | 1.95 s/GB | **1.79 s/GB** | 2.01 s/GB | ‖ | 2.23 s/GB | 2.04 s/GB | 2.02 s/GB | **1.65 s/GB** |
|
||||||
|
| http-close-1k | – | ‖ | 201 µs/req | 227 µs/req | 194 µs/req | 75 µs/req | **60 µs/req** | ‖ | 208 µs/req | 200 µs/req | **60 µs/req** | **60 µs/req** |
|
||||||
|
|
||||||
|
#### Proxy peak memory, MB
|
||||||
|
|
||||||
|
| scenario | no proxy | ‖ | 0.9.4 | 1.0.1 | devel | nginx | haproxy | ‖ | 0.9.4 splice | devel splice | haproxy splice-auto | haproxy splice |
|
||||||
|
|---|---:|:-:|---:|---:|---:|---:|---:|:-:|---:|---:|---:|---:|
|
||||||
|
| stream1 | – | ‖ | **2** | 10 | 8 | 32 | 32 | ‖ | **5** | 11 | 44 | 45 |
|
||||||
|
| stream16 | – | ‖ | **31** | 75 | 63 | 75 | 48 | ‖ | **61** | 85 | **60** | **56** |
|
||||||
|
| stream1-down | – | ‖ | **2** | 6 | 10 | 34 | 31 | ‖ | **11** | 11 | 40 | 45 |
|
||||||
|
| http-ka-1k | – | ‖ | **5** | 9 | 9 | 30 | 30 | ‖ | **5** | 9 | 36 | 36 |
|
||||||
|
| http-ka-1m | – | ‖ | **11** | **10** | 16 | 45 | 39 | ‖ | **15** | **17** | 44 | 52 |
|
||||||
|
| http-ka-50k-2000 | – | ‖ | 126 | 199 | 194 | **90** | 176 | ‖ | **97** | 187 | 182 | 136 |
|
||||||
|
| http-close-1k | – | ‖ | **10** | 31 | 14 | 30 | 30 | ‖ | **10** | 12 | 36 | 36 |
|
||||||
|
|
||||||
|
|
||||||
|
## Skylake (Intel Xeon, OpenStack virtual machine)
|
||||||
|
|
||||||
|
#### Throughput, Gbit/s (thousands of requests per second for HTTP)
|
||||||
|
|
||||||
|
| scenario | no proxy | ‖ | 0.9.4 | 1.0.1 | devel | nginx | haproxy | ‖ | 0.9.4 splice | devel splice | haproxy splice-auto | haproxy splice |
|
||||||
|
|---|---:|:-:|---:|---:|---:|---:|---:|:-:|---:|---:|---:|---:|
|
||||||
|
| stream1 | 44.4 | ‖ | 5.5 | 19.1 | **19.9** | 9.8 | 9.7 | ‖ | **29.2** | **31.4** | **30.6** | **32.3** |
|
||||||
|
| stream16 | 150.5 | ‖ | 5.6 | **18.9** | **18.8** | 9.9 | 9.2 | ‖ | 28.3 | **31.2** | **30.3 ‡** | **31.5 ‡** |
|
||||||
|
| stream1-down | 43.1 | ‖ | 5.6 | **18.8** | **19.4** | 9.7 | 9.3 | ‖ | **34.4** | 32.0 | 31.0 | **33.7** |
|
||||||
|
| http-ka-1k | 1.30 (127.1k/s) | ‖ | 0.19 (19.2k/s) | 0.06 (6.1k/s) | 0.18 (18.1k/s) | **0.37 (36.5k/s)** | **0.37 (37.3k/s)** | ‖ | 0.15 (14.6k/s) | 0.14 (13.8k/s) | **0.37 (37.2k/s)** | **0.38 (38.0k/s)** |
|
||||||
|
| http-ka-1m | 67.52 (8.0k/s) | ‖ | 5.84 (0.7k/s) | 12.37 (1.5k/s) | **18.30 (2.2k/s) ‡** | 5.77 (0.7k/s) | 7.56 (0.9k/s) | ‖ | **26.63 (3.2k/s) ‡** | 23.88 (2.8k/s) ‡ | 24.22 (2.9k/s) ‡ | **26.71 (3.2k/s) ‡** |
|
||||||
|
| http-ka-50k-2000 | 35.30 (85.7k/s) | ‖ | 2.89 (7.0k/s) | 4.24 (10.3k/s) | **4.33 (10.5k/s)** | 3.77 (9.2k/s) | 3.01 (7.3k/s) | ‖ | **3.89 (9.4k/s)** | 3.71 (9.0k/s) | 3.19 (7.7k/s) | **3.72 (9.0k/s)** |
|
||||||
|
| http-close-1k | 0.53 (52.1k/s) | ‖ | 0.05 (4.8k/s) | 0.04 (4.0k/s) | 0.05 (4.8k/s) | 0.13 (12.9k/s) | **0.15 (15.1k/s)** | ‖ | 0.04 (4.4k/s) | 0.04 (4.4k/s) | **0.15 (15.1k/s)** | **0.16 (15.5k/s)** |
|
||||||
|
|
||||||
|
#### Proxy CPU time per gigabyte or per request
|
||||||
|
|
||||||
|
| scenario | no proxy | ‖ | 0.9.4 | 1.0.1 | devel | nginx | haproxy | ‖ | 0.9.4 splice | devel splice | haproxy splice-auto | haproxy splice |
|
||||||
|
|---|---:|:-:|---:|---:|---:|---:|---:|:-:|---:|---:|---:|---:|
|
||||||
|
| stream1 | – | ‖ | 1.45 s/GB | 0.42 s/GB | **0.40 s/GB** | 0.82 s/GB | 0.82 s/GB | ‖ | **0.27 s/GB** | **0.25 s/GB** | **0.26 s/GB** | **0.25 s/GB** |
|
||||||
|
| stream16 | – | ‖ | 1.43 s/GB | **0.42 s/GB** | **0.43 s/GB** | 0.81 s/GB | 0.87 s/GB | ‖ | 0.28 s/GB | **0.26 s/GB** | **0.26 s/GB** | **0.25 s/GB** |
|
||||||
|
| stream1-down | – | ‖ | 1.43 s/GB | **0.43 s/GB** | **0.41 s/GB** | 0.82 s/GB | 0.86 s/GB | ‖ | **0.23 s/GB** | 0.25 s/GB | 0.26 s/GB | **0.24 s/GB** |
|
||||||
|
| http-ka-1k | – | ‖ | 52 µs/req | 72 µs/req | 55 µs/req | **27 µs/req** | **27 µs/req** | ‖ | 68 µs/req | 72 µs/req | **27 µs/req** | **26 µs/req** |
|
||||||
|
| http-ka-1m | – | ‖ | 1.37 s/GB | 0.53 s/GB | **0.44 s/GB** | 1.39 s/GB | 1.07 s/GB | ‖ | **0.30 s/GB** | 0.34 s/GB | 0.33 s/GB | **0.30 s/GB** |
|
||||||
|
| http-ka-50k-2000 | – | ‖ | 2.88 s/GB | 1.98 s/GB | **1.93 s/GB** | 2.15 s/GB | 2.70 s/GB | ‖ | **2.15 s/GB** | 2.26 s/GB | 2.55 s/GB | **2.18 s/GB** |
|
||||||
|
| http-close-1k | – | ‖ | 211 µs/req | 250 µs/req | 210 µs/req | 77 µs/req | **66 µs/req** | ‖ | 229 µs/req | 230 µs/req | **66 µs/req** | **65 µs/req** |
|
||||||
|
|
||||||
|
#### Proxy peak memory, MB
|
||||||
|
|
||||||
|
| scenario | no proxy | ‖ | 0.9.4 | 1.0.1 | devel | nginx | haproxy | ‖ | 0.9.4 splice | devel splice | haproxy splice-auto | haproxy splice |
|
||||||
|
|---|---:|:-:|---:|---:|---:|---:|---:|:-:|---:|---:|---:|---:|
|
||||||
|
| stream1 | – | ‖ | **2** | 5 | 8 | 34 | 30 | ‖ | 10 | **8** | 44 | 42 |
|
||||||
|
| stream16 | – | ‖ | 93 | 96 | 91 | 107 | **59** | ‖ | 79 | 88 | 107 | **62** |
|
||||||
|
| stream1-down | – | ‖ | **3** | 8 | 8 | 32 | 31 | ‖ | **9** | 11 | 43 | 46 |
|
||||||
|
| http-ka-1k | – | ‖ | **5** | 10 | 10 | 32 | 32 | ‖ | **5** | 10 | 37 | 40 |
|
||||||
|
| http-ka-1m | – | ‖ | **14** | **14** | 17 | 45 | 45 | ‖ | **15** | **18** | 54 | 53 |
|
||||||
|
| http-ka-50k-2000 | – | ‖ | 185 | 137 | **153** | **113** | 178 | ‖ | **91** | 160 | 185 | 195 |
|
||||||
|
| http-close-1k | – | ‖ | **16** | 23 | 57 | 31 | 29 | ‖ | **22** | 42 | 40 | 38 |
|
||||||
|
|
||||||
|
|
||||||
|
## Caveats
|
||||||
|
|
||||||
|
* Both machines are virtual: their CPUs cannot be pinned to physical cores, so
|
||||||
|
absolute figures move between sessions; compare within a table.
|
||||||
|
* The roles have CPUs of their own but share the memory, and memory bandwidth,
|
||||||
|
which copying proxies use most, cannot be split. On the Skylake host it may
|
||||||
|
well be the limit; a CPU waiting for memory counts as busy, so this shows as
|
||||||
|
less work per busy second rather than as idle time.
|
||||||
|
* wrk measures in a closed loop: a slower proxy is offered less load, so
|
||||||
|
latencies compare only between runs of similar throughput, and requests over
|
||||||
|
2 seconds are left out of its latency figures.
|
||||||
|
* The haproxy versions differ between the machines (2.8 and 3.0).
|
||||||
|
|
||||||
206
bench/bench.py
206
bench/bench.py
@ -27,6 +27,7 @@ import statistics
|
|||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
|
import threading
|
||||||
import time
|
import time
|
||||||
|
|
||||||
CG = "/sys/fs/cgroup/3proxy-bench"
|
CG = "/sys/fs/cgroup/3proxy-bench"
|
||||||
@ -35,7 +36,7 @@ CG = "/sys/fs/cgroup/3proxy-bench"
|
|||||||
CLI_ADDR, PRX_IN, PRX_OUT, SRV_ADDR = "10.0.1.2", "10.0.1.1", "10.0.2.1", "10.0.2.2"
|
CLI_ADDR, PRX_IN, PRX_OUT, SRV_ADDR = "10.0.1.2", "10.0.1.1", "10.0.2.1", "10.0.2.2"
|
||||||
HTTP_PORT, TCP_PORT, ORIGIN_HTTP, ORIGIN_TCP = 3128, 5201, 8080, 5201
|
HTTP_PORT, TCP_PORT, ORIGIN_HTTP, ORIGIN_TCP = 3128, 5201, 8080, 5201
|
||||||
|
|
||||||
FILES = {"1k": 1024, "100k": 100 * 1024, "1m": 1024 * 1024}
|
FILES = {"1k": 1024, "50k": 50 * 1024, "100k": 100 * 1024, "1m": 1024 * 1024}
|
||||||
|
|
||||||
# name: (kind, parameters)
|
# name: (kind, parameters)
|
||||||
SCENARIOS = {
|
SCENARIOS = {
|
||||||
@ -44,10 +45,26 @@ SCENARIOS = {
|
|||||||
"stream1-down": ("stream", {"streams": 1, "reverse": True}),
|
"stream1-down": ("stream", {"streams": 1, "reverse": True}),
|
||||||
"http-ka-1k": ("http", {"file": "1k", "conns": 64}),
|
"http-ka-1k": ("http", {"file": "1k", "conns": 64}),
|
||||||
"http-ka-1m": ("http", {"file": "1m", "conns": 16}),
|
"http-ka-1m": ("http", {"file": "1m", "conns": 16}),
|
||||||
|
"http-ka-50k-2000": ("http", {"file": "50k", "conns": 2000}),
|
||||||
"http-close-1k": ("http", {"file": "1k", "conns": 64, "close": True}),
|
"http-close-1k": ("http", {"file": "1k", "conns": 64, "close": True}),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TOOLS = {}
|
||||||
|
|
||||||
|
|
||||||
|
def tool(name):
|
||||||
|
"""A tool by its absolute path: sudo's secure_path may leave out where
|
||||||
|
it was installed, /usr/local/bin for a wrk built by hand."""
|
||||||
|
if name not in TOOLS:
|
||||||
|
path = shutil.which(name) or shutil.which(
|
||||||
|
name, path="/usr/local/bin:/usr/local/sbin:/usr/sbin:/usr/bin")
|
||||||
|
if not path:
|
||||||
|
sys.exit(f"{name} not found")
|
||||||
|
TOOLS[name] = path
|
||||||
|
return TOOLS[name]
|
||||||
|
|
||||||
|
|
||||||
def sh(cmd, check=True, **kw):
|
def sh(cmd, check=True, **kw):
|
||||||
return subprocess.run(cmd, shell=True, check=check, text=True,
|
return subprocess.run(cmd, shell=True, check=check, text=True,
|
||||||
stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kw).stdout
|
stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kw).stdout
|
||||||
@ -142,8 +159,22 @@ def cg_remove(role):
|
|||||||
time.sleep(0.1)
|
time.sleep(0.1)
|
||||||
|
|
||||||
|
|
||||||
|
def cg_kill(role):
|
||||||
|
"""Whatever is left in a role's cgroup, e.g. after an interrupted run."""
|
||||||
|
try:
|
||||||
|
pids = cg_read(f"{CG}/{role}/cgroup.procs").split()
|
||||||
|
except OSError:
|
||||||
|
return
|
||||||
|
for pid in pids:
|
||||||
|
try:
|
||||||
|
os.kill(int(pid), signal.SIGKILL)
|
||||||
|
except ProcessLookupError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
def cg_down():
|
def cg_down():
|
||||||
for role in ("cli", "prx", "srv"):
|
for role in ("cli", "prx", "srv"):
|
||||||
|
cg_kill(role)
|
||||||
cg_remove(role)
|
cg_remove(role)
|
||||||
try:
|
try:
|
||||||
os.rmdir(CG)
|
os.rmdir(CG)
|
||||||
@ -160,6 +191,60 @@ def cg_usage(role):
|
|||||||
return 0.0
|
return 0.0
|
||||||
|
|
||||||
|
|
||||||
|
TICK = os.sysconf("SC_CLK_TCK")
|
||||||
|
|
||||||
|
|
||||||
|
def cpu_busy():
|
||||||
|
"""Busy and total ticks per CPU. Busy counts interrupts and softirqs too:
|
||||||
|
a kernel with IRQ time accounting leaves them out of the cgroup's CPU
|
||||||
|
time, and that is where much of the network work is done."""
|
||||||
|
busy = {}
|
||||||
|
with open("/proc/stat") as f:
|
||||||
|
for line in f:
|
||||||
|
if not line.startswith("cpu") or line.startswith("cpu "):
|
||||||
|
continue
|
||||||
|
name, *v = line.split()
|
||||||
|
v = [int(x) for x in v]
|
||||||
|
# user nice system idle iowait irq softirq steal
|
||||||
|
busy[int(name[3:])] = (v[0] + v[1] + v[2] + v[5] + v[6] + v[7], sum(v[:8]))
|
||||||
|
return busy
|
||||||
|
|
||||||
|
|
||||||
|
def role_busy(before, after, cpus):
|
||||||
|
"""Busy seconds of a role's CPUs, and the share of them that was busy."""
|
||||||
|
b = t = 0
|
||||||
|
for c in cpus:
|
||||||
|
b += after[c][0] - before[c][0]
|
||||||
|
t += after[c][1] - before[c][1]
|
||||||
|
return b / TICK, (b / t if t else 0.0)
|
||||||
|
|
||||||
|
|
||||||
|
def thread_times(role):
|
||||||
|
"""CPU ticks per thread of everything in a role's cgroup."""
|
||||||
|
times = {}
|
||||||
|
try:
|
||||||
|
tids = cg_read(f"{CG}/{role}/cgroup.threads").split()
|
||||||
|
except OSError:
|
||||||
|
return times
|
||||||
|
for tid in tids:
|
||||||
|
try:
|
||||||
|
with open(f"/proc/{tid}/stat") as f:
|
||||||
|
v = f.read().rsplit(")", 1)[1].split()
|
||||||
|
times[tid] = int(v[11]) + int(v[12])
|
||||||
|
except (OSError, IndexError, ValueError):
|
||||||
|
pass
|
||||||
|
return times
|
||||||
|
|
||||||
|
|
||||||
|
def busiest_thread(before, after, wall):
|
||||||
|
"""The busiest thread's share of one CPU: one thread at 100% is a limit
|
||||||
|
however many CPUs its role has (iperf3 runs a stream in a thread)."""
|
||||||
|
top = 0
|
||||||
|
for tid, t in after.items():
|
||||||
|
top = max(top, t - before.get(tid, 0))
|
||||||
|
return top / TICK / wall if wall else 0.0
|
||||||
|
|
||||||
|
|
||||||
def cg_peak(role):
|
def cg_peak(role):
|
||||||
try:
|
try:
|
||||||
return int(cg_read(f"{CG}/{role}/memory.peak")) / 2**20
|
return int(cg_read(f"{CG}/{role}/memory.peak")) / 2**20
|
||||||
@ -183,10 +268,26 @@ def spawn(ns, role, argv, log):
|
|||||||
stderr=subprocess.STDOUT, preexec_fn=enter)
|
stderr=subprocess.STDOUT, preexec_fn=enter)
|
||||||
|
|
||||||
|
|
||||||
|
LAST_CLIENT_THREAD = [0.0]
|
||||||
|
|
||||||
|
|
||||||
def run_in(ns, role, argv, timeout):
|
def run_in(ns, role, argv, timeout):
|
||||||
|
"""Run a load generator to its end. Its busiest thread's share of a CPU
|
||||||
|
is kept in LAST_CLIENT_THREAD, read just before it exits."""
|
||||||
p = spawn(ns, role, argv, subprocess.PIPE)
|
p = spawn(ns, role, argv, subprocess.PIPE)
|
||||||
out, _ = p.communicate(timeout=timeout)
|
t0 = time.time()
|
||||||
return out.decode("utf-8", "replace")
|
top = {}
|
||||||
|
buf = []
|
||||||
|
reader = threading.Thread(target=lambda: buf.append(p.stdout.read()))
|
||||||
|
reader.start()
|
||||||
|
while p.poll() is None:
|
||||||
|
for tid, t in thread_times(role).items():
|
||||||
|
top[tid] = t
|
||||||
|
time.sleep(0.5)
|
||||||
|
reader.join(timeout)
|
||||||
|
wall = time.time() - t0
|
||||||
|
LAST_CLIENT_THREAD[0] = max(top.values()) / TICK / wall if top and wall else 0.0
|
||||||
|
return (buf[0] if buf else b"").decode("utf-8", "replace")
|
||||||
|
|
||||||
|
|
||||||
def stop(p):
|
def stop(p):
|
||||||
@ -245,9 +346,11 @@ http {{
|
|||||||
}}
|
}}
|
||||||
""")
|
""")
|
||||||
log = open(os.path.join(work, "origin.out"), "w")
|
log = open(os.path.join(work, "origin.out"), "w")
|
||||||
procs = [spawn("bsrv", "srv", ["nginx", "-c", conf, "-p", work], log),
|
procs = [spawn("bsrv", "srv", [tool("nginx"), "-c", conf, "-p", work], log),
|
||||||
spawn("bsrv", "srv", ["iperf3", "-s", "-B", SRV_ADDR, "-p", str(ORIGIN_TCP)], log)]
|
spawn("bsrv", "srv", [tool("iperf3"), "-s", "-B", SRV_ADDR, "-p", str(ORIGIN_TCP)], log)]
|
||||||
if not (wait_port("bsrv", SRV_ADDR, ORIGIN_HTTP) and wait_port("bsrv", SRV_ADDR, ORIGIN_TCP)):
|
if not (wait_port("bsrv", SRV_ADDR, ORIGIN_HTTP) and wait_port("bsrv", SRV_ADDR, ORIGIN_TCP)):
|
||||||
|
for p in procs:
|
||||||
|
stop(p)
|
||||||
sys.exit("the origin did not start, see " + work)
|
sys.exit("the origin did not start, see " + work)
|
||||||
return procs
|
return procs
|
||||||
|
|
||||||
@ -271,8 +374,12 @@ tcppm {opts} -i{PRX_IN} -e{PRX_OUT} {TCP_PORT} {SRV_ADDR} {ORIGIN_TCP}
|
|||||||
conf = os.path.join(work, f"{label}.conf")
|
conf = os.path.join(work, f"{label}.conf")
|
||||||
with open(conf, "w") as f:
|
with open(conf, "w") as f:
|
||||||
# distributions build the stream module as a dynamic one
|
# distributions build the stream module as a dynamic one
|
||||||
stream = "/usr/lib/nginx/modules/ngx_stream_module.so"
|
load = ""
|
||||||
load = f"load_module {stream};\n" if os.path.exists(stream) else ""
|
for d in ("/usr/lib/nginx/modules", "/usr/lib64/nginx/modules"):
|
||||||
|
stream = os.path.join(d, "ngx_stream_module.so")
|
||||||
|
if os.path.exists(stream):
|
||||||
|
load = f"load_module {stream};\n"
|
||||||
|
break
|
||||||
f.write(f"""{load}daemon off;
|
f.write(f"""{load}daemon off;
|
||||||
worker_processes {ncpu};
|
worker_processes {ncpu};
|
||||||
pid {work}/{label}.pid;
|
pid {work}/{label}.pid;
|
||||||
@ -303,13 +410,20 @@ stream {{
|
|||||||
""")
|
""")
|
||||||
return ["-c", conf, "-p", work]
|
return ["-c", conf, "-p", work]
|
||||||
if kind == "haproxy":
|
if kind == "haproxy":
|
||||||
|
# splice-auto: haproxy's heuristic, splicing a direction once reads
|
||||||
|
# fill its buffer three times in a row; splice: both directions always
|
||||||
|
splice = {"": "", "splice-auto": " option splice-auto\n",
|
||||||
|
"splice": " option splice-request\n option splice-response\n"}
|
||||||
|
if opts not in splice:
|
||||||
|
sys.exit("haproxy options: splice-auto or splice")
|
||||||
|
splice = splice[opts]
|
||||||
conf = os.path.join(work, f"{label}.cfg")
|
conf = os.path.join(work, f"{label}.cfg")
|
||||||
with open(conf, "w") as f:
|
with open(conf, "w") as f:
|
||||||
f.write(f"""global
|
f.write(f"""global
|
||||||
nbthread {ncpu}
|
nbthread {ncpu}
|
||||||
maxconn 200000
|
maxconn 200000
|
||||||
defaults
|
defaults
|
||||||
timeout connect 5s
|
{splice} timeout connect 5s
|
||||||
timeout client 60s
|
timeout client 60s
|
||||||
timeout server 60s
|
timeout server 60s
|
||||||
frontend http
|
frontend http
|
||||||
@ -344,8 +458,11 @@ class Proxy:
|
|||||||
self.binary = os.path.abspath(path)
|
self.binary = os.path.abspath(path)
|
||||||
self.label = os.path.basename(path) + (self.opts.replace(" ", "") if self.opts else "")
|
self.label = os.path.basename(path) + (self.opts.replace(" ", "") if self.opts else "")
|
||||||
elif kind in ("nginx", "haproxy"):
|
elif kind in ("nginx", "haproxy"):
|
||||||
self.binary = path or shutil.which(kind)
|
path, _, self.opts = path.partition(":")
|
||||||
self.label = kind
|
if kind == "nginx" and self.opts:
|
||||||
|
sys.exit("nginx takes no options (it does not use splice() at all)")
|
||||||
|
self.binary = path or tool(kind)
|
||||||
|
self.label = kind + ("-" + self.opts if self.opts else "")
|
||||||
elif kind == "none":
|
elif kind == "none":
|
||||||
self.binary = None
|
self.binary = None
|
||||||
self.label = "direct"
|
self.label = "direct"
|
||||||
@ -400,7 +517,7 @@ def run_http(proxy, params, args, work):
|
|||||||
SRV_ADDR, ORIGIN_HTTP))
|
SRV_ADDR, ORIGIN_HTTP))
|
||||||
threads = len(cpulist(args.cpus["cli"]))
|
threads = len(cpulist(args.cpus["cli"]))
|
||||||
conns = max(params["conns"], threads)
|
conns = max(params["conns"], threads)
|
||||||
out = run_in("bcli", "cli", ["wrk", "-t", str(threads), "-c", str(conns),
|
out = run_in("bcli", "cli", [tool("wrk"), "-t", str(threads), "-c", str(conns),
|
||||||
"-d", f"{args.duration}s", "--latency", "-s", script,
|
"-d", f"{args.duration}s", "--latency", "-s", script,
|
||||||
f"http://{host}:{port}/"], args.duration + 30)
|
f"http://{host}:{port}/"], args.duration + 30)
|
||||||
res = {"raw": out}
|
res = {"raw": out}
|
||||||
@ -414,12 +531,17 @@ def run_http(proxy, params, args, work):
|
|||||||
m = re.search(rf"^\s+{pct}%\s+(\S+)", out, re.M)
|
m = re.search(rf"^\s+{pct}%\s+(\S+)", out, re.M)
|
||||||
res[f"p{pct}_ms"] = to_ms(m.group(1)) if m else float("nan")
|
res[f"p{pct}_ms"] = to_ms(m.group(1)) if m else float("nan")
|
||||||
errors = 0
|
errors = 0
|
||||||
|
res["timeouts"] = 0
|
||||||
m = re.search(r"Socket errors: connect (\d+), read (\d+), write (\d+), timeout (\d+)", out)
|
m = re.search(r"Socket errors: connect (\d+), read (\d+), write (\d+), timeout (\d+)", out)
|
||||||
if m:
|
if m:
|
||||||
errors += sum(int(x) for x in m.groups())
|
errors += sum(int(x) for x in m.groups()[:3])
|
||||||
|
# requests slower than wrk's 2 seconds: a latency tail, not a failure
|
||||||
|
res["timeouts"] = int(m.group(4))
|
||||||
m = re.search(r"Non-2xx or 3xx responses: (\d+)", out)
|
m = re.search(r"Non-2xx or 3xx responses: (\d+)", out)
|
||||||
if m:
|
if m:
|
||||||
errors += int(m.group(1))
|
errors += int(m.group(1))
|
||||||
|
if not res["requests"]:
|
||||||
|
errors += 1 # wrk did not run, or reported nothing
|
||||||
res["errors"] = errors
|
res["errors"] = errors
|
||||||
res["retrans"] = 0
|
res["retrans"] = 0
|
||||||
res["bytes"] = res["gbit"] * 1e9 / 8 * args.duration
|
res["bytes"] = res["gbit"] * 1e9 / 8 * args.duration
|
||||||
@ -430,13 +552,13 @@ def run_stream(proxy, params, args, work):
|
|||||||
direct = proxy.kind == "none"
|
direct = proxy.kind == "none"
|
||||||
host = SRV_ADDR if direct else PRX_IN
|
host = SRV_ADDR if direct else PRX_IN
|
||||||
port = ORIGIN_TCP if direct else TCP_PORT
|
port = ORIGIN_TCP if direct else TCP_PORT
|
||||||
argv = ["iperf3", "-c", host, "-p", str(port), "-t", str(args.duration),
|
argv = [tool("iperf3"), "-c", host, "-p", str(port), "-t", str(args.duration),
|
||||||
"-P", str(params["streams"]), "-J"]
|
"-P", str(params["streams"]), "-J"]
|
||||||
if params.get("reverse"):
|
if params.get("reverse"):
|
||||||
argv.append("-R")
|
argv.append("-R")
|
||||||
out = run_in("bcli", "cli", argv, args.duration + 30)
|
out = run_in("bcli", "cli", argv, args.duration + 30)
|
||||||
res = {"raw": out, "rate": float("nan"), "p50_ms": float("nan"),
|
res = {"raw": out, "rate": float("nan"), "p50_ms": float("nan"),
|
||||||
"p99_ms": float("nan"), "requests": 0, "errors": 0, "retrans": 0}
|
"p99_ms": float("nan"), "requests": 0, "errors": 0, "retrans": 0, "timeouts": 0}
|
||||||
try:
|
try:
|
||||||
j = json.loads(out)
|
j = json.loads(out)
|
||||||
s = j["end"]["sum_received"]
|
s = j["end"]["sum_received"]
|
||||||
@ -450,24 +572,45 @@ def run_stream(proxy, params, args, work):
|
|||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
BUSY = 0.9
|
||||||
|
|
||||||
|
|
||||||
def measure(proxy, scenario, args, work):
|
def measure(proxy, scenario, args, work):
|
||||||
kind, params = SCENARIOS[scenario]
|
kind, params = SCENARIOS[scenario]
|
||||||
p = proxy.start(args, work)
|
p = proxy.start(args, work)
|
||||||
try:
|
try:
|
||||||
time.sleep(0.5)
|
time.sleep(0.5)
|
||||||
before = {r: cg_usage(r) for r in ("cli", "prx", "srv")}
|
task0 = cg_usage("prx")
|
||||||
|
cpu0 = cpu_busy()
|
||||||
|
thr0 = {r: thread_times(r) for r in ("cli", "srv")}
|
||||||
t0 = time.time()
|
t0 = time.time()
|
||||||
res = (run_http if kind == "http" else run_stream)(proxy, params, args, work)
|
res = (run_http if kind == "http" else run_stream)(proxy, params, args, work)
|
||||||
|
res["cli_thread"] = LAST_CLIENT_THREAD[0]
|
||||||
wall = time.time() - t0
|
wall = time.time() - t0
|
||||||
after = {r: cg_usage(r) for r in ("cli", "prx", "srv")}
|
cpu1 = cpu_busy()
|
||||||
|
# threads of the load generator have ended by now: take what the
|
||||||
|
# client's cgroup reports for the run instead
|
||||||
|
thr1 = {r: thread_times(r) for r in ("cli", "srv")}
|
||||||
|
res["prx_task_s"] = cg_usage("prx") - task0
|
||||||
res["peak_mb"] = cg_peak("prx")
|
res["peak_mb"] = cg_peak("prx")
|
||||||
finally:
|
finally:
|
||||||
stop(p)
|
stop(p)
|
||||||
for r in ("cli", "prx", "srv"):
|
for r in ("cli", "prx", "srv"):
|
||||||
used = after[r] - before[r]
|
# the busy time of the role's CPUs, its own processes and the network
|
||||||
res[f"{r}_cpu_s"] = used
|
# work done there for it
|
||||||
# share of the CPUs given to that role, to see which side was the limit
|
res[f"{r}_cpu_s"], res[f"{r}_util"] = role_busy(cpu0, cpu1, cpulist(args.cpus[r]))
|
||||||
res[f"{r}_util"] = used / (wall * len(cpulist(args.cpus[r])))
|
res["srv_thread"] = busiest_thread(thr0["srv"], thr1["srv"], wall)
|
||||||
|
# Which side set the pace: a role whose CPUs, or a single thread of it,
|
||||||
|
# were busy all the time. A run limited by the client or the origin says
|
||||||
|
# only that the proxy can do at least this much.
|
||||||
|
if res["srv_util"] >= BUSY or res["srv_thread"] >= BUSY:
|
||||||
|
res["bound"] = "origin"
|
||||||
|
elif res["cli_util"] >= BUSY or res["cli_thread"] >= BUSY:
|
||||||
|
res["bound"] = "client"
|
||||||
|
elif res["prx_util"] >= BUSY:
|
||||||
|
res["bound"] = "proxy"
|
||||||
|
else:
|
||||||
|
res["bound"] = "none"
|
||||||
gb = res["bytes"] / 1e9
|
gb = res["bytes"] / 1e9
|
||||||
res["cpu_s_per_gb"] = res["prx_cpu_s"] / gb if gb else float("nan")
|
res["cpu_s_per_gb"] = res["prx_cpu_s"] / gb if gb else float("nan")
|
||||||
res["cpu_us_per_req"] = (res["prx_cpu_s"] * 1e6 / res["requests"]
|
res["cpu_us_per_req"] = (res["prx_cpu_s"] * 1e6 / res["requests"]
|
||||||
@ -477,9 +620,9 @@ def measure(proxy, scenario, args, work):
|
|||||||
|
|
||||||
# --- main --------------------------------------------------------------------
|
# --- main --------------------------------------------------------------------
|
||||||
|
|
||||||
FIELDS = ["proxy", "scenario", "rep", "gbit", "rate", "p50_ms", "p99_ms", "errors", "retrans",
|
FIELDS = ["proxy", "scenario", "rep", "gbit", "rate", "p50_ms", "p99_ms", "errors", "timeouts", "retrans",
|
||||||
"prx_cpu_s", "cpu_s_per_gb", "cpu_us_per_req", "peak_mb",
|
"prx_cpu_s", "prx_task_s", "cpu_s_per_gb", "cpu_us_per_req", "peak_mb",
|
||||||
"cli_util", "prx_util", "srv_util"]
|
"cli_util", "prx_util", "srv_util", "cli_thread", "srv_thread", "bound"]
|
||||||
|
|
||||||
|
|
||||||
def summary(rows):
|
def summary(rows):
|
||||||
@ -503,13 +646,14 @@ def summary(rows):
|
|||||||
def main():
|
def main():
|
||||||
ap = argparse.ArgumentParser(description=__doc__.split("\n\n")[0])
|
ap = argparse.ArgumentParser(description=__doc__.split("\n\n")[0])
|
||||||
ap.add_argument("--proxy", action="append", required=True,
|
ap.add_argument("--proxy", action="append", required=True,
|
||||||
help="3proxy:<binary>[:<service options>], nginx[:<binary>], haproxy[:<binary>] "
|
help="3proxy:<binary>[:<service options>], nginx[:<binary>], "
|
||||||
|
"haproxy[:<binary>[:splice-auto|splice]] "
|
||||||
"or none (the kernel routing, an upper bound); repeat")
|
"or none (the kernel routing, an upper bound); repeat")
|
||||||
ap.add_argument("--scenario", action="append", choices=sorted(SCENARIOS),
|
ap.add_argument("--scenario", action="append", choices=sorted(SCENARIOS),
|
||||||
help="default: all")
|
help="default: all")
|
||||||
ap.add_argument("--reps", type=int, default=3)
|
ap.add_argument("--reps", type=int, default=3)
|
||||||
ap.add_argument("--duration", type=int, default=10, help="seconds per run")
|
ap.add_argument("--duration", type=int, default=10, help="seconds per run")
|
||||||
ap.add_argument("--cpus", default="cli=0-3,prx=4-5,srv=6-7",
|
ap.add_argument("--cpus", default="cli=0-3,prx=4,srv=5-7",
|
||||||
help="CPUs per role (default %(default)s)")
|
help="CPUs per role (default %(default)s)")
|
||||||
ap.add_argument("--mtu", type=int, default=1500)
|
ap.add_argument("--mtu", type=int, default=1500)
|
||||||
ap.add_argument("--netem", help='netem on the client link, e.g. "delay 1ms rate 10gbit"')
|
ap.add_argument("--netem", help='netem on the client link, e.g. "delay 1ms rate 10gbit"')
|
||||||
@ -520,6 +664,9 @@ def main():
|
|||||||
args.cpus = dict(x.split("=") for x in args.cpus.split(","))
|
args.cpus = dict(x.split("=") for x in args.cpus.split(","))
|
||||||
proxies = [Proxy(s) for s in args.proxy]
|
proxies = [Proxy(s) for s in args.proxy]
|
||||||
scenarios = args.scenario or list(SCENARIOS)
|
scenarios = args.scenario or list(SCENARIOS)
|
||||||
|
# fail now rather than after the first scenarios
|
||||||
|
for name in ("nginx", "iperf3", "wrk"):
|
||||||
|
tool(name)
|
||||||
|
|
||||||
stamp = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
|
stamp = datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
|
||||||
os.makedirs(args.out, exist_ok=True)
|
os.makedirs(args.out, exist_ok=True)
|
||||||
@ -531,7 +678,8 @@ def main():
|
|||||||
f.write(" ".join(sys.argv) + "\n")
|
f.write(" ".join(sys.argv) + "\n")
|
||||||
f.write(sh("uname -a; lscpu | head -20; nproc; "
|
f.write(sh("uname -a; lscpu | head -20; nproc; "
|
||||||
"cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 2>/dev/null; "
|
"cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 2>/dev/null; "
|
||||||
"iperf3 --version | head -1; wrk -v 2>&1 | head -1; nginx -v 2>&1; "
|
f"{tool('iperf3')} --version | head -1; {tool('wrk')} -v 2>&1 | head -1; "
|
||||||
|
f"{tool('nginx')} -v 2>&1; "
|
||||||
"haproxy -v 2>/dev/null | head -1", check=False))
|
"haproxy -v 2>/dev/null | head -1", check=False))
|
||||||
|
|
||||||
rows = []
|
rows = []
|
||||||
@ -556,12 +704,14 @@ def main():
|
|||||||
f.flush()
|
f.flush()
|
||||||
raw.write(f"=== {proxy.label} {scenario} {rep}\n{res['raw']}\n")
|
raw.write(f"=== {proxy.label} {scenario} {rep}\n{res['raw']}\n")
|
||||||
print("%-24s %-14s rep %d: %7.2f Gbit/s %10.0f req/s proxy cpu %5.2fs "
|
print("%-24s %-14s rep %d: %7.2f Gbit/s %10.0f req/s proxy cpu %5.2fs "
|
||||||
"util cli %3.0f%% prx %3.0f%% srv %3.0f%% errors %d" % (
|
"busy cli %3.0f%% prx %3.0f%% srv %3.0f%% (threads %3.0f%%/%3.0f%%) "
|
||||||
|
"bound %-6s errors %d" % (
|
||||||
proxy.label, scenario, rep, res["gbit"],
|
proxy.label, scenario, rep, res["gbit"],
|
||||||
res["rate"] if res["rate"] == res["rate"] else 0,
|
res["rate"] if res["rate"] == res["rate"] else 0,
|
||||||
res["prx_cpu_s"], res["cli_util"] * 100,
|
res["prx_cpu_s"], res["cli_util"] * 100,
|
||||||
res["prx_util"] * 100, res["srv_util"] * 100,
|
res["prx_util"] * 100, res["srv_util"] * 100,
|
||||||
res["errors"]), flush=True)
|
res["cli_thread"] * 100, res["srv_thread"] * 100,
|
||||||
|
res["bound"], res["errors"]), flush=True)
|
||||||
finally:
|
finally:
|
||||||
for p in origin:
|
for p in origin:
|
||||||
stop(p)
|
stop(p)
|
||||||
|
|||||||
27
bench/data/m4-env.txt
Normal file
27
bench/data/m4-env.txt
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
bench/bench.py --reps 3 --duration 10 --out bench/results-final --proxy none --proxy 3proxy:bench/bin/3proxy-0.9.4:-ocTCP_NODELAY -osTCP_NODELAY --proxy 3proxy:bench/bin/3proxy-0.9.4:-s0 -ocTCP_NODELAY -osTCP_NODELAY --proxy 3proxy:bench/bin/3proxy-1.0.1:-ocTCP_NODELAY -osTCP_NODELAY --proxy 3proxy:bench/bin/3proxy-devel --proxy 3proxy:bench/bin/3proxy-devel:-s --proxy nginx --proxy haproxy
|
||||||
|
Linux ubuntu-virt 6.8.0-139-generic #139-Ubuntu SMP PREEMPT_DYNAMIC Sat Aug 1 03:32:48 UTC 2026 aarch64 aarch64 aarch64 GNU/Linux
|
||||||
|
Architecture: aarch64
|
||||||
|
CPU op-mode(s): 64-bit
|
||||||
|
Byte Order: Little Endian
|
||||||
|
CPU(s): 8
|
||||||
|
On-line CPU(s) list: 0-7
|
||||||
|
Vendor ID: Apple
|
||||||
|
BIOS Vendor ID: Apple Inc.
|
||||||
|
Model name: -
|
||||||
|
BIOS Model name: CPU @ 0.0GHz
|
||||||
|
BIOS CPU family: 257
|
||||||
|
Model: 0
|
||||||
|
Thread(s) per core: 1
|
||||||
|
Core(s) per cluster: 8
|
||||||
|
Socket(s): 1
|
||||||
|
Cluster(s): 1
|
||||||
|
Stepping: 0x0
|
||||||
|
BogoMIPS: 48,00
|
||||||
|
Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma lrcpc dcpop sha3 asimddp sha512 asimdfhm dit uscat ilrcpc flagm sb paca pacg dcpodp flagm2 frint i8mm bf16 bti afp
|
||||||
|
NUMA node(s): 1
|
||||||
|
NUMA node0 CPU(s): 0-7
|
||||||
|
8
|
||||||
|
iperf 3.16 (cJSON 1.7.15)
|
||||||
|
wrk debian/4.1.0-4build2 [epoll] Copyright (C) 2012 Will Glozer
|
||||||
|
nginx version: nginx/1.24.0 (Ubuntu)
|
||||||
|
HAProxy version 2.8.16-0ubuntu0.24.04.3 2026/06/19 - https://haproxy.org/
|
||||||
64
bench/data/m4-haproxy-splice.csv
Normal file
64
bench/data/m4-haproxy-splice.csv
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
proxy,scenario,rep,gbit,rate,p50_ms,p99_ms,errors,timeouts,retrans,prx_cpu_s,prx_task_s,cpu_s_per_gb,cpu_us_per_req,peak_mb,cli_util,prx_util,srv_util,cli_thread,srv_thread,bound
|
||||||
|
haproxy,stream1,0,12.470885279042667,nan,nan,nan,0,0,0,10.01,10.000143,0.6420094931512967,nan,30.35546875,0.2060312568787145,0.999001996007984,0.20981165133596144,0.12689777512488556,0.5330982979381341,proxy
|
||||||
|
haproxy-splice-auto,stream1,0,29.89117860621185,nan,nan,nan,0,0,0,9.98,9.507242,0.2670286748118488,nan,44.9296875,0.07797029702970297,0.9257884972170687,0.267870036101083,0.22455002102003757,0.7289534887541377,proxy
|
||||||
|
haproxy-splice,stream1,0,47.276622227678985,nan,nan,nan,0,0,0,9.92,9.068391,0.16783182521748577,nan,44.9765625,0.1667447306791569,0.9042844120328167,0.3173747622067216,0.38251154639763685,0.9515244508907347,origin
|
||||||
|
haproxy,stream16,0,9.126816993294865,nan,nan,nan,0,0,6,10.02,10.008672,0.87779780687716,nan,60.5625,0.12864186463469296,0.9515669515669516,0.7121966397013068,0.10178154529645375,1.3412808028682561,origin
|
||||||
|
haproxy-splice-auto,stream16,0,15.665416161722957,nan,nan,nan,0,0,10,10.01,10.009196,0.5108377207880435,nan,50.41015625,0.20893278934936654,0.9515209125475285,0.7146831530139104,0.17028929067443577,1.279742158250854,origin
|
||||||
|
haproxy-splice,stream16,0,21.84620025436062,nan,nan,nan,0,0,5,10.02,10.004629,0.3667854948979959,nan,60.96875,0.27884022208513265,0.9506641366223909,0.7257869249394673,0.24534597309840397,1.2156886451110003,origin
|
||||||
|
haproxy,stream1-down,0,13.960123370583007,nan,nan,nan,0,0,0,10.0,9.999398,0.5730096684278911,nan,35.16015625,0.142692750287687,0.9505703422053232,0.24893955461293743,0.5220067520499043,0.1168309458750056,proxy
|
||||||
|
haproxy-splice-auto,stream1-down,0,30.440812819799515,nan,nan,nan,0,0,0,10.0,9.77417,0.262794402388071,nan,40.4453125,0.19289074751698904,0.9398496240601504,0.2629094947251527,0.7307960970461047,0.270908729124504,proxy
|
||||||
|
haproxy-splice,stream1-down,0,47.62696450489736,nan,nan,nan,0,0,0,9.96,9.308399999999999,0.16728181803047182,nan,42.109375,0.2393629664844307,0.9162833486660533,0.21685991852083986,0.9514145276910632,0.38968830503606744,client
|
||||||
|
haproxy,http-ka-1k,0,0.44224741376,43767.86,1.4,2.12,0,0,0,10.1,10.09507,18.270316000954335,22.847732306014834,29.75390625,0.4527994201848161,0.9600760456273765,0.4640539839086426,0.6925179771661301,0.3136237673521794,proxy
|
||||||
|
haproxy-splice-auto,http-ka-1k,0,0.4412407808,43668.11,1.4,2.13,0,0,0,10.09,10.089706000000001,18.2938666398081,22.879247909916078,35.796875,0.45099108928896164,0.9600380589914367,0.46659761781460385,0.6936018485235806,0.32032686619155504,proxy
|
||||||
|
haproxy-splice,http-ka-1k,0,0.44400902144,43945.28,1.39,2.11,0,0,0,10.09,10.094142999999999,18.179810792630008,22.73300769632847,35.80078125,0.45607375271149675,0.9600380589914367,0.4628956927867151,0.698295986925665,0.3363989405582086,proxy
|
||||||
|
haproxy,http-ka-1m,0,5.8981141708800005,702.88,22.52,26.65,0,0,0,10.09,10.100358,1.3685730330302601,1421.3269474573883,37.34765625,0.6215240925493526,0.9600380589914367,0.16199095022624435,1.2678542450703074,0.026603372180188496,client
|
||||||
|
haproxy-splice-auto,http-ka-1m,0,6.25806934016,745.21,21.17,25.1,0,0,0,10.11,10.097527999999999,1.2924113748783124,1343.343077331916,44.88671875,0.5915651781686965,0.9601139601139601,0.15641103364655956,1.2825439345426253,0.026609834615750023,client
|
||||||
|
haproxy-splice,http-ka-1m,0,28.346784153599998,3382.78,4.66,5.72,0,0,0,9.99,9.951156,0.2819367430426858,295.2738450625129,52.44140625,0.5561823104693141,0.950523311132255,0.23213789268835142,1.6438977194646323,0.10547278904621821,client
|
||||||
|
haproxy,http-ka-50k-2000,0,4.07166255104,9744.89,193.14,512.74,0,0,0,10.09,10.039950999999999,1.9824825605791467,102.71183680117268,176.00390625,0.5347850156855508,0.9591254752851711,0.2985718135273511,0.8752281070644606,0.09218093276895038,proxy
|
||||||
|
haproxy-splice-auto,http-ka-50k-2000,0,3.9366898483200004,9421.6,200.61,570.88,0,0,0,10.09,10.047718999999999,2.050453632623551,106.2228258008822,182.140625,0.5346644481419855,0.9591254752851711,0.2891137855579869,0.884949502988458,0.09027899200636934,proxy
|
||||||
|
haproxy-splice,http-ka-50k-2000,0,4.9580867583999995,11984.65,161.23,393.17,0,0,0,10.12,10.072325999999999,1.6328879252231197,83.82826801852174,136.0390625,0.5424570111682325,0.9619771863117871,0.48020113136392206,0.844047476500976,0.11502621442719918,proxy
|
||||||
|
haproxy,http-close-1k,0,0.17045651456,16623.35,3.69,4.55,0,0,0,10.11,10.062655000000001,47.44905186450387,60.217282538774924,29.53515625,0.5420985633751592,0.9601139601139601,0.4613646633529146,0.8191778310296798,0.1492330706128941,proxy
|
||||||
|
haproxy-splice-auto,http-close-1k,0,0.169869312,16560.35,3.71,4.5,0,0,0,10.1,10.066307,47.565978250385804,60.38755657596575,35.7578125,0.5444001449800653,0.9600760456273765,0.46188850967007966,0.8210625053404907,0.1549161742184061,proxy
|
||||||
|
haproxy-splice,http-close-1k,0,0.16978542591999998,16555.02,3.72,4.42,0,0,0,10.1,10.062906,47.58947922778224,60.405253462835816,35.625,0.5433996383363472,0.9600760456273765,0.46545536114849706,0.8136549127740669,0.19295717801130827,proxy
|
||||||
|
haproxy-splice-auto,stream1,1,27.657705036907,nan,nan,nan,0,0,0,10.0,9.833874,0.28919158401814893,nan,40.65234375,0.15907990314769976,0.9900990099009901,0.26803708182184605,0.23978301610049976,0.698794525197252,proxy
|
||||||
|
haproxy-splice,stream1,1,44.66709383479124,nan,nan,nan,0,0,0,9.96,9.483912,0.17835478491282797,nan,44.984375,0.09460154241645244,0.9239332096474954,0.303347280334728,0.32433711631255135,0.838195850298805,proxy
|
||||||
|
haproxy,stream1,1,13.9130793718519,nan,nan,nan,0,0,0,10.0,10.001526,0.5748229081905579,nan,31.44921875,0.13121361397223466,0.9514747859181731,0.1997513468711148,0.11609297064619445,0.5218641241285665,proxy
|
||||||
|
haproxy-splice-auto,stream16,1,15.871037952656748,nan,nan,nan,0,0,11,10.04,10.011549,0.5056481486447681,nan,60.015625,0.22426160337552742,0.9516587677725118,0.7153581482639975,0.17497538300354495,1.2916249924400047,origin
|
||||||
|
haproxy-splice,stream16,1,22.562433611542634,nan,nan,nan,0,0,3,10.03,10.008068,0.3554258363877096,nan,55.68359375,0.27662203913491246,0.9516129032258065,0.7242658423493045,0.2416265140565151,1.2786892962500593,origin
|
||||||
|
haproxy,stream16,1,8.56274783754313,nan,nan,nan,0,0,8,10.02,10.009423,0.9354805272106242,nan,43.66015625,0.11837013430457546,0.9515669515669516,0.6884035681328822,0.09227811846283687,1.3248314087242796,origin
|
||||||
|
haproxy-splice-auto,stream1-down,1,29.532618920028337,nan,nan,nan,0,0,0,9.98,9.745233,0.2703355432066713,nan,40.23828125,0.18612747723620782,0.9379699248120301,0.08706208810267083,0.6914418421747642,0.23085334338816266,proxy
|
||||||
|
haproxy-splice,stream1-down,1,45.20745569639618,nan,nan,nan,0,0,0,9.96,9.484789000000001,0.1762340398376784,nan,44.6015625,0.2248864209994952,0.924791086350975,0.14191761855313256,0.8562900706132912,0.34591034845458013,proxy
|
||||||
|
haproxy,stream1-down,1,13.280333707459034,nan,nan,nan,0,0,0,10.0,10.001983,0.6023285462637666,nan,32.8359375,0.13882488479262672,0.9505703422053232,0.24791834542035993,0.5136100587673486,0.12826097080847915,proxy
|
||||||
|
haproxy-splice-auto,http-ka-1k,1,0.44711280639999995,44248.96,1.39,2.07,0,0,0,10.11,10.087575999999999,18.089394632020987,22.62276373644816,35.80859375,0.4535765895953757,0.9601139601139601,0.4662004662004662,0.6886438222525255,0.2945534754186057,proxy
|
||||||
|
haproxy-splice,http-ka-1k,1,0.44593840127999995,44132.54,1.39,2.1,0,0,0,10.1,10.087207,18.11909442382078,22.658491662348094,35.796875,0.45339366515837104,0.9600760456273765,0.46313603322949115,0.6945662425374509,0.3221811798409665,proxy
|
||||||
|
haproxy,http-ka-1k,1,0.44862275584,44402.84,1.38,2.08,0,0,0,10.1,10.091105,18.01067800243666,22.52262297129146,29.70703125,0.45520100955471426,0.9600760456273765,0.4665288188162316,0.6924554721759041,0.29546388241465266,proxy
|
||||||
|
haproxy-splice-auto,http-ka-1m,1,5.906922209279999,703.12,22.55,26.06,0,0,0,10.09,10.096472,1.3665323012581037,1420.9266300521053,43.19921875,0.6057525951557093,0.9591254752851711,0.13498452012383902,1.2206981774202692,0.020907726724359123,client
|
||||||
|
haproxy-splice,http-ka-1m,1,28.00318676992,3338.12,4.72,6.53,0,0,0,10.0,9.953499,0.28568177135444134,299.43705833033897,52.203125,0.5647553686074829,0.9505703422053232,0.2257247396566282,1.6406109424173014,0.09314792662013098,client
|
||||||
|
haproxy,http-ka-1m,1,5.91371698176,704.32,22.55,25.24,0,0,0,10.09,10.092942,1.3649621760555857,1418.5294531140166,38.8359375,0.624,0.9600380589914367,0.15222623345367028,1.253629079008308,0.030413129775669574,client
|
||||||
|
haproxy-splice-auto,http-ka-50k-2000,1,4.0017854464000004,9573.19,198.04,506.2,0,0,0,10.08,10.040982,2.0151005365003662,104.48410970831519,184.0,0.5310818333642605,0.9581749049429658,0.29093886462882096,0.877336596256015,0.0921928976926707,proxy
|
||||||
|
haproxy-splice,http-ka-50k-2000,1,4.850209259520001,11724.01,164.56,467.97,0,0,0,10.11,10.057952,1.6675569170804037,85.57643473844591,132.6796875,0.5495367070563079,0.9610266159695817,0.48620045652625027,0.8827828822617122,0.11212372578867655,proxy
|
||||||
|
haproxy,http-ka-50k-2000,1,4.05740191744,9702.65,195.76,645.83,0,0,0,10.09,10.040626,1.9894504326288172,103.36843830676555,177.29296875,0.5312326227988878,0.9582146248812915,0.2982786444324906,0.8723025194799039,0.09122591365490804,proxy
|
||||||
|
haproxy-splice-auto,http-close-1k,1,0.17246978048,16820.23,3.67,4.28,0,0,0,10.0,9.971963,46.384937568397376,59.415235254623994,35.59375,0.5402319681043857,0.9514747859181731,0.46653279785809904,0.812422387488307,0.20048900026686614,proxy
|
||||||
|
haproxy-splice,http-close-1k,1,0.17339252736000002,16905.08,3.65,4.24,0,0,0,10.11,10.064707,46.64560879955097,59.21318503681057,35.70703125,0.5444988218234548,0.959203036053131,0.4523154516276937,0.8220920443166914,0.22048409460256574,proxy
|
||||||
|
haproxy,http-close-1k,1,0.17221812224000002,16794.68,3.68,4.25,0,0,0,10.09,10.066023999999999,46.87079324178793,59.48731251768701,29.53515625,0.5452406804198335,0.9600380589914367,0.4732519422863485,0.8219748116165262,0.1681692979728716,proxy
|
||||||
|
haproxy-splice,stream1,2,44.025537299292175,nan,nan,nan,0,0,0,9.98,9.64556,0.18131571189526788,nan,44.91796875,0.15224166866458883,0.9327102803738317,0.3000352982703848,0.3729495374137985,0.8229787358803089,proxy
|
||||||
|
haproxy,stream1,2,13.420193637999308,nan,nan,nan,0,0,0,10.0,10.00282,0.5958974733855598,nan,31.4140625,0.05717791411042945,0.9514747859181731,0.19552609776304888,0.12086002113679797,0.5182343923337167,proxy
|
||||||
|
haproxy-splice-auto,stream1,2,29.507297892950234,nan,nan,nan,0,0,0,9.97,9.623803,0.2702392892979522,nan,44.4609375,0.07093881856540084,0.9774509803921568,0.27580772261623326,0.2157945829744378,0.7366131461399941,proxy
|
||||||
|
haproxy-splice,stream16,2,22.12554165032845,nan,nan,nan,0,0,2,10.02,10.003693,0.36212735525203216,nan,54.74609375,0.2913907284768212,0.9506641366223909,0.7249082007343941,0.23862270559995377,1.2426461145422065,origin
|
||||||
|
haproxy,stream16,2,8.580147028941548,nan,nan,nan,0,0,6,10.03,10.00947,0.9346185347163698,nan,51.703125,0.17872340425531916,0.9516129032258065,0.6840330983757279,0.09415712324018922,1.340238855783671,origin
|
||||||
|
haproxy-splice-auto,stream16,2,15.973129606882429,nan,nan,nan,0,0,13,10.03,10.012126,0.5019140976009596,nan,60.0,0.2711763538980361,0.9516129032258065,0.711083819465766,0.1807299535793587,1.3052893396648573,origin
|
||||||
|
haproxy-splice,stream1-down,2,48.59185309676415,nan,nan,nan,0,0,0,9.93,9.026188000000001,0.16346198078264335,nan,44.9375,0.23901164172012354,0.9019073569482289,0.1280977312390925,0.9513393656065166,0.34494886912870415,client
|
||||||
|
haproxy,stream1-down,2,13.238887720464081,nan,nan,nan,0,0,0,10.01,10.002078,0.6048169736106161,nan,31.21875,0.1375432525951557,0.9506172839506173,0.05361384458771632,0.49179301438541884,0.11592095587872998,proxy
|
||||||
|
haproxy-splice-auto,stream1-down,2,30.76905592533716,nan,nan,nan,0,0,0,9.99,9.65392,0.2597207502459875,nan,41.29296875,0.1940376569037657,0.9336448598130841,0.09265614275909403,0.7237916928519336,0.22990802153107426,proxy
|
||||||
|
haproxy-splice,http-ka-1k,2,0.44904218624000003,44444.43,1.38,2.08,0,0,0,10.1,10.094124,17.99385502653302,22.500796439081878,35.796875,0.4565061107117182,0.9591642924976258,0.46492363448097335,0.6905813584959353,0.3030430566697726,proxy
|
||||||
|
haproxy,http-ka-1k,2,0.44568674304,44112.76,1.39,2.09,0,0,0,10.01,10.002418,17.967776975769922,22.674504207581574,29.71484375,0.44922797456857405,0.9515209125475285,0.4595788926436184,0.6905693150174204,0.3098286205277593,proxy
|
||||||
|
haproxy-splice-auto,http-ka-1k,2,0.44602228736,44139.96,1.39,2.11,0,0,0,10.01,10.00352,17.954259746523533,22.658695755512447,35.79296875,0.4514140681653372,0.9515209125475285,0.4600780234070221,0.6927552847361909,0.30133454145667854,proxy
|
||||||
|
haproxy-splice,http-ka-1m,2,27.4877906944,3276.96,4.78,6.88,0,0,0,9.99,9.923215,0.2907472662627697,304.7961923358555,52.234375,0.5973016235993597,0.999,0.22384066587395957,1.6187790952229908,0.10784169195139078,client
|
||||||
|
haproxy,http-ka-1m,2,5.767839088640001,687.06,23.09,26.32,0,0,0,10.11,10.097942,1.4022582592377886,1456.9822741028968,37.94140625,0.6142604074402126,0.9601139601139601,0.15242424242424243,1.2832361890399908,0.02660297986960112,client
|
||||||
|
haproxy-splice-auto,http-ka-1m,2,5.5785082060799995,663.85,23.81,28.12,0,0,0,10.1,10.099212000000001,1.4484159028741108,1506.3385533184191,43.671875,0.6274887604367373,0.9600760456273765,0.1124129195693477,1.2758842161775354,0.028503600136568153,client
|
||||||
|
haproxy-splice,http-ka-50k-2000,2,4.92235128832,11897.29,163.37,414.88,0,0,0,10.13,10.062857,1.6463676656376751,84.49552916054985,151.32421875,0.5455516014234876,0.9620132953466287,0.483153078202995,0.8592217872562844,0.11119336969404632,proxy
|
||||||
|
haproxy,http-ka-50k-2000,2,4.06822322176,9736.04,194.05,680.82,0,0,0,10.09,10.042601,1.984158577342735,102.92977516627903,177.98828125,0.5328911000552792,0.9582146248812915,0.29488220958570266,0.8649197963205894,0.09123941413633474,proxy
|
||||||
|
haproxy-splice-auto,http-ka-50k-2000,2,4.08936251392,9784.39,191.94,569.22,0,0,0,10.08,10.042211,1.9719454982409896,102.35684765279908,181.41796875,0.5373106760251201,0.9590865842055185,0.2985756517065305,0.8915635476483981,0.09314699784890836,proxy
|
||||||
|
haproxy-splice,http-close-1k,2,0.17230200832,16803.03,3.67,4.27,0,0,0,10.1,10.066593,46.894404068661764,59.51819724684141,35.89453125,0.5420374069366262,0.9600760456273765,0.4473441108545035,0.8136090213947146,0.18058427193404752,proxy
|
||||||
|
haproxy,http-close-1k,2,0.17431527424,16996.31,3.62,4.34,0,0,0,10.09,10.064283,46.30690015658836,58.78035140047537,29.65625,0.5434585374705135,0.9600380589914367,0.43952734012974976,0.8193729517211945,0.16926621774991768,proxy
|
||||||
|
haproxy-splice-auto,http-close-1k,2,0.17079205888,16650.93,3.71,4.33,0,0,0,10.02,9.972787,46.93426645574963,60.12817743213077,35.7421875,0.5415685564209383,0.9515669515669516,0.4681848626925653,0.8173954622833055,0.1615753572679179,proxy
|
||||||
|
169
bench/data/m4-main.csv
Normal file
169
bench/data/m4-main.csv
Normal file
@ -0,0 +1,169 @@
|
|||||||
|
proxy,scenario,rep,gbit,rate,p50_ms,p99_ms,errors,timeouts,retrans,prx_cpu_s,prx_task_s,cpu_s_per_gb,cpu_us_per_req,peak_mb,cli_util,prx_util,srv_util,cli_thread,srv_thread,bound
|
||||||
|
direct,stream1,0,61.59043807936239,nan,nan,nan,0,0,0,0.07,0.0,0.0009090945904281307,nan,0.0,0.15914552736982643,0.010130246020260492,0.33659689399054693,0.542523909627398,0.9920184956182384,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,stream1,0,25.076815274321753,nan,nan,nan,0,0,0,10.01,10.001756,0.3192535554117112,nan,4.5703125,0.14034676663542642,0.9506172839506173,0.3075668623613829,0.22547887021175553,0.8998971051200377,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,stream1,0,8.320864371719768,nan,nan,nan,0,0,0,10.01,10.001265,0.9622296045989882,nan,2.171875,0.09806629834254144,0.9506172839506173,0.20161290322580644,0.08559402701932255,0.5118258825166938,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,stream1,0,21.129445707467838,nan,nan,nan,0,0,0,10.01,9.998918,0.3789108481077464,nan,6.39453125,0.09235668789808917,0.9515209125475285,0.21260470682090146,0.19784026605014632,0.5586089505468658,proxy
|
||||||
|
3proxy-devel,stream1,0,22.045100293757027,nan,nan,nan,0,0,0,10.0,10.001657,0.36277761019709465,nan,8.4375,0.08768520767549186,0.9505703422053232,0.22015073383577946,0.1892821448997447,0.5653165236592292,proxy
|
||||||
|
3proxy-devel-s,stream1,0,45.733864660192815,nan,nan,nan,0,0,0,9.89,8.817747,0.17296129740164518,nan,11.4140625,0.10646866347847973,0.8925992779783394,0.3173747622067216,0.3453118000638853,0.9474347722871482,origin
|
||||||
|
nginx,stream1,0,13.502219260500269,nan,nan,nan,0,0,0,10.01,10.002879,0.5928629926236841,nan,32.0390625,0.059215585747244295,0.9980059820538385,0.21870882740447958,0.11588387034324961,0.5469890694930801,proxy
|
||||||
|
haproxy,stream1,0,13.074724676255311,nan,nan,nan,0,0,0,10.01,10.001975,0.6122991754617084,nan,30.234375,0.04035087719298246,0.9506172839506173,0.2,0.1122562984734366,0.5227224462734111,proxy
|
||||||
|
direct,stream16,0,141.16148088835325,nan,nan,nan,0,0,3723,0.31,0.0,0.0017563336806383245,nan,0.0,0.5459744830620326,0.05457746478873239,0.9503164556962025,1.5296777692959824,2.846258589236203,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,stream16,0,24.37506402915491,nan,nan,nan,0,0,1696,10.04,10.006798999999999,0.32865708613295747,nan,68.921875,0.1541483706956321,0.9534662867996201,0.32031517643028434,0.22920876854538716,0.8197928180249117,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,stream16,0,8.727871407167079,nan,nan,nan,0,0,1051,10.05,10.016788,0.9181255018866824,nan,24.5546875,0.08593930970581422,0.9544159544159544,0.2816796729840208,0.08276581520000051,0.632726762221158,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,stream16,0,20.882659266549513,nan,nan,nan,0,0,1816,10.05,10.004978999999999,0.3839491594428824,nan,76.11328125,0.13076923076923078,0.9535104364326376,0.26881720430107525,0.19778844727512063,0.5716611797506093,proxy
|
||||||
|
3proxy-devel,stream16,0,20.683068039219563,nan,nan,nan,0,0,2018,10.05,9.999567,0.387817586561441,nan,52.1328125,0.1397824577644064,0.9535104364326376,0.26135936913255725,0.19972138897003985,0.5632383924778547,proxy
|
||||||
|
3proxy-devel-s,stream16,0,36.88142111514797,nan,nan,nan,0,0,1729,10.02,9.981243,0.21714618962344945,nan,84.87890625,0.18587962962962962,0.9515669515669516,0.35127674258109043,0.35179881734362295,0.9295704072412715,origin
|
||||||
|
nginx,stream16,0,13.526442518804762,nan,nan,nan,0,0,1815,10.05,10.034925999999999,0.5925640285562345,nan,74.99609375,0.12301045929968167,0.9544159544159544,0.2937113776808433,0.13315927762132487,0.616550983411331,proxy
|
||||||
|
haproxy,stream16,0,9.500596986818456,nan,nan,nan,0,0,0,10.03,10.006478,0.8442035098288654,nan,49.87890625,0.1736682546556951,0.9507109004739337,0.7012946979038225,0.11125250071463563,1.291515298093347,origin
|
||||||
|
direct,stream1-down,0,61.54374690443803,nan,nan,nan,0,0,0,0.1,0.0,0.0012997464239230243,nan,0.0,0.251073503409952,0.014347202295552367,0.20786933927245732,0.9372038366817282,0.5728991681204915,client
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,stream1-down,0,47.863368062293,nan,nan,nan,0,0,0,9.91,8.83401,0.1656195232648594,nan,10.67578125,0.25125,0.9349056603773584,0.2878605769230769,0.9472740801933867,0.4502748995413846,client
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,stream1-down,0,10.053500776066262,nan,nan,nan,0,0,0,10.0,10.002113,0.7956568633457785,nan,2.84375,0.2219469903393609,0.9514747859181731,0.04069963000336361,0.8449148815408425,0.09219263446435975,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,stream1-down,0,22.432411451723134,nan,nan,nan,0,0,0,10.01,10.002163,0.3569436671923783,nan,6.4296875,0.15131022823330514,0.9506172839506173,0.25606394707828006,0.5649721152037466,0.2128018914352686,proxy
|
||||||
|
3proxy-devel,stream1-down,0,22.1386177174921,nan,nan,nan,0,0,0,10.01,10.002789,0.3616802866998139,nan,9.89453125,0.15313290250070244,0.9515209125475285,0.12183235867446393,0.5641362593700737,0.1938367623087162,proxy
|
||||||
|
3proxy-devel-s,stream1-down,0,47.3560956479822,nan,nan,nan,0,0,0,9.93,8.989258999999999,0.16773134538475204,nan,11.23828125,0.41999521645539345,0.9010889292196007,0.2042907460774896,0.9401727710581673,0.3820936529645266,client
|
||||||
|
nginx,stream1-down,0,13.598172754592353,nan,nan,nan,0,0,0,10.0,10.00013,0.5882475717441422,nan,34.21875,0.1541043637473299,0.998003992015968,0.10531628532974428,0.5263660973475165,0.12171259743303382,proxy
|
||||||
|
haproxy,stream1-down,0,13.04557020209267,nan,nan,nan,0,0,0,9.99,10.001577000000001,0.6125540591772419,nan,30.6875,0.17640480849874196,0.9514285714285714,0.1926871735345328,0.5157725897846064,0.12262789874069302,proxy
|
||||||
|
direct,http-ka-1k,0,1.23874574336,120311.11,0.502,0.767,0,0,0,0.91,0.0,0.5876912222724234,0.7489317435130989,0.0,0.8062471706654595,0.2774390243902439,0.9533858267716535,2.502850504542173,0.9528021897151907,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1k,0,0.13597933568,13461.44,4.6,8.55,0,0,0,10.09,10.085132,59.36196084231376,74.21900859881279,5.3125,0.38467126770795496,0.9591254752851711,0.4049443757725587,0.38442310064795926,0.14444948982271436,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1k,0,0.14310965248,14160.83,4.36,8.29,0,0,0,10.09,10.103392,56.4043015975326,70.55105337127755,5.3125,0.3983276996975627,0.9600380589914367,0.4062111801242236,0.4053795728817735,0.15679788194444916,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1k,0,0.060565749759999996,5997.53,10.55,12.12,0,0,0,6.41,5.892927,84.66831534853273,106.56160125014546,9.4296875,0.15339163318364452,0.6296660117878192,0.1442687747035573,0.2739518353868087,0.10545455830369485,none
|
||||||
|
3proxy-devel,http-ka-1k,0,0.15980298240000002,15814.98,3.85,8.24,0,0,0,10.11,10.103257,50.61232198880413,63.3038207706661,9.3125,0.41626709287870717,0.9610266159695817,0.4333821376281113,0.4557657693361603,0.21004838330773956,proxy
|
||||||
|
3proxy-devel-s,http-ka-1k,0,0.15015608319999998,14862.79,4.13,8.6,0,0,0,10.0,10.004617999999999,53.27789477129888,67.2436168996658,9.2578125,0.400362647325476,0.9514747859181731,0.4208969935929029,0.42725600771529987,0.15776746007234257,proxy
|
||||||
|
nginx,http-ka-1k,0,0.38545653760000004,37438.23,1.68,2.09,0,0,0,10.02,10.016202,20.79611893447361,26.716081641359267,30.16796875,0.4208509007282484,0.9524714828897338,0.45414118954974986,0.6185750236098108,0.30333217719531014,proxy
|
||||||
|
haproxy,http-ka-1k,0,0.44862275584,44403.29,1.38,2.08,0,0,0,10.1,10.092595,18.01067800243666,22.52161852391974,29.7109375,0.44773933736042465,0.9600760456273765,0.4677210267046928,0.6925191237198265,0.31553329713730766,proxy
|
||||||
|
direct,http-ka-1m,0,71.38235645952001,8502.84,1.29,2.32,0,0,0,0.25,0.0,0.0028018127996855546,2.934203422454872,0.0,0.9309048178613396,0.044169611307420496,0.6012909632571996,3.6776368437892866,0.4544336356412374,client
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1m,0,32.55585210368,3883.29,3.89,8.53,0,0,0,10.02,9.985391,0.24622301313053013,257.6166602391053,16.984375,0.4876753081172971,0.9524714828897338,0.3697355533790402,1.4072569080833086,0.13684705872970046,client
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1m,0,8.33223655424,993.73,15.79,25.57,0,0,0,10.02,10.017144,0.9620466183141335,1006.6305003013864,12.5078125,0.23848726524311809,0.9515669515669516,0.08189519924694069,0.5907749255544233,0.03515967768304146,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1m,0,12.4554051584,1480.26,10.75,11.5,0,0,0,6.9,5.363434,0.4431810872308139,465.1162790697674,11.11328125,0.19615293279506055,0.6341911764705882,0.07758346581875994,0.5490367098688399,0.05132568508940509,none
|
||||||
|
3proxy-devel,http-ka-1m,0,21.990232555520002,2622.03,5.77,11.73,0,0,0,10.02,9.96345,0.3645254764705896,381.322068729307,19.0703125,0.38890097932535367,0.9533777354900095,0.21711079943899017,1.0049405487576604,0.12362131370626167,client
|
||||||
|
3proxy-devel-s,http-ka-1m,0,35.30463117312,4202.74,3.53,8.65,0,0,0,10.02,9.947932000000002,0.22705236490625533,238.0952380952381,17.06640625,0.5084709868699704,0.9515669515669516,0.38868832731648617,1.4966583639715494,0.14539533846143493,client
|
||||||
|
nginx,http-ka-1m,0,12.627203850239999,1502.42,10.5,14.34,0,0,0,10.03,10.019086999999999,0.6354534301628061,666.3566303481265,45.60546875,0.29071499503475673,0.9525166191832859,0.08328173374613003,0.7798955597828292,0.04654943004942413,proxy
|
||||||
|
haproxy,http-ka-1m,0,6.02226556928,717.05,22.13,26.28,0,0,0,10.09,10.100359,1.34035935598321,1393.2615299640984,39.10546875,0.6164913034142152,0.9600380589914367,0.15104009647271632,1.2611953734187002,0.02184922324712792,client
|
||||||
|
direct,http-ka-50k-2000,0,34.44563771392,83597.96,21.36,653.72,0,531,0,1.51,0.0,0.035069752809710045,1.789118604345307,0.0,0.8976982097186701,0.3793969849246231,0.9434920634920635,3.381443743187913,0.9475666754601523,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-ka-50k-2000,0,3.72101873664,9041.86,67.48,190.21,0,481,0,10.43,10.38188,2.2423966635369466,114.5046548392763,100.265625,0.4756548288606781,0.9914448669201521,0.49294570329200516,0.45560365627383104,0.12353803865212871,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-ka-50k-2000,0,3.11628398592,7572.42,81.79,246.09,0,503,0,10.41,10.363715,2.6724136945244994,136.4047328904438,132.41015625,0.47485399091499025,0.9895437262357415,0.4525371828521435,0.4234260960372297,0.1007558872384741,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-ka-50k-2000,0,3.70499649536,9003.02,68.12,225.76,0,480,0,10.44,10.408701,2.2542531444927776,115.27377521613833,206.96875,0.30470390592188157,0.9933396764985728,0.324052812858783,0.4159046044059033,0.11412223049799855,proxy
|
||||||
|
3proxy-devel,http-ka-50k-2000,0,4.288340295679999,10420.37,57.75,172.75,0,496,0,10.39,10.361574,1.9382790139983448,98.97783239499681,193.98046875,0.4794651384909265,0.9885823025689819,0.5053464499572284,0.47278849098808134,0.13207793919829464,proxy
|
||||||
|
3proxy-devel-s,http-ka-50k-2000,0,4.08466489344,9925.62,57.4,166.54,0,610,0,10.39,10.361924,2.0349282540531366,103.95821660129673,186.515625,0.47475231703419624,0.9876425855513308,0.4960120715671481,0.45559069014449605,0.127294880652316,proxy
|
||||||
|
nginx,http-ka-50k-2000,0,4.435895910399999,10774.0,66.87,85.03,0,338,0,10.14,10.102538999999998,1.8287173918985202,93.48982583601479,78.22265625,0.4268248175182482,0.9638783269961977,0.4438381082310141,0.47766825616381503,0.12164560872152692,proxy
|
||||||
|
haproxy,http-ka-50k-2000,0,3.9845888,9540.41,193.95,695.26,0,0,0,10.09,10.049517,2.025805021587171,104.97513473022742,178.3828125,0.5321375186846039,0.9591254752851711,0.29462832338578404,0.8962389296400717,0.09122410107872184,proxy
|
||||||
|
direct,http-close-1k,0,0.48494542848,47287.31,0.87,2.47,0,0,0,4.71,0.0,7.769946428426635,9.861912289701525,0.0,0.7769055980169387,0.5136314067611778,0.9360972568578554,2.2514680684726835,0.9028206642967048,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-close-1k,0,0.049576673280000004,4833.7,13.05,18.02,0,0,0,10.01,9.908954,161.5275788024799,206.56637569904456,9.9765625,0.3274593338497289,0.9515209125475285,0.38796477495107634,0.27787220939323715,0.0845929270930012,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-close-1k,0,0.05100273664,4976.02,12.7,17.47,0,0,0,10.03,9.919003,157.32489134135997,201.10678910855356,9.61328125,0.3289422704378148,0.9534220532319392,0.39449317738791423,0.2806871378622416,0.08744536686658436,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-close-1k,0,0.04521459712,4406.68,14.25,22.13,0,0,0,10.02,9.868813000000001,177.2878784859114,227.02041371185175,29.73828125,0.24721030042918454,0.9524714828897338,0.2986904430203399,0.24834668257046094,0.07698453085959421,proxy
|
||||||
|
3proxy-devel,http-close-1k,0,0.0528482304,5152.66,12.21,17.34,0,0,0,10.01,9.894235,151.52825249565973,193.98097009863767,12.4296875,0.3351393188854489,0.9515209125475285,0.39799657952602,0.2920875794095629,0.08932091563637072,proxy
|
||||||
|
3proxy-devel-s,http-close-1k,0,0.05142216704,5014.24,12.55,17.78,0,0,0,10.01,9.888247,155.73050419619187,199.23173377385905,12.40234375,0.33603082851637767,0.9515209125475285,0.396240234375,0.2864431587240493,0.08747886553316407,proxy
|
||||||
|
nginx,http-close-1k,0,0.13639876608,13300.09,4.7,5.26,0,0,0,10.02,9.971497000000001,58.768860088503224,75.22296627728898,29.6953125,0.5281369513749772,0.9515669515669516,0.3856041131105398,0.7164067540389693,0.15395175858105878,proxy
|
||||||
|
haproxy,http-close-1k,0,0.17020485632,16591.82,3.71,4.39,0,0,0,10.09,10.066581000000001,47.42520380748676,60.21472008211641,29.796875,0.5440115440115441,0.9600380589914367,0.4718902169101372,0.8126631474982218,0.20339719368038653,proxy
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,stream1,1,24.128537890835506,nan,nan,nan,0,0,0,10.01,10.001909,0.33182378356055536,nan,4.93359375,0.1204876882620129,0.9506172839506173,0.22343434343434343,0.21786695370343528,0.5833912195555127,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,stream1,1,10.155853300627914,nan,nan,nan,0,0,0,10.01,10.003753999999999,0.7881915025627496,nan,4.94921875,0.11301446051167964,0.9506172839506173,0.27844950213371267,0.07801192476959028,0.7652136358644214,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,stream1,1,22.10263720326343,nan,nan,nan,0,0,0,10.01,9.999949,0.36221549434084527,nan,11.078125,0.0581891146225232,0.9506172839506173,0.21894904458598727,0.18743641707799016,0.5654714009259497,proxy
|
||||||
|
3proxy-devel,stream1,1,22.282829232860685,nan,nan,nan,0,0,0,10.0,10.002649,0.358900282309469,nan,8.23828125,0.11426437640029873,0.999000999000999,0.23177966101694916,0.18980949377395148,0.5949025878185107,proxy
|
||||||
|
3proxy-devel-s,stream1,1,40.75770404715078,nan,nan,nan,0,0,0,10.0,9.873198,0.1962368540774464,nan,8.4453125,0.2007635302043566,0.9442870632672332,0.28341631558789737,0.3806346595691404,0.741593290863814,proxy
|
||||||
|
nginx,stream1,1,13.964509447397514,nan,nan,nan,0,0,0,10.01,10.002995,0.5731866228689451,nan,33.765625,0.1125748502994012,0.9980059820538385,0.21826965305226176,0.11486668871228368,0.5516676626390851,proxy
|
||||||
|
haproxy,stream1,1,13.63586872669775,nan,nan,nan,0,0,0,10.0,10.00288,0.5864614681340897,nan,31.8046875,0.06549482301950398,0.9505703422053232,0.19635459817729908,0.11602996350477843,0.5196638114746532,proxy
|
||||||
|
direct,stream1,1,62.67828350394503,nan,nan,nan,0,0,0,0.05,0.0,0.0006380799654798943,nan,0.0,0.14424057084607544,0.006666666666666667,0.32005141388174807,0.5335400698475843,0.9461611344094641,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,stream16,1,24.521235105224097,nan,nan,nan,0,0,1684,10.04,10.00666,0.3266668134853958,nan,60.07421875,0.14476771468793995,0.952561669829222,0.3187907935417382,0.22818345621197217,0.8327313277144565,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,stream16,1,8.70824880716366,nan,nan,nan,0,0,845,10.05,10.016509000000001,0.9206278971143109,nan,30.8671875,0.07368421052631578,0.9535104364326376,0.2754831375521031,0.08085922800264037,0.6175168737432718,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,stream16,1,20.84771208887811,nan,nan,nan,0,0,1975,10.03,9.999493,0.38404855710296704,nan,54.4296875,0.14997713763145862,0.9534220532319392,0.2666420118343195,0.2016766859838979,0.5692024053152211,proxy
|
||||||
|
3proxy-devel,stream16,1,20.881245040836067,nan,nan,nan,0,0,1860,10.06,10.011274,0.38418114418047355,nan,69.71484375,0.14739488117001828,0.9544592030360531,0.25984251968503935,0.19977036487598687,0.5662202685144221,proxy
|
||||||
|
3proxy-devel-s,stream16,1,37.89353177859546,nan,nan,nan,0,0,1718,10.02,9.984601,0.21126347422751993,nan,80.5546875,0.18891454965357968,0.9524714828897338,0.3562113932738504,0.35383789918565955,0.9328252781932733,origin
|
||||||
|
nginx,stream16,1,13.664191780368505,nan,nan,nan,0,0,1668,10.05,10.034652999999999,0.5866115955218271,nan,78.25,0.10988505747126437,0.9535104364326376,0.2748868778280543,0.12557451766543334,0.5976091432016605,proxy
|
||||||
|
haproxy,stream16,1,8.682181566428659,nan,nan,nan,0,0,10,10.02,10.008988,0.9226321638862739,nan,46.30078125,0.15513074049659414,0.9506641366223909,0.6997140133460439,0.0950879825413525,1.3476021812629118,origin
|
||||||
|
direct,stream16,1,140.8321600374948,nan,nan,nan,0,0,3726,0.17,0.0,0.0009654514037505305,nan,0.0,0.5683407501589319,0.031423290203327174,0.95,1.5333419334256484,2.846455293599054,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,stream1-down,1,48.3383582245863,nan,nan,nan,0,0,0,9.91,8.760173,0.1639922172051299,nan,10.6875,0.25131020713750934,0.9322671683913453,0.13392200147167035,0.9492117632457292,0.3594076287894674,client
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,stream1-down,1,8.780283833160503,nan,nan,nan,0,0,0,10.01,10.001005000000001,0.9119378978782314,nan,1.96875,0.1502025553131817,0.9970119521912351,0.037181303116147306,0.5212892635387247,0.08478167370374819,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,stream1-down,1,22.492259081296943,nan,nan,nan,0,0,0,10.01,10.002716,0.3559952605176645,nan,9.9453125,0.15742296918767507,0.9506172839506173,0.2569482288828338,0.5650504441492834,0.1957467321950951,proxy
|
||||||
|
3proxy-devel,stream1-down,1,22.2377952080391,nan,nan,nan,0,0,0,10.0,10.0015,0.35970742721593585,nan,9.83984375,0.16259678379988088,0.998003992015968,0.07603186097031137,0.5644406198681341,0.2015559746727999,proxy
|
||||||
|
3proxy-devel-s,stream1-down,1,47.4263128032106,nan,nan,nan,0,0,0,9.92,8.869871,0.16731498235848097,nan,11.2578125,0.2390011890606421,0.8953068592057761,0.12866108786610878,0.9515148702102105,0.34311731646818777,client
|
||||||
|
nginx,stream1-down,1,12.7216665185501,nan,nan,nan,0,0,0,10.01,10.002332000000001,0.6294060283162803,nan,32.859375,0.1366906474820144,0.9515209125475285,0.044513457556935816,0.512918074155217,0.11406471357164742,proxy
|
||||||
|
haproxy,stream1-down,1,13.5949945831861,nan,nan,nan,0,0,0,10.0,10.001486,0.588388207490784,nan,31.26171875,0.14853300733496333,0.999000999000999,0.2631140716069942,0.5165840531196128,0.13179059571121746,proxy
|
||||||
|
direct,stream1-down,1,61.83615689991757,nan,nan,nan,0,0,0,0.1,0.0,0.0012936022698756653,nan,0.0,0.2505,0.013793103448275862,0.1908114116339385,0.948257342685464,0.5311648500355413,client
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1k,1,0.13564379136000002,13424.47,4.62,8.4,0,0,0,10.11,10.095007,59.626761526698736,74.56522059799684,5.3203125,0.3858439201451906,0.9601139601139601,0.40321384425216317,0.3844104465613866,0.15966589585638852,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1k,1,0.14285799424,14135.63,4.38,8.16,0,0,0,10.02,10.016059,56.1116655924288,70.79520966545377,5.11328125,0.39630353652034833,0.9524714828897338,0.4100171863491284,0.40630267493527505,0.1577425503570464,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1k,1,0.06073352192,6012.96,10.53,12.18,0,0,0,6.22,5.709776,81.93168850893474,103.29137467202497,9.42578125,0.14596640643482375,0.6110019646365422,0.1436065573770492,0.2692223356178073,0.10071710097566386,none
|
||||||
|
3proxy-devel,http-ka-1k,1,0.15879634943999998,15718.59,3.88,8.24,0,0,0,10.1,10.103434,50.88278180508782,63.62204724409449,9.24609375,0.4113551151580075,0.9600760456273765,0.4330225711481845,0.45388993305911707,0.1824608060725231,proxy
|
||||||
|
3proxy-devel-s,http-ka-1k,1,0.15149826047999998,14991.62,4.09,8.26,0,0,0,10.09,10.089036,53.28113982579769,66.64068846633951,9.265625,0.3931059772643931,0.9600380589914367,0.42572552877520903,0.42635135778420247,0.17116313758023172,proxy
|
||||||
|
nginx,http-ka-1k,1,0.37966839807999997,36874.78,1.71,2.11,0,0,0,10.01,10.011303000000002,21.092089940845256,27.1114276969912,30.1484375,0.4200150206533984,0.9524262607040913,0.46948228882833787,0.6319238140289862,0.30050672677949675,proxy
|
||||||
|
haproxy,http-ka-1k,1,0.44803555328,44346.04,1.38,2.08,0,0,0,10.1,10.09164,18.034283085008664,22.55083426923017,29.70703125,0.4550379198266522,0.9591642924976258,0.46507400675149313,0.6945284460716071,0.3049951885902933,proxy
|
||||||
|
direct,http-ka-1k,1,1.2410945536,120544.57,0.506,0.737,0,0,0,0.61,0.0,0.3932013065277543,0.5010443900688074,0.0,0.8031938821412505,0.20677966101694914,0.9582410629547612,2.486784427146756,0.9575474368758521,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1m,1,33.414845562880004,3983.52,3.79,8.25,0,0,0,10.01,9.983574,0.23965395814655369,251.00300902708125,13.94140625,0.49396825396825395,0.9515209125475285,0.3705695428990467,1.4224894309488278,0.12069466170148065,client
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1m,1,8.33223655424,993.03,15.8,26.0,0,0,0,10.02,10.015114,0.9620466183141335,1007.7441416071608,11.37890625,0.23741374904165602,0.9515669515669516,0.08197236180904523,0.620369821858343,0.04181882762724019,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1m,1,12.4554051584,1479.94,10.75,11.49,0,0,0,6.89,5.403439,0.44253879580004457,464.7868321640583,9.30078125,0.19624167459562322,0.6356088560885609,0.0799492385786802,0.5376147927466318,0.05037882843821314,none
|
||||||
|
3proxy-devel,http-ka-1m,1,21.904333209599997,2611.4,5.81,11.51,0,0,0,10.01,9.951078,0.3655897636039584,382.6452599388379,15.21484375,0.38804015713662154,0.9524262607040913,0.23330562482682182,0.9952619081101569,0.08552675106932976,client
|
||||||
|
3proxy-devel-s,http-ka-1m,1,35.30463117312,4209.52,3.53,8.49,0,0,0,10.01,9.955867,0.22682576573968222,237.4175798112044,17.1015625,0.5100571670548381,0.9515209125475285,0.38613861386138615,1.5004169911523857,0.14729591443476903,client
|
||||||
|
nginx,http-ka-1m,1,12.884901888,1533.4,10.16,16.89,0,0,0,10.02,10.017987999999999,0.6221234798431396,652.4287016538611,44.5546875,0.3120173745173745,0.9524714828897338,0.0931023816888339,0.8494284894229014,0.06460517774355376,proxy
|
||||||
|
haproxy,http-ka-1m,1,5.6199479296,669.51,23.77,26.75,0,0,0,10.1,10.10142,1.4377357408318718,1493.6409346347234,37.2578125,0.6189567430025446,0.9600760456273765,0.12264150943396226,1.2283878625213749,0.0313614380198913,client
|
||||||
|
direct,http-ka-1m,1,71.55415515136,8530.24,1.25,2.46,0,0,0,0.19,0.0,0.0021242651761937685,2.221312912842696,0.0,0.9348903043170559,0.034050179211469536,0.618208516886931,3.709405625590086,0.4019320096525814,client
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-ka-50k-2000,1,3.7299945472,9063.64,63.09,514.63,0,468,0,10.42,10.374076,2.234855814000478,114.21055515975229,94.9921875,0.4750841211344336,0.9895536562203229,0.49168088737201365,0.45279435207006885,0.1178566516712031,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-ka-50k-2000,1,3.12005885952,7581.55,81.16,398.47,0,390,0,10.41,10.364834,2.6691804145262847,136.2708136977694,125.58203125,0.4686014100672241,0.9886039886039886,0.4511393514460999,0.4206229326284934,0.09506761970676463,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-ka-50k-2000,1,3.60827584512,8767.92,68.33,230.79,0,346,0,10.45,10.406272,2.3168960353478663,118.29965472349578,185.93359375,0.29191616766467066,0.9933460076045627,0.31209818819403856,0.41201669715464195,0.1178679391693439,proxy
|
||||||
|
3proxy-devel,http-ka-50k-2000,1,4.20487364608,10217.57,60.76,331.13,0,504,0,10.39,10.357021,1.9767538098912616,100.95415767892885,193.75,0.47977707006369424,0.9876425855513308,0.5068172134639966,0.46798553533834697,0.13115802493283865,proxy
|
||||||
|
3proxy-devel-s,http-ka-50k-2000,1,4.0667971584,9881.81,58.4,705.73,0,477,0,10.38,10.356761,2.041901692305461,104.58016805368045,210.84375,0.4753313108733834,0.9866920152091255,0.4967769660507091,0.45276734577617156,0.1273064226807526,proxy
|
||||||
|
nginx,http-ka-50k-2000,1,4.5468771942399995,11043.67,84.37,97.94,0,286,0,10.15,10.112297,1.7858410625838863,91.21955603487014,89.875,0.4225095610999818,0.964828897338403,0.4383094751192911,0.4615353256566173,0.12074832703972761,proxy
|
||||||
|
haproxy,http-ka-50k-2000,1,4.0114323456,9599.12,199.49,658.75,0,0,0,10.09,10.040925000000001,2.0122488190169516,104.50110818816414,175.69140625,0.5358673374324576,0.9582146248812915,0.29649742058104805,0.9049228720587726,0.09122955969335238,client
|
||||||
|
direct,http-ka-50k-2000,1,34.7892350976,84498.48,22.55,104.66,0,0,0,1.47,0.0,0.033803560115672926,1.7289846038037662,0.0,0.8991793669402111,0.3594132029339853,0.9491150442477876,3.411000944715859,0.9445115666403817,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-close-1k,1,0.049325015039999996,4811.08,13.11,18.27,0,0,0,10.01,9.903726,162.35169910249257,207.54286662105284,9.83203125,0.326150262085032,0.9524262607040913,0.3879901960784314,0.275967034101441,0.0846086070834202,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-close-1k,1,0.050751078399999996,4948.36,12.78,17.57,0,0,0,10.02,9.903932,157.9473826510847,202.19141594527514,9.56640625,0.3271880457985639,0.9524714828897338,0.3943765281173594,0.28071457773240316,0.08747121119129994,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-close-1k,1,0.044543508479999994,4340.06,14.47,22.66,0,0,0,10.0,9.849950999999999,179.59968293903015,230.0701714022777,32.5859375,0.2443584784010316,0.9514747859181731,0.29759238521836506,0.2464537962061136,0.07507722882722555,proxy
|
||||||
|
3proxy-devel,http-close-1k,1,0.051589939200000004,5026.27,12.5,18.05,0,0,0,10.03,9.88227,155.5342015212144,198.897437931308,14.99609375,0.33365570599613154,0.9534220532319392,0.39681762545899635,0.2901956692189265,0.08840241088415653,proxy
|
||||||
|
3proxy-devel-s,http-close-1k,1,0.0511705088,4990.09,12.61,18.07,0,0,0,10.0,9.881556,156.34005186987704,200.0120007200432,12.44921875,0.33634789301520107,0.9514747859181731,0.3950587084148728,0.2854849847075131,0.08744387075013657,proxy
|
||||||
|
nginx,http-close-1k,1,0.1367343104,13330.41,4.67,5.54,0,0,0,10.01,9.963383,58.566134400162966,75.0217345684564,29.76953125,0.5268738574040219,0.9515209125475285,0.37834328745780316,0.7183057481458207,0.1796215524167742,proxy
|
||||||
|
haproxy,http-close-1k,1,0.17062428672,16634.73,3.69,4.5,0,0,0,10.1,10.056046,47.355509320074354,60.1169005868838,29.83984375,0.5420510037981552,0.9591642924976258,0.45001149161112386,0.8084893552081557,0.16340300680257439,proxy
|
||||||
|
direct,http-close-1k,1,0.50432311296,49176.43,0.842,2.3,0,0,0,4.68,0.0,7.4238120438809885,9.422679665132462,0.0,0.7885857113101438,0.5246636771300448,0.9357254290171607,2.3239174095993884,0.8977134920844292,origin
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,stream1,2,8.286605016341204,nan,nan,nan,0,0,0,10.0,9.920733,0.9651597170390142,nan,1.359375,0.14385964912280702,0.949667616334283,0.19778817524457679,0.08846419733487249,0.5178944270022812,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,stream1,2,22.2233827907604,nan,nan,nan,0,0,0,10.01,10.000335,0.36023357920119853,nan,9.625,0.11502958579881657,0.9506172839506173,0.22473246135552913,0.19502698520391007,0.5634104164845997,proxy
|
||||||
|
3proxy-devel,stream1,2,21.765111163589697,nan,nan,nan,0,0,0,10.02,9.998705000000001,0.36822359918464515,nan,6.7578125,0.0948905109489051,0.9524714828897338,0.21693967239312825,0.19223268418501907,0.5609295079271684,proxy
|
||||||
|
3proxy-devel-s,stream1,2,46.73249807813627,nan,nan,nan,0,0,0,9.92,9.003859,0.16977904591309106,nan,11.36328125,0.21421889616463985,0.9447619047619048,0.3312862504264756,0.41067798286675167,0.9694125806126206,origin
|
||||||
|
nginx,stream1,2,12.469062099793415,nan,nan,nan,0,0,0,10.0,9.998698,0.6415083395345121,nan,29.8828125,0.11991682070240296,0.9505703422053232,0.2013945857260049,0.11984938068224997,0.5103005386978487,proxy
|
||||||
|
haproxy,stream1,2,13.624683206697599,nan,nan,nan,0,0,0,10.0,10.000916,0.587057135368575,nan,34.87890625,0.12731326644370122,0.9505703422053232,0.20306672192291753,0.1122730340939643,0.5255302303974537,proxy
|
||||||
|
direct,stream1,2,62.00100565146528,nan,nan,nan,0,0,0,0.08,0.0,0.001032088881843162,nan,0.0,0.16763463569165787,0.01171303074670571,0.33240901213171575,0.5925148906387202,0.9621577871938664,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,stream1,2,25.13459256422261,nan,nan,nan,0,0,0,10.0,10.002671,0.3181990311989089,nan,8.390625,0.09686888454011741,0.9514747859181731,0.2643041712809155,0.20836226291557725,0.7175046811596728,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,stream16,2,8.987514810098146,nan,nan,nan,0,0,999,10.05,10.018224,0.891564226451582,nan,34.4765625,0.09099307159353348,0.9544159544159544,0.29216323582520765,0.08466374023601732,0.6719340718210135,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,stream16,2,21.071103752647087,nan,nan,nan,0,0,1750,10.04,10.004246,0.3802105630940858,nan,75.421875,0.14884887166628677,0.9534662867996201,0.27044025157232704,0.19874932036339213,0.5726167854729214,proxy
|
||||||
|
3proxy-devel,stream16,2,20.88356344300066,nan,nan,nan,0,0,1916,10.04,10.002035,0.3836478067402083,nan,62.578125,0.15109389243391066,0.952561669829222,0.2658937920718025,0.20069267100349697,0.5659629834079776,proxy
|
||||||
|
3proxy-devel-s,stream16,2,37.836379550825434,nan,nan,nan,0,0,1637,10.04,9.982891,0.2119675046593261,nan,90.01953125,0.1772983114446529,0.9516587677725118,0.35577924331829225,0.3470469663570807,0.9125012250895256,origin
|
||||||
|
nginx,stream16,2,13.526234749787726,nan,nan,nan,0,0,2714,10.03,10.026723,0.5918238758579852,nan,65.78515625,0.1294250281848929,0.9525166191832859,0.3106900250268144,0.1274306021910872,0.6039446697219155,proxy
|
||||||
|
haproxy,stream16,2,9.834126139401159,nan,nan,nan,0,0,44,10.02,10.008187,0.8146389446310781,nan,47.69921875,0.16695842450765863,0.9515669515669516,0.6993827160493827,0.10937241978106194,1.2993031629625964,origin
|
||||||
|
direct,stream16,2,141.1760211425275,nan,nan,nan,0,0,3740,0.28,0.0,0.0015863211409809627,nan,0.0,0.5678073510773131,0.05045045045045045,0.95,1.52668150425192,2.8462802363378126,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,stream16,2,24.55551544211028,nan,nan,nan,0,0,1644,10.04,10.005853,0.32629388551362054,nan,61.3984375,0.15359628770301625,0.9534662867996201,0.3163548163548164,0.23017459199529192,0.7998194470095865,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,stream1-down,2,8.77774998842636,nan,nan,nan,0,0,0,10.02,10.002153,0.9131106078895976,nan,1.91015625,0.15555555555555556,0.99800796812749,0.03339253996447602,0.5352658303272034,0.07979041790151097,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,stream1-down,2,21.603287837877293,nan,nan,nan,0,0,0,10.0,10.000727000000001,0.37027268069818686,nan,5.16015625,0.1575649059982095,0.998003992015968,0.07715023994093761,0.5524390397381199,0.20154594422907607,proxy
|
||||||
|
3proxy-devel,stream1-down,2,21.303928895665045,nan,nan,nan,0,0,0,10.0,10.002455,0.3754771118572582,nan,5.984375,0.1503653738055087,0.9505703422053232,0.09543285616905249,0.552717440113428,0.1938354142227824,proxy
|
||||||
|
3proxy-devel-s,stream1-down,2,47.320203777706716,nan,nan,nan,0,0,0,9.9,8.762285,0.16735206137277603,nan,11.29296875,0.2516209476309227,0.9304511278195489,0.13850110213078617,0.9492116954091504,0.3602838138755396,client
|
||||||
|
nginx,stream1-down,2,14.106979062991007,nan,nan,nan,0,0,0,10.0,10.000791000000001,0.5670304371051654,nan,35.7734375,0.15931894192763757,0.999000999000999,0.244173140954495,0.5245647078834085,0.1137764809547855,proxy
|
||||||
|
haproxy,stream1-down,2,13.730794831069057,nan,nan,nan,0,0,0,10.01,10.002403,0.5831436303216366,nan,33.20703125,0.14322543683758235,0.9506172839506173,0.06225165562913907,0.533578834453824,0.11684576402124208,proxy
|
||||||
|
direct,stream1-down,2,61.970607058644724,nan,nan,nan,0,0,0,0.07,0.0,0.0009035575299123102,nan,0.0,0.23823109843081314,0.00904392764857881,0.18501742160278745,0.9515401696214075,0.5065174918896649,client
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,stream1-down,2,47.00754139952631,nan,nan,nan,0,0,0,9.92,9.164185,0.16880471450875434,nan,7.81640625,0.2354368932038835,0.9092575618698442,0.1350314026517795,0.9181941858744715,0.34314505326991174,client
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1k,2,0.14126415872,13977.54,4.41,8.57,0,0,0,10.11,10.103936000000001,57.25443787925883,71.61578239002621,5.26953125,0.39503305342147577,0.9601139601139601,0.4092140921409214,0.4044028381125424,0.1672592594808021,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1k,2,0.06073352192,6012.45,10.54,11.94,0,0,0,6.33,5.787432,83.38064119960721,105.05003568050185,9.265625,0.14845409487845174,0.6193737769080235,0.14365548980933596,0.2721064683401922,0.1206863596697095,none
|
||||||
|
3proxy-devel,http-ka-1k,2,0.15946743808000002,15785.92,3.86,8.19,0,0,0,10.1,10.103763,50.668651213588234,63.35108418167334,9.2734375,0.4144079885877318,0.9600760456273765,0.4346764346764347,0.45769850543007873,0.20054527218174723,proxy
|
||||||
|
3proxy-devel-s,http-ka-1k,2,0.15082717184,14929.48,4.1,8.28,0,0,0,10.09,10.08355,53.51820830110713,66.91602668682769,9.44921875,0.40567732662594325,0.9591254752851711,0.4263016377413835,0.42724727426155973,0.1805576935586204,proxy
|
||||||
|
nginx,http-ka-1k,2,0.38109446144,37010.5,1.7,2.09,0,0,0,10.02,10.013575000000001,21.03415507459966,27.03570493846814,30.16796875,0.4271085458946193,0.9524714828897338,0.4704607046070461,0.6413979374063188,0.30332627013937496,proxy
|
||||||
|
haproxy,http-ka-1k,2,0.44577062912,44116.19,1.39,2.09,0,0,0,10.01,9.999934999999999,17.964395760682276,22.676404759100013,29.703125,0.4526010512959942,0.9506172839506173,0.46119906566311963,0.6943160022023335,0.3182816361460946,proxy
|
||||||
|
direct,http-ka-1k,2,1.23790688256,120231.46,0.47300000000000003,0.88,0,0,0,0.64,0.0,0.413601384088907,0.527050886763117,0.0,0.8046082949308756,0.20846905537459284,0.957608351787409,2.4892068817789443,0.9574683332380854,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1k,2,0.13581156352,13441.73,4.61,8.49,0,0,0,10.08,10.08868,59.376387334002466,74.24703343326237,5.2734375,0.3856599674090168,0.9590865842055185,0.4054388133498146,0.3853053598739871,0.17577252336062021,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1m,2,8.76173328384,1043.83,15.05,25.04,0,0,0,10.02,10.018011,0.9148874703575584,958.3014537107881,8.79296875,0.24720812182741117,0.9524714828897338,0.09020458772473651,0.6430452902999537,0.030413724521814716,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1m,2,12.4554051584,1479.7,10.75,11.56,0,0,0,6.88,5.355506,0.4418965043692753,463.95576235754265,10.078125,0.1962594696969697,0.6317722681359045,0.08011399620012666,0.5603951058237995,0.05131653431277712,none
|
||||||
|
3proxy-devel,http-ka-1m,2,21.81843386368,2602.78,5.85,11.44,0,0,0,10.02,9.961265000000001,0.36739575581287776,384.2466541396633,16.15625,0.386041439476554,0.9533777354900095,0.22219116825041924,1.0010771720141753,0.11410175580144677,client
|
||||||
|
3proxy-devel-s,http-ka-1m,2,34.96103378944,4165.09,3.57,8.69,0,0,0,10.01,9.958632000000001,0.2290550115946177,239.99616389748016,14.21484375,0.5072217502124045,0.9515209125475285,0.3882580333413868,1.4940993752813039,0.14542942821942076,client
|
||||||
|
nginx,http-ka-1m,2,12.54130450432,1497.64,10.45,16.55,0,0,0,10.02,10.019409000000001,0.6391679587429516,667.8664267146571,45.26953125,0.2984306032368808,0.9515669515669516,0.08904747130003103,0.7933676888279081,0.04370691621717513,proxy
|
||||||
|
haproxy,http-ka-1m,2,6.294056468479999,749.32,21.2,24.21,0,0,0,10.09,10.100241,1.2824797553729876,1333.2452431289641,39.00390625,0.613958560523446,0.9600380589914367,0.09904761904761905,1.2948826327916734,0.02755697648841598,client
|
||||||
|
direct,http-ka-1m,2,72.06955122688001,8587.98,1.25,2.33,0,0,0,0.18,0.0,0.0019980698859450073,2.0933153463273944,0.0,0.9413997627520759,0.033271719038817,0.6151936444885799,3.754277127623124,0.46653177061824086,client
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1m,2,32.98534883328,3932.3,3.85,8.34,0,0,0,10.02,9.985841,0.24301698431372643,254.42449787979587,14.6015625,0.4930203045685279,0.9524714828897338,0.37142857142857144,1.4196693651925036,0.1539927098158036,client
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-ka-50k-2000,2,3.14681851904,7646.69,78.46,598.72,0,497,0,10.41,10.359805000000001,2.6464824550926513,135.20885286783042,125.03125,0.472448646886208,0.9886039886039886,0.45147123407992973,0.4253535770225284,0.09884827589363786,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-ka-50k-2000,2,3.6885548236799997,8963.07,66.91,268.78,0,425,0,10.46,10.413841999999999,2.268639182554269,115.97352344416973,199.2734375,0.3172043010752688,0.9942965779467681,0.3365439093484419,0.41968795136117204,0.12456576544886427,proxy
|
||||||
|
3proxy-devel,http-ka-50k-2000,2,4.27215028224,10381.1,57.98,217.64,0,471,0,10.41,10.362829,1.949369626490155,99.63820134382358,198.3359375,0.4785589032360912,0.9886039886039886,0.504708904109589,0.47274066039307266,0.13204040116340665,proxy
|
||||||
|
3proxy-devel-s,http-ka-50k-2000,2,4.04892942336,9838.84,59.56,684.02,0,451,0,10.39,10.360715,2.0528883393334865,105.1332125836057,182.32421875,0.47179816808613206,0.9885823025689819,0.496881049688105,0.452020753762097,0.12450968328260942,proxy
|
||||||
|
nginx,http-ka-50k-2000,2,4.578082816,11119.51,82.36,97.03,0,291,0,10.15,10.113419,1.7736682201600436,90.59183691684294,89.765625,0.43762270212386223,0.9657469077069457,0.4379694969269292,0.4691141566268477,0.11783661140664521,proxy
|
||||||
|
haproxy,http-ka-50k-2000,2,4.071998095360001,9750.91,193.51,818.8,0,0,0,10.09,10.037085000000001,1.9823191983311483,102.87415503512403,176.203125,0.5370644922164566,0.9591254752851711,0.3017148981779207,0.8963847192577428,0.09029282753738208,proxy
|
||||||
|
direct,http-ka-50k-2000,2,35.13283248128,85332.97,22.77,52.86,0,0,0,1.59,0.0,0.03620544972221543,1.8452218618172533,0.0,0.91359177954227,0.38405797101449274,0.9541139240506329,3.4653449768624753,0.952137198533366,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-ka-50k-2000,2,3.73888647168,9085.46,67.45,190.12,0,488,0,10.41,10.359068,2.227401142848279,113.8488795564159,96.58984375,0.46634146341463417,0.9876660341555977,0.491044776119403,0.45181039548726254,0.11590967543506979,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-close-1k,2,0.0511705088,4985.36,12.65,17.84,0,0,0,10.03,9.914797,156.80907202548667,200.73650082055798,9.5703125,0.3288759689922481,0.9534220532319392,0.39224349533627884,0.2845225037643004,0.08744239251847147,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-close-1k,2,0.0452984832,4420.66,14.18,21.97,0,0,0,10.03,9.879292,177.1361739547164,226.2882411334717,31.34765625,0.24989311671654554,0.9534220532319392,0.3030050083472454,0.2493314729842301,0.07890083260724257,proxy
|
||||||
|
3proxy-devel,http-close-1k,2,0.0528482304,5153.04,12.2,17.51,0,0,0,10.03,9.903379000000001,151.8310062468998,194.1390523381852,13.5390625,0.3364864864864865,0.9534220532319392,0.401609363569861,0.29404623857137496,0.09028827318898211,proxy
|
||||||
|
3proxy-devel-s,http-close-1k,2,0.05133828096,5005.62,12.56,17.8,0,0,0,10.03,9.89768,156.29662407769095,199.67748999621747,12.5390625,0.33513513513513515,0.9534220532319392,0.39515537068754586,0.28740050932892375,0.08842468920240701,proxy
|
||||||
|
nginx,http-close-1k,2,0.13690208256,13351.64,4.68,5.23,0,0,0,10.03,9.976531000000001,58.61123402913412,74.97888182042446,29.65625,0.5274785466496257,0.9525166191832859,0.38292934502320786,0.71732877140962,0.15297870495328245,proxy
|
||||||
|
haproxy,http-close-1k,2,0.171966464,16769.34,3.68,4.28,0,0,0,10.1,10.062629999999999,46.98590534489329,59.636629880903875,29.890625,0.5421119362434341,0.9600760456273765,0.4504463263904784,0.8094617760775544,0.16151087000273195,proxy
|
||||||
|
direct,http-close-1k,2,0.49970937856000003,48719.93,0.847,2.4,0,0,0,4.68,0.0,7.492354877927227,9.51134451390526,0.0,0.7908633696563285,0.527027027027027,0.9366614664586583,2.3234202233526995,0.900496417140032,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-close-1k,2,0.04915724288,4789.91,13.15,18.65,0,0,0,10.0,9.888626,162.7430574072099,208.28993959591753,9.875,0.327005036807439,0.9514747859181731,0.38700980392156864,0.2768784280803077,0.0845814286769186,proxy
|
||||||
|
27
bench/data/skylake-env.txt
Normal file
27
bench/data/skylake-env.txt
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
bench/bench.py --reps 3 --duration 10 --out bench/results-final --proxy none --proxy 3proxy:bench/bin/3proxy-0.9.4:-ocTCP_NODELAY -osTCP_NODELAY --proxy 3proxy:bench/bin/3proxy-0.9.4:-s0 -ocTCP_NODELAY -osTCP_NODELAY --proxy 3proxy:bench/bin/3proxy-1.0.1:-ocTCP_NODELAY -osTCP_NODELAY --proxy 3proxy:bench/bin/3proxy-devel --proxy 3proxy:bench/bin/3proxy-devel:-s --proxy nginx --proxy haproxy
|
||||||
|
Linux almalinux10-standard-4-8-60gb.novalocal 6.12.0-211.56.1.el10_2.x86_64 #1 SMP PREEMPT_DYNAMIC Fri Sep 18 09:20:51 EDT 2026 x86_64 GNU/Linux
|
||||||
|
Architecture: x86_64
|
||||||
|
CPU op-mode(s): 32-bit, 64-bit
|
||||||
|
Address sizes: 46 bits physical, 48 bits virtual
|
||||||
|
Byte Order: Little Endian
|
||||||
|
CPU(s): 8
|
||||||
|
On-line CPU(s) list: 0-7
|
||||||
|
Vendor ID: GenuineIntel
|
||||||
|
BIOS Vendor ID: Red Hat
|
||||||
|
Model name: Intel Xeon Processor (Skylake, IBRS, no TSX)
|
||||||
|
BIOS Model name: RHEL 7.6.0 PC (i440FX + PIIX, 1996) CPU @ 2.0GHz
|
||||||
|
BIOS CPU family: 1
|
||||||
|
CPU family: 6
|
||||||
|
Model: 85
|
||||||
|
Thread(s) per core: 1
|
||||||
|
Core(s) per socket: 8
|
||||||
|
Socket(s): 1
|
||||||
|
Stepping: 4
|
||||||
|
BogoMIPS: 3999.99
|
||||||
|
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology cpuid tsc_known_freq pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault pti ibrs ibpb tpr_shadow flexpriority ept vpid ept_ad fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm avx512f avx512dq rdseed adx smap clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 arat vnmi
|
||||||
|
Virtualization: VT-x
|
||||||
|
8
|
||||||
|
iperf 3.17.1 (cJSON 1.7.15)
|
||||||
|
wrk 4.2.0 [epoll] Copyright (C) 2012 Will Glozer
|
||||||
|
nginx version: nginx/1.26.3
|
||||||
|
HAProxy version 3.0.5-8e879a5 2024/09/19 - https://haproxy.org/
|
||||||
64
bench/data/skylake-haproxy-splice.csv
Normal file
64
bench/data/skylake-haproxy-splice.csv
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
proxy,scenario,rep,gbit,rate,p50_ms,p99_ms,errors,timeouts,retrans,prx_cpu_s,prx_task_s,cpu_s_per_gb,cpu_us_per_req,peak_mb,cli_util,prx_util,srv_util,cli_thread,srv_thread,bound
|
||||||
|
haproxy,stream1,0,8.636023560599849,nan,nan,nan,0,0,0,10.01,6.456637,0.9269245337210678,nan,29.3984375,0.07061340941512126,0.9515209125475285,0.24744645799011533,0.15128875361032273,0.43167728422806495,proxy
|
||||||
|
haproxy-splice-auto,stream1,0,30.611932766052398,nan,nan,nan,0,0,0,9.93,5.2854019999999995,0.25943390074416994,nan,44.5,0.1944509757818011,0.9421252371916509,0.3456072351421189,0.5290081009456566,0.7130405540273751,proxy
|
||||||
|
haproxy-splice,stream1,0,32.295125067580315,nan,nan,nan,0,0,0,10.0,5.2640080000000005,0.24764329171806024,nan,41.53125,0.19405204460966544,0.998003992015968,0.3641304347826087,0.49750945375038863,0.7417937263750758,proxy
|
||||||
|
haproxy,stream16,0,8.975699379090585,nan,nan,nan,0,0,3,10.0,6.335483,0.8908785169432152,nan,55.21484375,0.08196721311475409,0.9505703422053232,0.35294117647058826,0.16825135888154763,0.6038510349593467,proxy
|
||||||
|
haproxy-splice-auto,stream16,0,30.70114078562312,nan,nan,nan,0,0,2,10.02,4.988116,0.26092213690457905,nan,116.16796875,0.23837620958225159,0.9506641366223909,0.6298920377867746,0.5768980619413072,1.2478655398254854,origin
|
||||||
|
haproxy-splice,stream16,0,29.456167449165562,nan,nan,nan,0,0,4,10.03,5.074315,0.2722999713491997,nan,65.875,0.2509478672985782,0.9507109004739337,0.590633423180593,0.5901256910688761,1.1679225384141474,origin
|
||||||
|
haproxy,stream1-down,0,9.71949743551696,nan,nan,nan,0,0,0,10.0,6.511801999999999,0.8230021500345193,nan,31.82421875,0.21313868613138687,0.9514747859181731,0.09317751105495894,0.478663320593844,0.16547365860611024,proxy
|
||||||
|
haproxy-splice-auto,stream1-down,0,31.00868765885829,nan,nan,nan,0,0,0,10.01,5.240513,0.258223041719991,nan,43.22265625,0.2701674277016743,0.9980059820538385,0.24851876234364714,0.6953832692567568,0.5182059322959283,proxy
|
||||||
|
haproxy-splice,stream1-down,0,33.757359052958186,nan,nan,nan,0,0,0,9.97,5.335453,0.236248915975285,nan,45.9296875,0.28209673335021523,0.9950099800399201,0.26517150395778366,0.7461118994574448,0.5789178306200043,proxy
|
||||||
|
haproxy,http-ka-1k,0,0.38411436032,38288.69,1.6,2.44,0,0,0,10.1,6.9868310000000005,21.035402043466096,26.11931613940991,29.515625,0.22426120114394663,0.9600760456273765,0.3888716195212931,0.5774480768673774,0.3174880340636772,proxy
|
||||||
|
haproxy-splice-auto,http-ka-1k,0,0.37337694208,37215.98,1.59,2.7,0,0,0,10.02,6.934507,21.46892080519125,26.88842912000773,35.7578125,0.22675250357653792,0.9524714828897338,0.39981331673926573,0.5860667227322501,0.35081340003140254,proxy
|
||||||
|
haproxy-splice,http-ka-1k,0,0.33839644672,33732.09,1.63,2.86,0,0,0,10.1,7.012256,23.877319275416767,29.646502153040526,37.640625,0.20993818354731336,0.9600760456273765,0.3632982021078735,0.5327315573575286,0.3107425066142848,proxy
|
||||||
|
haproxy,http-ka-1m,0,7.64504178688,915.04,18.09,27.05,0,0,0,10.1,5.303821,1.0568941577097002,1092.8370482579528,45.69140625,0.3432569974554707,0.9591642924976258,0.06386342080303509,0.8391557223251773,0.04848889431509182,proxy
|
||||||
|
haproxy-splice-auto,http-ka-1m,0,25.42620639232,3031.45,5.02,7.67,0,0,0,10.1,5.868972,0.31778236498703827,329.86054410660046,56.6484375,0.47657004830917876,0.957345971563981,0.18699186991869918,1.5361296511527163,0.13559013225354133,client
|
||||||
|
haproxy-splice,http-ka-1m,0,27.23009265664,3249.18,4.64,7.3,0,0,0,10.0,5.868414,0.2937926102887945,307.48416456552485,57.0859375,0.48881942774705456,0.9514747859181731,0.20784069695084006,1.6306896191455449,0.14737385727345867,client
|
||||||
|
haproxy,http-ka-50k-2000,0,2.8534688972800004,6906.74,276.3,681.8,0,0,0,10.2,6.084704,2.859677218762861,146.49279025679326,178.5078125,0.23274021352313168,0.9714285714285714,0.15208529319535904,0.4699910580882655,0.08936918162684704,proxy
|
||||||
|
haproxy-splice-auto,http-ka-50k-2000,0,3.24857233408,7771.56,246.18,603.78,0,0,0,10.12,6.03259,2.4921716887959637,129.2679499789237,184.7890625,0.25380228136882127,0.9628924833491912,0.16338028169014085,0.5252002261718258,0.10173884560652446,proxy
|
||||||
|
haproxy-splice,http-ka-50k-2000,0,3.58302613504,8678.56,208.1,547.39,0,0,0,10.15,6.076625,2.266240795899009,116.16462186412745,195.13671875,0.23034908572785562,0.964828897338403,0.1783479349186483,0.503275064933598,0.10838375617258414,proxy
|
||||||
|
haproxy,http-close-1k,0,0.16433283072,16140.4,3.76,5.86,0,0,0,10.01,5.7080839999999995,48.7303721655261,61.96722732253292,31.26953125,0.33586517920721576,0.9515209125475285,0.20309977397481432,0.7744119890475171,0.19014590192179193,proxy
|
||||||
|
haproxy-splice-auto,http-close-1k,0,0.1627389952,15977.37,3.83,5.24,0,0,0,10.09,5.748422,49.60089614710857,62.52672413258888,35.50390625,0.3480427046263345,0.9600380589914367,0.20148052784036047,0.7972497298403712,0.20249463581851396,proxy
|
||||||
|
haproxy-splice,http-close-1k,0,0.1577058304,15487.67,3.91,5.72,0,0,0,10.1,5.771373,51.23463082820811,64.56850974600921,38.03515625,0.3353024574669187,0.9600760456273765,0.19872,0.758164543686981,0.1948691154509875,proxy
|
||||||
|
haproxy-splice-auto,stream1,1,27.72697911951139,nan,nan,nan,0,0,0,10.0,5.298265000000001,0.28841974759379113,nan,41.41015625,0.1533713200379867,0.9505703422053232,0.3315059658174782,0.4329284133394816,0.6826743269197528,proxy
|
||||||
|
haproxy-splice,stream1,1,25.259917191538477,nan,nan,nan,0,0,0,10.0,5.304781,0.3166249390458997,nan,40.5703125,0.13542713567839196,0.998003992015968,0.3241869918699187,0.3736710258412311,0.6569701634810317,proxy
|
||||||
|
haproxy,stream1,1,8.97739337317577,nan,nan,nan,0,0,0,10.01,6.459627,0.8915507734976943,nan,30.5546875,0.07047935453251068,0.9506172839506173,0.2743479696269396,0.15889727704554032,0.4535318084754292,proxy
|
||||||
|
haproxy-splice-auto,stream16,1,24.50452714128379,nan,nan,nan,0,0,3,10.01,5.107268,0.32669244403773184,nan,106.9140625,0.18821022727272727,0.9506172839506173,0.5097184986595175,0.45240115885144244,1.017156339826392,origin
|
||||||
|
haproxy-splice,stream16,1,32.36733783383577,nan,nan,nan,0,0,4,10.01,5.100031,0.24728732533485034,nan,61.6328125,0.2641019589332075,0.9506172839506173,0.6491582491582492,0.6177741317623673,1.2802634652904543,origin
|
||||||
|
haproxy,stream16,1,8.456644318404319,nan,nan,nan,0,0,26,10.03,6.2616879999999995,0.9483557708320423,nan,44.66015625,0.08347166231918425,0.9507109004739337,0.3497726477789437,0.16730166589010056,0.6173393459154463,proxy
|
||||||
|
haproxy-splice-auto,stream1-down,1,32.654824884137405,nan,nan,nan,0,0,0,10.01,5.360761,0.2452055175332874,nan,44.07421875,0.28249873545776427,0.9980059820538385,0.22348993288590605,0.7503397345799475,0.520184755689371,proxy
|
||||||
|
haproxy-splice,stream1-down,1,33.6711816615982,nan,nan,nan,0,0,0,9.88,5.429733,0.23471624511127306,nan,48.19921875,0.2860394537177542,0.987012987012987,0.25493476078956173,0.7552797811001567,0.5947510707364736,proxy
|
||||||
|
haproxy,stream1-down,1,9.193921085142536,nan,nan,nan,0,0,0,10.02,6.505828,0.8718214219273887,nan,34.24609375,0.21614052953156823,0.9990029910269193,0.08519134775374376,0.4615832075876959,0.14676573421621225,proxy
|
||||||
|
haproxy-splice-auto,http-ka-1k,1,0.38302384127999994,38180.75,1.59,2.68,0,0,0,10.09,6.987365,21.074406159743898,26.165791015979543,37.48828125,0.23172183853298403,0.9600380589914367,0.39881693648816935,0.593606479932167,0.36409712451339626,proxy
|
||||||
|
haproxy-splice,http-ka-1k,1,0.38134611968,38013.2,1.61,2.48,0,0,0,10.12,7.003999,21.230057373583918,26.36110018520496,40.32421875,0.22574493444576876,0.9601518026565465,0.39486054528361014,0.5803486312482636,0.39833478017772117,proxy
|
||||||
|
haproxy,http-ka-1k,1,0.36859543551999996,36741.31,1.63,2.57,0,0,0,10.1,7.011394999999999,21.921052789492773,27.21616370657203,36.09375,0.23055028462998103,0.9600760456273765,0.39416745061147695,0.5803059171812233,0.37743602204595855,proxy
|
||||||
|
haproxy-splice-auto,http-ka-1m,1,22.67742732288,2707.56,5.45,8.93,0,0,0,10.0,5.837529,0.35277370250586304,369.1671588895452,52.64453125,0.45167557066537156,0.9505703422053232,0.16556499842618821,1.4441986379884721,0.19100520442700733,client
|
||||||
|
haproxy-splice,http-ka-1m,1,26.54289788928,3163.17,4.76,7.99,0,0,0,10.01,5.864967,0.30170029035278123,316.28171506208724,52.71484375,0.48157070585401107,0.9515209125475285,0.20536828963795256,1.6011162092391507,0.2024190894499686,client
|
||||||
|
haproxy,http-ka-1m,1,7.21638391808,859.52,19.33,26.96,0,0,0,10.08,5.265218,1.1174571768273547,1161.1565487847022,50.41015625,0.3324892377817169,0.9590865842055185,0.07151858853182104,0.8115160024471539,0.05322013952053731,proxy
|
||||||
|
haproxy-splice-auto,http-ka-50k-2000,1,3.1873354956799997,7677.61,251.41,585.69,0,0,0,10.14,6.021116,2.5450725256235853,131.16535371958554,183.2890625,0.2536214675848967,0.9638783269961977,0.17430620517617712,0.5241598614639942,0.10361413296906273,proxy
|
||||||
|
haproxy-splice,http-ka-50k-2000,1,3.7184182681599998,8996.51,210.85,602.01,0,0,0,10.15,6.061004,2.1837242113211897,111.96170137663255,192.88671875,0.24253908100426338,0.9639126305792972,0.19096573208722742,0.5232345742100818,0.11598547197242452,proxy
|
||||||
|
haproxy,http-ka-50k-2000,1,3.12484036608,7518.29,252.7,648.02,0,0,0,10.15,6.005745,2.5985327404696354,133.9863241545001,179.36328125,0.248039914468995,0.9639126305792972,0.16108852048795747,0.5089801023366467,0.0960256982062013,proxy
|
||||||
|
haproxy-splice-auto,http-close-1k,1,0.15384707072,15109.44,3.98,5.91,0,0,0,10.1,5.770323,52.51968699947178,66.18437262457078,41.54296875,0.34202417634510546,0.9609895337773549,0.20878768441308532,0.7762975883879896,0.16921538087178775,proxy
|
||||||
|
haproxy-splice,http-close-1k,1,0.15929966592,15642.48,3.86,5.76,0,0,0,10.01,5.679019,50.27003637296769,63.939599115959986,38.8671875,0.33823878471398056,0.9515209125475285,0.20263326910725754,0.7762450148988013,0.23575367001202807,proxy
|
||||||
|
haproxy,http-close-1k,1,0.15627976704,15346.24,3.91,5.74,0,0,0,10.1,5.724976,51.702150272158484,65.16255153325548,32.55859375,0.3458985301090564,0.9600760456273765,0.20880179890780598,0.7876778009132015,0.19011328892797952,proxy
|
||||||
|
haproxy-splice,stream1,2,32.45617312914042,nan,nan,nan,0,0,0,9.85,5.248609,0.24269970330969026,nan,44.18359375,0.19387027797576623,0.9363117870722434,0.3499357326478149,0.5747021134715621,0.7445076104861466,proxy
|
||||||
|
haproxy,stream1,2,9.28810840332464,nan,nan,nan,0,0,0,10.02,6.456582,0.8626134955555618,nan,29.859375,0.0957472083630316,0.9515669515669516,0.2776138970829236,0.15319241362388406,0.46971923546880867,proxy
|
||||||
|
haproxy-splice-auto,stream1,2,31.85471336838318,nan,nan,nan,0,0,0,9.88,5.301953,0.248049972913184,nan,44.15625,0.15957955088389872,0.9382716049382716,0.34575835475578404,0.48624400940567974,0.7312259723779009,proxy
|
||||||
|
haproxy-splice,stream16,2,31.514131973225886,nan,nan,nan,0,0,7,10.02,5.157584,0.25422265927672116,nan,57.03515625,0.2527810650887574,0.9515669515669516,0.6095684175309468,0.6025479138310235,1.190953924333449,origin
|
||||||
|
haproxy,stream16,2,9.350857051229056,nan,nan,nan,0,0,1,10.02,6.433688,0.8569758780687742,nan,70.76171875,0.08295697646779178,0.9506641366223909,0.3730769230769231,0.17868690758330755,0.6363144611780939,proxy
|
||||||
|
haproxy-splice-auto,stream16,2,30.307529254304857,nan,nan,nan,0,0,9,10.02,4.946842,0.26433245922672766,nan,98.953125,0.23379081874112637,0.9515669515669516,0.6213823629553966,0.5607323347821974,1.2278466149840286,origin
|
||||||
|
haproxy-splice,stream1-down,2,33.000699897631,nan,nan,nan,0,0,0,9.96,5.289995,0.24142349566564897,nan,44.18359375,0.27838179519595446,0.9920318725099602,0.2844006568144499,0.7453594176547956,0.617017741879391,proxy
|
||||||
|
haproxy,stream1-down,2,9.332150181039376,nan,nan,nan,0,0,0,10.02,6.583239,0.858891908445779,nan,31.47265625,0.20446956075006423,0.99800796812749,0.09235880398671097,0.44451786978406393,0.1697062158911314,proxy
|
||||||
|
haproxy-splice-auto,stream1-down,2,23.774348262310063,nan,nan,nan,0,0,0,10.0,5.300676999999999,0.3364612986430228,nan,40.53125,0.24302384576357178,0.998003992015968,0.17775537634408603,0.6164387492428759,0.38736611953700967,proxy
|
||||||
|
haproxy-splice,http-ka-1k,2,0.38696648704000003,38569.82,1.59,2.48,0,0,0,10.11,7.004851,20.901034768842806,25.953489088496006,40.4765625,0.22875505831944776,0.9601139601139601,0.40641544690127684,0.5850673135537179,0.37169449371051916,proxy
|
||||||
|
haproxy,http-ka-1k,2,0.37396414464,37275.14,1.6,2.51,0,0,0,10.1,7.001749,21.606349474435007,26.82752557247549,33.2734375,0.21854146806482364,0.9600760456273765,0.38234379857009637,0.5622510786690808,0.3374843664678539,proxy
|
||||||
|
haproxy-splice-auto,http-ka-1k,2,0.35785801728,35673.23,1.66,2.88,0,0,0,10.09,6.999706,22.55643190937427,28.004518469382376,39.62109375,0.21902497027348394,0.9600380589914367,0.38287309959664906,0.5536707074905639,0.32416551347995487,proxy
|
||||||
|
haproxy-splice,http-ka-1m,2,26.71469658112,3188.33,4.76,7.88,0,0,0,10.02,5.856622,0.3000595561944403,314.1262775095617,52.75,0.4805101058710298,0.9506641366223909,0.20299812617114305,1.4984939928822527,0.18160881999388917,client
|
||||||
|
haproxy,http-ka-1m,2,6.82631364608,813.17,19.58,27.04,0,0,0,10.09,5.114019,1.1824830235621144,1228.5401193230246,43.87109375,0.30809859154929575,0.9591254752851711,0.08501896333754741,0.7553756037312992,0.039911132866994076,proxy
|
||||||
|
haproxy-splice-auto,http-ka-1m,2,24.223615549439998,2891.26,5.31,7.76,0,0,0,10.01,5.819121,0.3305864883652816,345.9836858841421,53.85546875,0.47541777670138047,0.9515209125475285,0.19135609145004698,1.5260201984587785,0.13972952745627013,client
|
||||||
|
haproxy-splice,http-ka-50k-2000,2,3.8916430233600003,9416.49,198.46,531.3,0,0,0,10.15,6.0941860000000005,2.086522312364942,107.07089886810763,196.22265625,0.24123957091775924,0.964828897338403,0.1859594383775351,0.5346888517433345,0.11599435072099394,proxy
|
||||||
|
haproxy,http-ka-50k-2000,2,3.11569678336,7541.37,251.49,698.44,0,0,0,10.17,6.088383,2.6112938985115397,133.79114373668008,182.0,0.2491069302214813,0.9658119658119658,0.16033887668653907,0.513701830080388,0.09601239403300997,proxy
|
||||||
|
haproxy-splice-auto,http-ka-50k-2000,2,2.7044033331199997,6528.24,264.27,695.02,0,0,0,10.15,5.990472,3.002510720408027,154.4454419574248,184.8828125,0.22211675367821548,0.964828897338403,0.14858934169278998,0.4480748449726689,0.08841104873739809,proxy
|
||||||
|
haproxy-splice,http-close-1k,2,0.15409872896000001,15129.27,3.97,6.08,0,0,0,10.01,5.701479,51.966684307166915,66.11624834874505,37.29296875,0.3454415954415954,0.9515209125475285,0.20836033700583279,0.7914972973071054,0.18823474885391117,proxy
|
||||||
|
haproxy,http-close-1k,2,0.15468593152000001,15192.54,3.98,5.51,0,0,0,10.1,5.72345,52.234873078650345,65.82591977058689,35.4609375,0.3456702253855279,0.9600760456273765,0.20811855670103094,0.7867352605196705,0.20723811513137558,proxy
|
||||||
|
haproxy-splice-auto,http-close-1k,2,0.15208546303999998,14935.9,4.04,6.46,0,0,0,10.03,5.685684,52.75980912054433,67.09389131190967,39.921875,0.32976699952448885,0.9525166191832859,0.19832851173256189,0.7592032193502162,0.1958527694972338,proxy
|
||||||
|
169
bench/data/skylake-main.csv
Normal file
169
bench/data/skylake-main.csv
Normal file
@ -0,0 +1,169 @@
|
|||||||
|
proxy,scenario,rep,gbit,rate,p50_ms,p99_ms,errors,timeouts,retrans,prx_cpu_s,prx_task_s,cpu_s_per_gb,cpu_us_per_req,peak_mb,cli_util,prx_util,srv_util,cli_thread,srv_thread,bound
|
||||||
|
direct,stream1,0,43.94218560876057,nan,nan,nan,0,0,0,6.14,0.0,0.11176599723683582,nan,0.0,0.2714785214785215,0.6375908618899273,0.34114848793747876,0.7093557466411603,0.7677126968039654,none
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,stream1,0,28.29906719758348,nan,nan,nan,0,0,0,9.99,5.642289,0.2823608023087004,nan,8.28515625,0.18638613861386139,0.996011964107677,0.34114848793747876,0.4875220793405474,0.7017296502032296,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,stream1,0,5.5253553114021905,nan,nan,nan,0,0,0,10.0,6.226614,1.4476205398649034,nan,3.0234375,0.051818634778276036,0.999000999000999,0.29378925331472433,0.10590895116421987,0.4492709035255843,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,stream1,0,19.14664078851784,nan,nan,nan,0,0,0,10.0,6.844423,0.41773771497678447,nan,5.03515625,0.1300148588410104,0.999000999000999,0.2714236940935473,0.31270573943067576,0.4901693435525649,proxy
|
||||||
|
3proxy-devel,stream1,0,19.8696182749667,nan,nan,nan,0,0,0,10.01,7.011065,0.4029305056944686,nan,7.8046875,0.10659655831739961,0.9515209125475285,0.26653696498054474,0.2978079331340094,0.47533737667963033,proxy
|
||||||
|
3proxy-devel-s,stream1,0,32.832108216195635,nan,nan,nan,0,0,0,10.0,5.25863,0.24361752944078474,nan,7.15234375,0.17372775131611934,0.999000999000999,0.37533875338753386,0.507535555131982,0.7727085060025145,proxy
|
||||||
|
nginx,stream1,0,9.562232619939449,nan,nan,nan,0,0,0,10.0,6.469755,0.8363088264713298,nan,34.30078125,0.06774423579748039,0.9514747859181731,0.27742998352553544,0.15795959930948786,0.46692001711780395,proxy
|
||||||
|
haproxy,stream1,0,9.72057688006905,nan,nan,nan,0,0,0,10.02,6.535721,0.8242036096593605,nan,29.609375,0.0635260528194147,0.9515669515669516,0.26005888125613347,0.14178342556893786,0.4591503253841818,proxy
|
||||||
|
direct,stream16,0,147.7220505652621,nan,nan,nan,0,0,3766,8.74,0.0,0.04732058850676409,nan,0.0,0.9378121878121878,0.8855116514690983,0.9720930232558139,3.0634424105815397,2.510424936668355,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,stream16,0,27.99043137406809,nan,nan,nan,0,0,783,10.02,5.605625,0.28591396835589206,nan,71.03125,0.18067724366564053,0.9515669515669516,0.3380417335473515,0.5046938551122888,0.7208465723862956,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,stream16,0,5.732471205111505,nan,nan,nan,0,0,197,10.04,6.289962,1.397156791495668,nan,93.3125,0.04843304843304843,0.9534662867996201,0.2989859339221459,0.10929789097392564,0.46724437122251294,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,stream16,0,18.886082493858858,nan,nan,nan,0,0,818,10.05,7.086829,0.4244418214174509,nan,98.0,0.13839285714285715,0.95260663507109,0.262987012987013,0.3383729659173314,0.4698905401852417,proxy
|
||||||
|
3proxy-devel,stream16,0,18.75490180600116,nan,nan,nan,0,0,806,10.03,7.100816999999999,0.42647019861696284,nan,97.57421875,0.1466261965911744,0.9534220532319392,0.2682452156989945,0.353601950334539,0.47673192496314026,proxy
|
||||||
|
3proxy-devel-s,stream16,0,30.455126533025485,nan,nan,nan,0,0,755,10.02,5.1583939999999995,0.2626929332675569,nan,87.84765625,0.20339382512373322,0.9515669515669516,0.3482858058314643,0.5749151856694169,0.7593291404137741,proxy
|
||||||
|
nginx,stream16,0,9.96210022136924,nan,nan,nan,0,0,634,10.1,6.678844,0.8035212542948832,nan,111.4765625,0.07841743662639185,0.9591642924976258,0.2879084967320261,0.1834119622066088,0.4690910571132587,proxy
|
||||||
|
haproxy,stream16,0,9.197518509317366,nan,nan,nan,0,0,3,10.02,6.322018,0.8709473557445826,nan,59.1640625,0.08803986710963455,0.9506641366223909,0.3649737302977233,0.18629361152888832,0.6316235684873117,proxy
|
||||||
|
direct,stream1-down,0,45.647288189692524,nan,nan,nan,0,0,0,6.19,0.0,0.10847239527586117,nan,0.0,0.27171152869476894,0.6447916666666667,0.3575717144763175,0.7333099099289225,0.7417750103981438,none
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,stream1-down,0,34.870015744513765,nan,nan,nan,0,0,0,9.99,5.292173999999999,0.22916950215942986,nan,10.63671875,0.2690550613128156,0.9496197718631179,0.25235109717868337,0.7136899543083228,0.5505873541310307,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,stream1-down,0,5.602349221864972,nan,nan,nan,0,0,0,10.0,6.135136,1.4278164710203243,nan,1.99609375,0.23190279214064116,0.998003992015968,0.06281156530408774,0.4386119914214682,0.10084248890934187,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,stream1-down,0,19.678813251012862,nan,nan,nan,0,0,0,10.01,6.833243,0.40689128603143715,nan,7.9375,0.20449601160261058,0.9515209125475285,0.141994917407878,0.4852622577380805,0.2909466155722971,proxy
|
||||||
|
3proxy-devel,stream1-down,0,20.287587429291236,nan,nan,nan,0,0,0,10.01,6.877286,0.3946823184622709,nan,8.859375,0.21173469387755103,0.999001996007984,0.1775731667214732,0.4925085135378208,0.33840632309755886,proxy
|
||||||
|
3proxy-devel-s,stream1-down,0,31.955023215450773,nan,nan,nan,0,0,0,9.98,5.232906,0.24982481542978685,nan,11.48828125,0.26596000963623223,0.9477682811016145,0.23147561747941736,0.7288831597684343,0.5113277193991893,proxy
|
||||||
|
nginx,stream1-down,0,9.79548777575188,nan,nan,nan,0,0,0,9.99,6.544494,0.8157989806714065,nan,32.234375,0.21067487811136773,0.999,0.09574468085106383,0.4574657832607243,0.1686745348268016,proxy
|
||||||
|
haproxy,stream1-down,0,9.319587948765866,nan,nan,nan,0,0,0,10.01,6.52505,0.8591737833882246,nan,30.12109375,0.21124694376528116,0.9515209125475285,0.09274447949526814,0.4500690759527404,0.15784557865976825,proxy
|
||||||
|
direct,http-ka-1k,0,1.22188464128,119514.52,0.49,0.8200000000000001,0,0,0,7.71,0.0,5.047939708562534,6.387627058684149,0.0,0.5640961442163245,0.750730282375852,0.9591125198098257,1.6139796321059274,0.8291503007549478,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1k,0,0.142606336,14217.61,4.2,8.74,0,0,0,10.1,7.8545300000000005,56.659474092371326,70.3357312478673,5.3125,0.1492040864813495,0.9591642924976258,0.22826430603857098,0.3225315295098274,0.17208480681672234,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1k,0,0.20946354175999998,20876.06,2.94,5.91,0,0,0,10.1,7.4359470000000005,38.57473206128605,47.90044296053193,5.375,0.19053254437869824,0.9609895337773549,0.28996517885406775,0.41955115652675273,0.22437098434992847,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1k,0,0.06157238272,6141.27,10.34,11.36,0,0,0,4.47,3.14774,58.077986298854725,72.69356491193834,9.6953125,0.07090348589044344,0.42329545454545453,0.103207367418228,0.14557638541524176,0.09318412301266239,none
|
||||||
|
3proxy-devel,http-ka-1k,0,0.19226689536000002,19169.41,3.16,5.9,0,0,0,10.1,7.510120000000001,42.02491533901887,52.16699636897045,9.88671875,0.18420430361787657,0.9600760456273765,0.27784810126582277,0.40053296910233444,0.27846989769837954,proxy
|
||||||
|
3proxy-devel-s,http-ka-1k,0,0.15032385536,14984.94,4.11,8.55,0,0,0,10.0,7.84878,53.2184328351702,66.66177813627,9.6875,0.15639810426540285,0.949667616334283,0.23356510745891276,0.33585181945622733,0.1786828625382035,proxy
|
||||||
|
nginx,http-ka-1k,0,0.37044092928,36230.03,1.72,2.39,0,0,0,10.02,6.753332,21.63907755976138,27.642675656513546,31.453125,0.23075100687040986,0.9515669515669516,0.426969791342261,0.5755808388889219,0.32324231089215627,proxy
|
||||||
|
haproxy,http-ka-1k,0,0.35995516928,35876.98,1.65,2.79,0,0,0,10.1,7.017473000000001,22.447239794227745,27.873987498102636,29.55078125,0.22531884742560226,0.9600760456273765,0.3981366459627329,0.5622085505479247,0.31845939009516416,proxy
|
||||||
|
direct,http-ka-1m,0,67.51688589312,8043.82,1.35,2.58,0,0,0,6.18,0.0,0.07322612609572082,76.67018175051176,0.0,0.9465685110425077,0.5982575024201355,0.5430899404575368,3.560523412785333,0.4551360718861913,client
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1m,0,24.99670966272,2979.22,5.03,12.1,0,0,0,10.0,6.173425,0.3200421218609891,335.1992759695639,16.78515625,0.44590780809031044,0.9523809523809523,0.20799500312304808,1.4870074439093754,0.15591340186519673,client
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1m,0,5.835954585600001,695.5,22.47,50.95,0,0,0,10.0,6.227775,1.3708125864686647,1436.7816091954023,14.21484375,0.2531615366261036,0.9514747859181731,0.05625790139064475,0.5526401143338306,0.04562272677057892,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1m,0,12.36950581248,1475.55,10.74,11.9,0,0,0,8.15,5.242551000000001,0.5271027071608438,551.5327874399404,9.34765625,0.2432049160954857,0.7703213610586012,0.11586508432229857,0.7430855753377406,0.07796468499366345,none
|
||||||
|
3proxy-devel,http-ka-1m,0,18.29656068096,2175.51,7.03,14.86,0,0,0,10.02,6.95438,0.43811512665009844,459.84396512161544,16.9375,0.3576299083000235,0.9524714828897338,0.1453287197231834,1.114991713418537,0.10837593685332784,client
|
||||||
|
3proxy-devel-s,http-ka-1m,0,23.45052143616,2790.01,5.36,13.66,0,0,0,10.01,6.273167,0.3414849440256755,358.3959899749373,17.57421875,0.4259346900141978,0.9524262607040913,0.19731920199501246,1.4203952920899983,0.16542876082448071,client
|
||||||
|
nginx,http-ka-1m,0,6.0280537088,718.42,22.02,30.01,0,0,0,10.01,6.239152,1.3284553168976567,1392.21140472879,44.73828125,0.2618595825426945,0.9515209125475285,0.060825716987078476,0.5707924206056916,0.040878219423396464,proxy
|
||||||
|
haproxy,http-ka-1m,0,6.72002998272,800.5,20.03,31.46,0,0,0,10.08,5.202046,1.1999946459667454,1246.7532467532467,45.22265625,0.31741643629052524,0.9590865842055185,0.06862745098039216,0.7667876855487537,0.04183266925588077,proxy
|
||||||
|
direct,http-ka-50k-2000,0,35.991825940480005,87401.38,20.85,32.92,0,0,0,8.61,0.0,0.19137678681239303,9.758607635968799,0.0,0.8615125240847784,0.8482758620689655,0.9534957291996203,2.8137727978226663,0.7692009026679565,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-ka-50k-2000,0,3.8871970611199997,9447.4,59.62,121.52,0,281,0,10.47,7.33171,2.1547659838955173,110.16066412045075,91.94140625,0.19929577464788734,0.9961941008563273,0.2252027448533999,0.4481119733502381,0.1359548037023942,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-ka-50k-2000,0,2.80498274304,6817.05,64.89,170.52,0,246,0,10.47,6.92724,2.9861146279004243,152.45722606479796,171.80078125,0.19711992445703494,0.9943019943019943,0.17001885606536768,0.39576669135250814,0.10457313967013684,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-ka-50k-2000,0,4.13407379456,10047.51,47.31,95.57,0,325,0,10.48,7.348655999999999,2.0280237887945907,103.67102256427505,133.34375,0.18839896250884225,0.9971455756422455,0.2352205192367845,0.47094639884576445,0.1511659166447872,proxy
|
||||||
|
3proxy-devel,http-ka-50k-2000,0,4.334813184,10535.29,36.58,89.02,0,217,0,10.48,7.494909000000001,1.9341087249032414,98.85020609513388,104.4765625,0.1919811320754717,0.9952516619183286,0.2352386934673367,0.48617878992348906,0.1502187969426634,proxy
|
||||||
|
3proxy-devel-s,http-ka-50k-2000,0,3.69744674816,8986.28,56.49,131.1,0,278,0,10.49,7.663372,2.2696743378863267,115.96285651116516,163.875,0.18351440717997167,0.997148288973384,0.21916952856696847,0.43191933814893463,0.13690098735210118,proxy
|
||||||
|
nginx,http-ka-50k-2000,0,3.5584475136,8644.47,127.17,159.61,0,137,0,10.2,6.9846140000000005,2.293134848501591,117.12694493885284,111.48046875,0.1927796130250118,0.9686609686609686,0.1699181875393329,0.4119689291215604,0.10648114028799606,proxy
|
||||||
|
haproxy,http-ka-50k-2000,0,3.01134249984,7277.23,261.46,803.19,0,0,0,10.18,6.057987,2.704441623771693,138.83017169664652,177.1640625,0.24276908487434803,0.967680608365019,0.16573208722741434,0.49376391215017,0.09697167338018714,proxy
|
||||||
|
direct,http-close-1k,0,0.53108277248,52147.64,0.733,3.79,0,0,0,8.55,0.0,12.879348294540259,16.233242262629176,0.0,0.7378545006165228,0.9038054968287527,0.8912415784408084,2.041091324801681,0.5730997647090921,client
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-close-1k,0,0.04286578688,4205.68,14.45,27.55,0,0,0,10.03,7.027548,187.18891181124633,238.17439209726444,24.2578125,0.13195925136223643,0.9516129032258065,0.14860583016476553,0.2568869570846952,0.0741601460789961,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-close-1k,0,0.042781900799999995,4198.03,14.4,26.5,0,0,0,9.99,6.893052,186.80796903722427,237.61952333380904,14.6015625,0.1328439497987213,0.9532442748091603,0.15257469802924348,0.26163964201916406,0.0770072155740437,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-close-1k,0,0.04051697664,3981.6,15.33,26.5,0,0,0,10.02,7.319014,197.84299483210404,251.44291091593476,22.5859375,0.1254725897920605,0.9524714828897338,0.1512179689971528,0.24451500342681542,0.07130340729423489,proxy
|
||||||
|
3proxy-devel,http-close-1k,0,0.048234496,4737.08,12.57,23.9,0,0,0,10.02,7.008174,166.18811565896738,211.0895761355018,53.35546875,0.14417613636363635,0.9533777354900095,0.16883116883116883,0.29112139474568055,0.08271276801194205,proxy
|
||||||
|
3proxy-devel-s,http-close-1k,0,0.04286578688,4208.46,14.35,25.42,0,0,0,10.01,7.117795,186.81565376177224,237.55280269590392,34.671875,0.1333175467677007,0.9515209125475285,0.15182250396196514,0.2635367130382308,0.07225341515917486,proxy
|
||||||
|
nginx,http-close-1k,0,0.1308622848,12847.5,4.6,6.91,0,0,0,10.01,5.414315,61.19410196940104,77.84249531467498,31.26171875,0.2969047619047619,0.9515209125475285,0.17742966751918157,0.6478938205044057,0.13689735065744207,proxy
|
||||||
|
haproxy,http-close-1k,0,0.16097738752000001,15806.42,3.86,5.66,0,0,0,10.02,5.679621999999999,49.795813707090275,63.34675711386611,29.22265625,0.3452914798206278,0.9515669515669516,0.20858505564387916,0.7857354029966487,0.1882130006120697,proxy
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,stream1,1,29.197936831775145,nan,nan,nan,0,0,0,9.99,5.64714,0.2736513633341382,nan,10.65625,0.17688846791380536,0.9496197718631179,0.3423772609819121,0.5023860496182423,0.7197181448896807,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,stream1,1,5.54073610574154,nan,nan,nan,0,0,0,10.0,6.130356,1.4435121055096212,nan,2.44921875,0.05010686297791499,0.9505703422053232,0.29360852197070575,0.10466706550123972,0.44310229377669036,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,stream1,1,18.746271170960057,nan,nan,nan,0,0,1,10.0,6.923991,0.4266378787899969,nan,8.3515625,0.11147213196700825,0.9970089730807578,0.26810109289617484,0.2806287257999571,0.48901023992781184,proxy
|
||||||
|
3proxy-devel,stream1,1,19.81979353775472,nan,nan,nan,0,0,0,9.99,7.0106139999999995,0.40314001569442237,nan,10.01953125,0.12717852096090437,0.9514285714285714,0.2719869706840391,0.3254262212161135,0.49544393857855856,proxy
|
||||||
|
3proxy-devel-s,stream1,1,31.449077260376534,nan,nan,nan,0,0,1,9.99,5.090237999999999,0.25408424631525656,nan,8.16015625,0.17983446200150488,0.996011964107677,0.37170830519918974,0.5165425469182663,0.7767505112411156,proxy
|
||||||
|
nginx,stream1,1,9.75871712437566,nan,nan,nan,0,0,0,9.96,6.438269,0.8162760444640786,nan,32.1171875,0.0738541914034671,0.9485714285714286,0.2553261225827598,0.1684169055869681,0.4430885623004122,proxy
|
||||||
|
haproxy,stream1,1,9.705190165858776,nan,nan,nan,0,0,0,10.01,6.665984999999999,0.8247415118717535,nan,33.25,0.06956315289648624,0.9515209125475285,0.2513911620294599,0.16841994688587877,0.451663677897488,proxy
|
||||||
|
direct,stream1,1,44.389174005677766,nan,nan,nan,0,0,0,6.11,0.0,0.11010085402569145,nan,0.0,0.27168207948012996,0.63579604578564,0.341156462585034,0.7055619791558234,0.7569537921450805,none
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,stream16,1,28.313349968601848,nan,nan,nan,0,0,715,10.03,5.574904,0.28275288543033045,nan,79.04296875,0.17958412098298676,0.9534220532319392,0.33697047496790755,0.5009326678550153,0.7237895955738057,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,stream16,1,5.220472839007376,nan,nan,nan,0,0,218,10.04,6.353164,1.5318292389511048,nan,90.90234375,0.04395343311950582,0.9543726235741445,0.279445727482679,0.1007633566748517,0.43027320887726855,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,stream16,1,19.45533354602417,nan,nan,nan,0,0,800,10.05,7.085894000000001,0.41200968849744224,nan,96.3671875,0.13925541941564562,0.9535104364326376,0.27069133398247325,0.35168473303999015,0.48249681827517704,proxy
|
||||||
|
3proxy-devel,stream16,1,18.39162729099409,nan,nan,nan,0,0,760,10.04,7.069515,0.435301424655335,nan,91.24609375,0.1399157697707066,0.9534662867996201,0.26216742375081115,0.33556020635175227,0.4635384590647387,proxy
|
||||||
|
3proxy-devel-s,stream16,1,31.17476043469111,nan,nan,nan,0,0,736,10.03,5.186141,0.25696391875121727,nan,78.16015625,0.19976415094339622,0.9516129032258065,0.3471153846153846,0.5627102631145084,0.7579234983022293,proxy
|
||||||
|
nginx,stream16,1,9.8879687300405,nan,nan,nan,0,0,793,10.06,6.656875,0.8088578126481994,nan,106.50390625,0.07914691943127962,0.9562737642585551,0.2852950766221063,0.1853321555368441,0.4710581767296116,proxy
|
||||||
|
haproxy,stream16,1,9.06324421500613,nan,nan,nan,0,0,0,10.0,6.360863,0.8822353120157729,nan,43.74609375,0.08736942070275404,0.949667616334283,0.3759239704329461,0.18528769253357383,0.6447168750791342,proxy
|
||||||
|
direct,stream16,1,150.5436199716137,nan,nan,nan,0,0,2979,8.73,0.0,0.04636292994657669,nan,0.0,0.9280095351609058,0.8643564356435643,0.9206500956022945,3.132650750865739,2.3573073422163286,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,stream1-down,1,34.421534596346625,nan,nan,nan,0,0,0,10.01,5.279381,0.2326204958142834,nan,9.14453125,0.28669201520912546,0.999001996007984,0.262532981530343,0.7363497102351947,0.5701253817662152,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,stream1-down,1,5.68308757694169,nan,nan,nan,0,0,0,9.98,6.1640939999999995,1.404718423398181,nan,3.4765625,0.23745473357475427,0.998,0.06478405315614617,0.4556058002831393,0.10783116416423337,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,stream1-down,1,18.76186496047368,nan,nan,nan,0,0,0,10.0,6.9654750000000005,0.426351778259922,nan,8.29296875,0.21130346232179226,0.999000999000999,0.16032064128256512,0.47446544493197773,0.3234040436283094,proxy
|
||||||
|
3proxy-devel,stream1-down,1,19.407222444299062,nan,nan,nan,0,0,0,10.01,6.874936,0.41258685397600503,nan,8.10546875,0.2106789079487799,0.9515209125475285,0.1537488136665612,0.5109912024594101,0.30616434104576695,proxy
|
||||||
|
3proxy-devel-s,stream1-down,1,30.315632395779144,nan,nan,nan,0,0,0,10.0,5.31313,0.26386141615423453,nan,11.015625,0.2855336368234699,0.9970089730807578,0.26199868507560814,0.7239105366514909,0.5307853186414291,proxy
|
||||||
|
nginx,stream1-down,1,8.99227992603171,nan,nan,nan,0,0,0,10.01,6.4409849999999995,0.8904488871792143,nan,33.703125,0.1990661096092406,0.9506172839506173,0.08106396453451552,0.43483866547690797,0.13787238607400534,proxy
|
||||||
|
haproxy,stream1-down,1,7.972846936017637,nan,nan,nan,0,0,0,9.98,6.4551240000000005,1.0012934447861737,nan,31.41015625,0.1769738450256661,0.9477682811016145,0.08895899053627761,0.4100967688119522,0.14928029456271036,proxy
|
||||||
|
direct,stream1-down,1,43.03125206765854,nan,nan,nan,0,0,0,5.99,0.0,0.11135061313932085,nan,0.0,0.2553462321792261,0.6233090530697191,0.35671342685370744,0.6913574830367858,0.7337909946328378,none
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1k,1,0.1543503872,15382.41,3.97,8.24,0,0,0,10.1,7.841647,52.34842715056046,65.00611443650641,5.45703125,0.16579819990525818,0.9600760456273765,0.24175126903553298,0.3548422914975592,0.20343066587099787,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1k,1,0.15778971647999998,15732.7,4.15,7.16,0,0,0,10.02,7.39028,50.801789741576954,63.65946632782719,5.3125,0.1624762808349146,0.9515669515669516,0.2529467983434215,0.3576936548081277,0.23861608017200606,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1k,1,0.06132072448,6115.4,10.37,11.47,0,0,0,4.43,3.1102,57.79449003665783,72.32534979020751,9.6328125,0.06727099236641221,0.4179245283018868,0.10871632329635499,0.1512653710931258,0.08365170503307336,none
|
||||||
|
3proxy-devel,http-ka-1k,1,0.18186502144,18127.79,3.38,6.93,0,0,0,10.1,7.545032,44.42855440822474,55.164126932109895,9.64453125,0.17972459639126306,0.9600760456273765,0.27223461906279883,0.3957398792392991,0.2129571928034147,proxy
|
||||||
|
3proxy-devel-s,http-ka-1k,1,0.13136560128,13091.9,4.44,12.45,0,0,0,10.07,7.858653,61.32503426699194,76.16382407442423,9.6328125,0.13705463182897862,0.959047619047619,0.20592923175007968,0.29398122075887145,0.1644634519513459,proxy
|
||||||
|
nginx,http-ka-1k,1,0.37681627136,36852.74,1.7,2.38,0,0,0,10.09,6.851237,21.421580259436915,27.108352811584858,33.3046875,0.22628951747088186,0.9600380589914367,0.42213883677298314,0.5698967203608523,0.32218882343684097,proxy
|
||||||
|
haproxy,http-ka-1k,1,0.38428213248000004,38308.04,1.58,2.52,0,0,0,10.11,6.98455,21.047036321473886,26.130985766237526,35.27734375,0.22018129770992367,0.9610266159695817,0.3912231559290383,0.5708629736448012,0.3803347283370004,proxy
|
||||||
|
direct,http-ka-1k,1,1.2993114931199998,127083.66,0.446,0.9,0,0,0,8.05,0.0,4.956471203480091,6.271780803987762,0.0,0.5751699823721984,0.7884427032321254,0.9597336715282181,1.6598135341106777,0.8250448349215003,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1m,1,26.6287972352,3170.38,4.82,10.1,0,0,0,10.01,6.1380669999999995,0.30072706360970775,315.44448996312985,14.65234375,0.47986814221803625,0.9524262607040913,0.22940627914205783,1.611560807138693,0.15495728739800543,client
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1m,1,5.84509816832,696.55,22.4,50.84,0,0,0,10.0,6.226949,1.3686682019062415,1434.5144168698896,14.84375,0.2573266619013581,0.9505703422053232,0.06021437578814628,0.5603873643301619,0.047520125478480744,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1m,1,12.4554051584,1488.76,10.67,11.65,0,0,0,7.89,5.007377,0.5067679388769741,529.1040772532189,14.453125,0.24579682690030782,0.7353215284249767,0.11694809255784866,0.7601212220516859,0.07890382086512121,none
|
||||||
|
3proxy-devel,http-ka-1m,1,17.95296329728,2135.69,7.15,15.42,0,0,0,10.02,6.958351,0.4465001051505787,468.5527238718728,16.7734375,0.3585394581861013,0.9524714828897338,0.14647887323943662,1.1235757517264,0.12169227662114614,client
|
||||||
|
3proxy-devel-s,http-ka-1m,1,23.88001816576,2841.95,5.32,12.15,0,0,0,10.02,6.296048,0.3356781366060106,352.0607146621693,18.421875,0.4209658421672556,0.9524714828897338,0.19906396255850234,1.3956319115522724,0.15210879832264515,client
|
||||||
|
nginx,http-ka-1m,1,5.697961984,678.94,23.17,31.9,0,0,0,10.01,6.2512799999999995,1.4054147820723684,1472.7085478887745,45.2265625,0.24433849821215733,0.9524262607040913,0.05767412543334384,0.537569986659097,0.03613231195441436,proxy
|
||||||
|
haproxy,http-ka-1m,1,7.8168404787200005,932.13,19.22,25.69,0,0,0,10.08,5.341355,1.0316188518817608,1070.7456978967496,45.265625,0.3439797211660329,0.9590865842055185,0.06424050632911392,0.8458070930285073,0.04468246285480473,proxy
|
||||||
|
direct,http-ka-1m,1,65.11170420736,7759.81,1.35,2.54,0,0,0,5.78,0.0,0.0710164179588056,74.36474750723706,0.0,0.9477434679334917,0.5611650485436893,0.5395436073773054,3.565522936440097,0.3801393834013302,client
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-ka-50k-2000,1,3.9781295718400003,9668.41,47.93,107.82,0,249,0,10.46,7.426947,2.103501117518794,107.46943388472208,90.640625,0.19607379375591297,0.9942965779467681,0.22061596480201132,0.4671315845709273,0.14356348171893302,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-ka-50k-2000,1,2.88953991168,7022.56,75.15,168.82,0,260,0,10.39,6.890688,2.8765825197297037,147.04841700043875,184.97265625,0.2051948051948052,0.9885823025689819,0.1771356783919598,0.4109788110193551,0.11309148962381269,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-ka-50k-2000,1,4.24404844544,10314.75,37.17,79.09,0,213,0,10.5,7.425437,1.9792422513520895,101.22238075039525,136.828125,0.18817966903073285,0.9962049335863378,0.23074504872681548,0.484267061635251,0.15109501793648356,proxy
|
||||||
|
3proxy-devel,http-ka-50k-2000,1,4.28968247296,10425.55,43.96,89.49,0,290,0,10.47,7.431873,1.9525920747743197,99.65069907773135,154.01953125,0.19166074389954987,0.9961941008563273,0.23486986516149264,0.49093727956987104,0.14736809129390788,proxy
|
||||||
|
3proxy-devel-s,http-ka-50k-2000,1,3.7090230271999998,9014.32,44.25,99.94,0,227,0,10.49,7.671449,2.262590428384386,115.61139582300105,151.26953125,0.16959619952494062,0.9962013295346629,0.20578071002199183,0.4262453302210737,0.1283609164204057,proxy
|
||||||
|
nginx,http-ka-50k-2000,1,3.8542298316799997,9362.93,114.16,140.83,0,148,0,10.16,6.996789000000001,2.1088519250179565,107.82128833704765,112.546875,0.20461502236873086,0.9676190476190476,0.17531645569620252,0.4423896322732737,0.11408052048570191,proxy
|
||||||
|
haproxy,http-ka-50k-2000,1,2.92519149568,7083.85,267.2,699.76,0,0,0,10.22,6.18439,2.795030688443657,143.2737060505804,181.3828125,0.24078039495598383,0.9714828897338403,0.15698587127158556,0.4975794705248003,0.09412579090413156,proxy
|
||||||
|
direct,http-ka-50k-2000,1,32.12635537408,77949.47,22.83,253.1,0,0,0,8.68,0.0,0.21614652266476883,11.028187946749608,0.0,0.8535534816941852,0.8732394366197183,0.9489698890649763,2.7479492355354154,0.7406260418585973,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-close-1k,1,0.04722786304,4635.03,13.53,22.13,0,0,0,10.01,7.054996,169.56092197560503,215.81648053124056,22.484375,0.14018470281790196,0.9515209125475285,0.15318471337579617,0.27684962035949096,0.0779553615801043,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-close-1k,1,0.04840226816,4752.74,13.05,21.72,0,0,0,10.02,6.926434,165.6120736636157,210.53958648512355,15.8828125,0.1408284023668639,0.9524714828897338,0.15801210576616756,0.28065207052631486,0.07985926045370434,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-close-1k,1,0.0406847488,3994.83,15.24,26.67,0,0,0,10.0,7.331008,196.63387967139175,249.9687539057618,23.88671875,0.12150639507342492,0.9514747859181731,0.14584654407102093,0.24070421729799868,0.07035422611007631,proxy
|
||||||
|
3proxy-devel,http-close-1k,1,0.04857004032,4770.82,12.53,23.84,0,0,0,10.03,6.992661,165.20472182305159,210.0435583849891,58.0546875,0.13873788702434411,0.9543292102759277,0.157475294867708,0.27874189040152336,0.07795755793030464,proxy
|
||||||
|
3proxy-devel-s,http-close-1k,1,0.04437573632,4357.14,13.83,24.3,0,0,0,10.02,7.1140419999999995,180.6392561510515,229.69007885567578,42.3984375,0.13633136094674556,0.9524714828897338,0.15423675023801967,0.26923580671822467,0.07412890809039178,proxy
|
||||||
|
nginx,http-close-1k,1,0.13111394304,12877.89,4.72,6.45,0,0,0,9.99,5.414659,60.95461561675263,77.43765842163603,31.125,0.29959514170040485,0.9496197718631179,0.1822534312160868,0.6545699582024739,0.16352007152430625,proxy
|
||||||
|
haproxy,http-close-1k,1,0.15091105791999998,14821.45,4.0,6.14,0,0,0,10.04,5.688575,53.22340264990967,67.62536624793722,29.26953125,0.3219016083254494,0.952561669829222,0.19182891796999682,0.7296755721909792,0.1825184532448331,proxy
|
||||||
|
direct,http-close-1k,1,0.4957667328,48677.01,0.771,4.53,0,0,0,8.6,0.0,13.87749428273054,17.492225112733323,0.0,0.7192467595989239,0.8695652173913043,0.87146529562982,1.9742833278308116,0.5751161170829755,client
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,stream1,2,5.2332908750732585,nan,nan,nan,0,0,0,9.98,6.122593,1.525267576559996,nan,1.8125,0.04260890264222804,0.9486692015209125,0.29589490968801313,0.0884953417978474,0.473542543900258,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,stream1,2,19.341902517040023,nan,nan,nan,0,0,0,10.0,6.742953999999999,0.41353749132749024,nan,5.359375,0.12767014406358668,0.998003992015968,0.2851763094830537,0.29972885580120884,0.5341388304202673,proxy
|
||||||
|
3proxy-devel,stream1,2,20.304971867303262,nan,nan,nan,0,0,0,10.02,6.725144,0.3946931280687556,nan,5.8828125,0.12396694214876033,0.9515669515669516,0.2688939344794032,0.3045047155583558,0.49449600638530344,proxy
|
||||||
|
3proxy-devel-s,stream1,2,31.048725596793666,nan,nan,nan,0,0,0,9.98,5.2500789999999995,0.2571005538398097,nan,7.94140625,0.1964729259811227,0.998998998998999,0.3573859768550034,0.48747074787814915,0.7007486845439365,proxy
|
||||||
|
nginx,stream1,2,9.764799238472945,nan,nan,nan,0,0,0,10.02,6.635033,0.820312185628863,nan,36.8359375,0.06830080913850547,0.9515669515669516,0.27189242374549033,0.15796012252227382,0.48308451627315624,proxy
|
||||||
|
haproxy,stream1,2,9.25175358380877,nan,nan,nan,0,0,0,10.01,6.426913000000001,0.8654047599697726,nan,29.515625,0.07548065511511987,0.9506172839506173,0.27123647097408987,0.16651177811617382,0.4715793459434357,proxy
|
||||||
|
direct,stream1,2,44.86820902742214,nan,nan,nan,0,0,0,6.4,0.0,0.11409506729600898,nan,0.0,0.27506876719179796,0.6708595387840671,0.34313055365686945,0.7173018870274938,0.7447722624832959,none
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,stream1,2,30.314863444991524,nan,nan,nan,0,0,0,9.98,5.659764,0.26327450882190734,nan,10.125,0.176109537299339,0.9495718363463368,0.34419354838709676,0.4786358136310057,0.7151016072164642,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,stream16,2,5.584721557635198,nan,nan,nan,0,0,192,10.05,6.303241,1.4342308419046128,nan,92.55078125,0.04938271604938271,0.9535104364326376,0.2946194225721785,0.10930335475181782,0.4596076379008132,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,stream16,2,18.88211540354059,nan,nan,nan,0,0,830,10.05,7.102328,0.42420934577265995,nan,91.62109375,0.14465996728207525,0.9544159544159544,0.2680077871512005,0.3431706867766449,0.4749079929623601,proxy
|
||||||
|
3proxy-devel,stream16,2,18.933899805662048,nan,nan,nan,0,0,782,10.05,7.063448,0.42325861852591706,nan,91.12109375,0.14064697609001406,0.9535104364326376,0.2669477781381771,0.3431366081170437,0.47484368993419285,proxy
|
||||||
|
3proxy-devel-s,stream16,2,32.04857042305418,nan,nan,nan,0,0,739,10.02,5.177363,0.24975915918702893,nan,90.00390625,0.20089601509078048,0.9515669515669516,0.3553559974342527,0.5732179897999251,0.7826352396066084,proxy
|
||||||
|
nginx,stream16,2,9.842346910241341,nan,nan,nan,0,0,735,10.07,6.6343890000000005,0.8134854137383131,nan,102.75,0.0755883052056097,0.956315289648623,0.2804560260586319,0.18060985937425528,0.46538880798689947,proxy
|
||||||
|
haproxy,stream16,2,9.34405922985948,nan,nan,nan,0,0,0,10.01,6.374752,0.8567064441556639,nan,73.91015625,0.08592451934488488,0.9506172839506173,0.38666666666666666,0.17967752023981196,0.6621181680636408,proxy
|
||||||
|
direct,stream16,2,155.4265189491131,nan,nan,nan,0,0,1628,8.99,0.0,0.046253784447393496,nan,0.0,0.9818678589170392,0.9108409321175278,0.9660791486531427,3.2390959837193067,2.4937244359650834,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,stream16,2,28.58071441605949,nan,nan,nan,0,0,768,10.03,5.608255,0.2802623320701637,nan,86.23828125,0.18632075471698112,0.9516129032258065,0.338050820199421,0.5189085529627563,0.7283341465979575,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,stream1-down,2,5.538202205406668,nan,nan,nan,0,0,0,10.0,6.147093,1.4443592691018894,nan,2.828125,0.23238341968911916,0.999000999000999,0.060132890365448506,0.44856270979307344,0.09783169922215046,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,stream1-down,2,18.766204715865502,nan,nan,nan,0,0,0,10.0,6.793089,0.4262517337056116,nan,6.515625,0.20747520976353928,0.998003992015968,0.17022674991784423,0.46757087818658555,0.31350096864291566,proxy
|
||||||
|
3proxy-devel,stream1-down,2,16.947169569957758,nan,nan,nan,0,0,0,9.99,6.718148,0.47153300193758585,nan,5.828125,0.19190633749045558,0.998001998001998,0.15262636273538158,0.43857089251787307,0.2884982736212551,proxy
|
||||||
|
3proxy-devel-s,stream1-down,2,32.06821899943276,nan,nan,nan,0,0,0,9.99,5.256309,0.24919211586772827,nan,10.71875,0.27856420626895856,0.9970059880239521,0.2637290365011509,0.7383214412946932,0.5717778826855451,proxy
|
||||||
|
nginx,stream1-down,2,9.731295486532868,nan,nan,nan,0,0,0,10.0,6.509569,0.8220001649787211,nan,32.0078125,0.2014887063655031,0.998003992015968,0.09314703925482369,0.45555368966541926,0.15872726169228166,proxy
|
||||||
|
haproxy,stream1-down,2,9.51980461846781,nan,nan,nan,0,0,0,10.01,6.500072,0.8411004565938953,nan,31.67578125,0.21156812339331618,0.9980059820538385,0.0990691489361702,0.4645744810619603,0.17571034610865963,proxy
|
||||||
|
direct,stream1-down,2,43.08145136317145,nan,nan,nan,0,0,0,6.01,0.0,0.11159080343833658,nan,0.0,0.25057471264367814,0.6253902185223725,0.35557038025350235,0.6853975344586273,0.7338633116744461,none
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,stream1-down,2,32.79585310487371,nan,nan,nan,0,0,0,10.0,5.229983,0.24390725453885723,nan,9.10546875,0.2811630847029077,0.998003992015968,0.2751721876024926,0.737283758067936,0.5937444079458339,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1k,2,0.19310575616,19245.58,3.16,5.83,0,0,0,10.12,7.467772,41.925213214731755,52.064844397112765,5.328125,0.18834399431414356,0.9610636277302944,0.27850947638933504,0.41288227734956645,0.24244064661567213,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1k,2,0.06190792704,6167.93,10.28,11.29,0,0,0,4.41,3.031855,56.9878554925686,71.34421561807387,9.7734375,0.06806282722513089,0.4160377358490566,0.10178117048346055,0.14747456737509307,0.08747202217081224,none
|
||||||
|
3proxy-devel,http-ka-1k,2,0.17414750208000002,17360.46,3.59,6.16,0,0,0,10.11,7.5113199999999996,46.443387952154076,57.65808924171913,9.64453125,0.1690844233055886,0.9601139601139601,0.2596491228070175,0.37481763577097954,0.21103923831677388,proxy
|
||||||
|
3proxy-devel-s,http-ka-1k,2,0.13874757631999998,13830.61,4.32,10.06,0,0,0,10.1,7.905252,58.23525148550862,72.30192136987085,9.77734375,0.14448940728398,0.9591642924976258,0.21398914084956883,0.31394659783486856,0.20249958826286457,proxy
|
||||||
|
nginx,http-ka-1k,2,0.37354471424,36534.88,1.67,2.59,0,0,0,10.11,6.817792,21.652026361704888,27.397854241247455,31.984375,0.23551847437425508,0.9610266159695817,0.425645872715816,0.591746976997383,0.3498530274178688,proxy
|
||||||
|
haproxy,http-ka-1k,2,0.37463523328,37343.11,1.6,2.56,0,0,0,10.1,7.0220910000000005,21.567645758403774,26.77936980983996,32.0625,0.22820390662220105,0.9609895337773549,0.4024352169840774,0.5850687732766127,0.3241671225153865,proxy
|
||||||
|
direct,http-ka-1k,2,1.34393888768,131447.97,0.464,0.8280000000000001,0,0,0,8.27,0.0,4.92284289162954,6.229215548182267,0.0,0.5882798686537004,0.827,0.9594423320659062,1.7134239544062406,0.8396328062725547,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1k,2,0.14663286784000001,14614.1,4.07,8.41,0,0,0,10.07,7.836468999999999,54.939933445142664,68.22816800254755,5.46875,0.15499643959173987,0.959047619047619,0.22573435504469988,0.33298171555015793,0.18823815787075818,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1m,2,5.7926693683199995,690.24,22.59,50.97,0,0,0,10.01,6.263898,1.382436919979518,1449.0445859872611,14.0703125,0.25708164722685073,0.9515209125475285,0.05943724312361682,0.5565685981319265,0.049436068741999364,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1m,2,12.28360646656,1464.4,10.76,13.16,0,0,0,8.28,5.305255,0.5392553089381932,564.7251398172145,16.0859375,0.24982256919801277,0.7774647887323943,0.11619166927654244,0.7639679990621957,0.09127157422851138,none
|
||||||
|
3proxy-devel,http-ka-1m,2,18.4683593728,2200.14,6.99,14.63,0,0,0,10.03,6.945708000000001,0.43447281039038366,455.32958053386596,16.44921875,0.3606403013182674,0.9525166191832859,0.15324349733625822,1.125470054947697,0.13974994262108514,client
|
||||||
|
3proxy-devel-s,http-ka-1m,2,25.08260900864,2993.0,5.07,11.01,0,0,0,10.02,6.269207000000001,0.3195839793714758,334.45709135818953,16.375,0.45086024039594624,0.9515669515669516,0.2076059850374065,1.5060664790437657,0.15585024003804937,client
|
||||||
|
nginx,http-ka-1m,2,5.770691215359999,687.66,22.14,33.24,0,0,0,10.0,6.2515019999999994,1.386315729163638,1453.0659691950013,44.62109375,0.248565965583174,0.9514747859181731,0.058341217281614635,0.5469670989643747,0.03612232881070914,proxy
|
||||||
|
haproxy,http-ka-1m,2,7.55914244096,897.6,19.52,26.08,0,0,0,10.09,5.342491,1.0678459974852474,1113.0722559293988,45.265625,0.35175751400916966,0.9582146248812915,0.07000946073793755,0.8571238353168774,0.049433855788615914,proxy
|
||||||
|
direct,http-ka-1m,2,68.2899800064,8135.22,1.36,2.52,0,0,0,6.22,0.0,0.07286574105796573,76.37712124561016,0.0,0.9457917261055635,0.6027131782945736,0.5558685446009389,3.5569066191599092,0.4276846374703534,client
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-ka-1m,2,27.23009265664,3246.22,4.69,10.01,0,0,0,10.0,6.150595,0.2937926102887945,307.5787401574803,14.9140625,0.4767962308598351,0.9523809523809523,0.2260761845772685,1.60782723791093,0.15016149713022064,client
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-ka-50k-2000,2,3.04607133696,7401.59,55.49,127.73,0,156,0,10.43,6.952964000000001,2.739266115916829,139.966182667275,186.984375,0.21029029974038235,0.9895635673624289,0.17494463777285668,0.42908503204486165,0.11313894277477532,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-ka-50k-2000,2,4.24404844544,10314.79,44.85,83.59,0,340,0,10.48,7.356861,1.975472266111419,100.9643638185339,163.07421875,0.19290780141843972,0.9961977186311787,0.23137626262626262,0.4899881292691311,0.15401082853641726,proxy
|
||||||
|
3proxy-devel,http-ka-50k-2000,2,4.44545892352,10804.25,44.97,91.56,0,259,0,10.47,7.481303,1.8841699235335014,96.33078168703076,153.4453125,0.19966840360018948,0.9961941008563273,0.2383192223267482,0.5032929194218212,0.1597193318527747,proxy
|
||||||
|
3proxy-devel-s,http-ka-50k-2000,2,3.75155326976,9117.77,53.89,123.67,0,273,0,10.48,7.666092,2.234807664222865,114.1587329252086,160.36328125,0.17714014702395067,0.9961977186311787,0.21087366436203644,0.43956600531979256,0.12835740140699384,proxy
|
||||||
|
nginx,http-ka-50k-2000,2,3.7748736,9170.06,128.05,170.86,0,149,0,10.16,6.959331000000001,2.1531846788194446,110.05676155812644,117.90625,0.19673295454545456,0.9676190476190476,0.18250710451531418,0.4328918916871282,0.12265368734492328,proxy
|
||||||
|
haproxy,http-ka-50k-2000,2,3.1594853171199997,7574.99,250.12,655.86,0,0,0,10.12,5.9886479999999995,2.5624426725868865,132.74742572309307,178.28125,0.24488338886244645,0.9628924833491912,0.16421645292461684,0.5042265728118315,0.09697061395084475,proxy
|
||||||
|
direct,http-ka-50k-2000,2,35.30463117312,85685.01,21.27,36.67,0,0,0,8.62,0.0,0.19532848158602004,9.979369794693568,0.0,0.8780429594272077,0.8509378084896347,0.9493670886075949,2.881269048940997,0.7601708550679486,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-ka-50k-2000,2,3.7587674726399998,9135.22,60.3,138.02,0,213,0,10.47,7.323282,2.2283900403440096,113.84023224712138,89.19140625,0.19254365266635207,0.9952471482889734,0.21062558943728388,0.44430267293857023,0.1321569527241605,proxy
|
||||||
|
3proxy-0.9.4-s0-ocTCP_NODELAY-osTCP_NODELAY,http-close-1k,2,0.049492787200000006,4857.78,12.72,22.24,0,0,0,10.02,6.936956,161.96299407441737,205.96517914037287,17.265625,0.14106211474632527,0.9524714828897338,0.16012759170653906,0.2816279185193257,0.08177031679065315,proxy
|
||||||
|
3proxy-1.0.1-ocTCP_NODELAY-osTCP_NODELAY,http-close-1k,2,0.04076863488,3999.48,15.26,26.26,0,0,0,10.01,7.335698,196.42551249437372,249.87518721917124,22.41015625,0.12088172552737615,0.9515209125475285,0.14326647564469913,0.240705565907949,0.07032923750437718,proxy
|
||||||
|
3proxy-devel,http-close-1k,2,0.04898947072,4813.56,12.47,22.45,0,0,0,10.03,7.012631,163.79029783484052,207.97909841164517,57.1015625,0.13994307400379508,0.9525166191832859,0.1618349792927684,0.2854371070108317,0.08176458934385525,proxy
|
||||||
|
3proxy-devel-s,http-close-1k,2,0.0457179136,4486.2,13.4,23.73,0,0,0,10.02,7.100395,175.33608532826835,223.09798944626277,43.3046875,0.13423616060822047,0.9524714828897338,0.15428571428571428,0.2702042939891719,0.07511191663704278,proxy
|
||||||
|
nginx,http-close-1k,2,0.13925089280000003,13675.06,4.51,6.4,0,0,0,10.02,5.443326000000001,57.56516054452183,73.18355780186391,31.19921875,0.3175355450236967,0.9515669515669516,0.1783644558918223,0.6915439272144824,0.1549395985775604,proxy
|
||||||
|
haproxy,http-close-1k,2,0.15376318464,15099.95,3.88,5.8,0,0,0,10.11,5.723803,52.600367369706426,66.29160437485247,31.42578125,0.32397048321828137,0.9610266159695817,0.1992950977250881,0.7411587259582854,0.1711375145721106,proxy
|
||||||
|
direct,http-close-1k,2,0.5313344307200001,52176.86,0.801,4.19,0,0,0,8.55,0.0,12.873248192727246,16.224493862207556,0.0,0.7426470588235294,0.8841778697001034,0.9006750241080038,2.0493023589890185,0.581545963141801,origin
|
||||||
|
3proxy-0.9.4-ocTCP_NODELAY-osTCP_NODELAY,http-close-1k,2,0.04479516672,4395.49,14.03,24.39,0,0,0,10.08,7.067226000000001,180.0194215238764,228.91402098378526,17.19921875,0.13733396584440227,0.9581749049429658,0.15014344915524386,0.27021049078751624,0.07510797345845058,proxy
|
||||||
|
169
bench/report.py
Normal file
169
bench/report.py
Normal file
@ -0,0 +1,169 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Markdown tables from a bench.py CSV: throughput, the proxy's CPU per unit
|
||||||
|
of work, and its peak memory, a scenario per row and a proxy per column, each
|
||||||
|
cell the median of the repetitions.
|
||||||
|
|
||||||
|
Proxies given with --splice (those using splice()) form a group of their own
|
||||||
|
after the others, the two separated by a ‖ column. The best proxy of each
|
||||||
|
group in each row is in bold, and so is any other of the group whose
|
||||||
|
repetitions overlap the best one's (the range of the repetitions stands for
|
||||||
|
the error): the measurement cannot tell them apart. "direct", no proxy, comes
|
||||||
|
first and is not ranked.
|
||||||
|
A value marked ‡ was limited by the client or the origin rather than by the
|
||||||
|
proxy (most of its repetitions were), so the proxy can do at least that much.
|
||||||
|
|
||||||
|
bench/report.py bench/results/20261011-155353.csv > tables.md
|
||||||
|
|
||||||
|
Several CSVs make one set of tables: a proxy is taken from the first file it
|
||||||
|
appears in, so a later run can add proxies, and a proxy it repeats (run again
|
||||||
|
to see how much the conditions moved between the runs) is left out.
|
||||||
|
|
||||||
|
--label old=new renames a column, e.g. --label 3proxy-devel-s="devel, splice".
|
||||||
|
"""
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import csv
|
||||||
|
import statistics
|
||||||
|
|
||||||
|
STREAM = ("stream1", "stream1-down", "stream16")
|
||||||
|
|
||||||
|
|
||||||
|
def values(rows, key):
|
||||||
|
xs = []
|
||||||
|
for r in rows:
|
||||||
|
try:
|
||||||
|
x = float(r[key])
|
||||||
|
except (KeyError, ValueError):
|
||||||
|
continue
|
||||||
|
if x == x:
|
||||||
|
xs.append(x)
|
||||||
|
return xs
|
||||||
|
|
||||||
|
|
||||||
|
def median(rows, key):
|
||||||
|
xs = values(rows, key)
|
||||||
|
return statistics.median(xs) if xs else None
|
||||||
|
|
||||||
|
|
||||||
|
def winners(by, scenario, proxies, key, higher):
|
||||||
|
"""Proxies tied for best: the best median, and those whose range of
|
||||||
|
repetitions overlaps the best one's."""
|
||||||
|
ranges = {}
|
||||||
|
for p in proxies:
|
||||||
|
if p == "direct":
|
||||||
|
continue
|
||||||
|
xs = values(by.get((scenario, p), []), key)
|
||||||
|
if xs:
|
||||||
|
ranges[p] = (min(xs), statistics.median(xs), max(xs))
|
||||||
|
if not ranges:
|
||||||
|
return set()
|
||||||
|
if higher:
|
||||||
|
best = max(ranges, key=lambda p: ranges[p][1])
|
||||||
|
return {p for p, r in ranges.items() if r[2] >= ranges[best][0]}
|
||||||
|
best = min(ranges, key=lambda p: ranges[p][1])
|
||||||
|
return {p for p, r in ranges.items() if r[0] <= ranges[best][2]}
|
||||||
|
|
||||||
|
|
||||||
|
def fmt(x, digits):
|
||||||
|
if x is None:
|
||||||
|
return "–"
|
||||||
|
return f"{x:,.{digits}f}"
|
||||||
|
|
||||||
|
|
||||||
|
def table(title, scenarios, groups, labels, cell, best):
|
||||||
|
"""groups: lists of proxies, each ranked on its own, shown in order with
|
||||||
|
a separator column between them."""
|
||||||
|
head, rule = [], []
|
||||||
|
for i, g in enumerate(groups):
|
||||||
|
if i:
|
||||||
|
head.append("‖")
|
||||||
|
rule.append(":-:")
|
||||||
|
head += [labels.get(p, p) for p in g]
|
||||||
|
rule += ["---:"] * len(g)
|
||||||
|
out = [f"**{title}**", "", "| scenario | " + " | ".join(head) + " |",
|
||||||
|
"|---|" + "|".join(rule) + "|"]
|
||||||
|
for s in scenarios:
|
||||||
|
cells = []
|
||||||
|
for i, g in enumerate(groups):
|
||||||
|
if i:
|
||||||
|
cells.append("‖")
|
||||||
|
win = best(s, g)
|
||||||
|
cells += [f"**{cell(s, p)}**" if p in win else cell(s, p) for p in g]
|
||||||
|
out.append(f"| {s} | " + " | ".join(cells) + " |")
|
||||||
|
return "\n".join(out) + "\n"
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
ap = argparse.ArgumentParser()
|
||||||
|
ap.add_argument("csv", nargs="+")
|
||||||
|
ap.add_argument("--label", action="append", default=[], help="old=new")
|
||||||
|
ap.add_argument("--title", default="")
|
||||||
|
ap.add_argument("--splice", action="append", default=[],
|
||||||
|
help="a proxy (as named in the CSV) using splice(); repeat")
|
||||||
|
args = ap.parse_args()
|
||||||
|
labels = dict(l.split("=", 1) for l in args.label)
|
||||||
|
|
||||||
|
rows, seen = [], set()
|
||||||
|
for path in args.csv:
|
||||||
|
new = list(csv.DictReader(open(path)))
|
||||||
|
rows += [r for r in new if r["proxy"] not in seen]
|
||||||
|
seen |= {r["proxy"] for r in new}
|
||||||
|
proxies, scenarios = [], []
|
||||||
|
for r in rows:
|
||||||
|
if r["proxy"] not in proxies:
|
||||||
|
proxies.append(r["proxy"])
|
||||||
|
if r["scenario"] not in scenarios:
|
||||||
|
scenarios.append(r["scenario"])
|
||||||
|
by = {}
|
||||||
|
for r in rows:
|
||||||
|
by.setdefault((r["scenario"], r["proxy"]), []).append(r)
|
||||||
|
|
||||||
|
def limited(s, p):
|
||||||
|
if p == "direct":
|
||||||
|
return ""
|
||||||
|
bounds = [r.get("bound", "") for r in by.get((s, p), [])]
|
||||||
|
other = sum(b in ("client", "origin") for b in bounds)
|
||||||
|
return " ‡" if bounds and other * 2 > len(bounds) else ""
|
||||||
|
|
||||||
|
def throughput(s, p):
|
||||||
|
sel = by.get((s, p), [])
|
||||||
|
g = median(sel, "gbit")
|
||||||
|
if s in STREAM:
|
||||||
|
return fmt(g, 1) + limited(s, p)
|
||||||
|
rate = median(sel, "rate")
|
||||||
|
return f"{fmt(g, 2)} ({fmt(rate / 1000 if rate else None, 1)}k/s)" + limited(s, p)
|
||||||
|
|
||||||
|
def cpu(s, p):
|
||||||
|
sel = by.get((s, p), [])
|
||||||
|
if p == "direct":
|
||||||
|
return "–"
|
||||||
|
if s in STREAM or s in ("http-ka-1m", "http-ka-50k-2000"):
|
||||||
|
return fmt(median(sel, "cpu_s_per_gb"), 2) + " s/GB"
|
||||||
|
return fmt(median(sel, "cpu_us_per_req"), 0) + " µs/req"
|
||||||
|
|
||||||
|
def peak(s, p):
|
||||||
|
if p == "direct":
|
||||||
|
return "–"
|
||||||
|
return fmt(median(by.get((s, p), []), "peak_mb"), 0)
|
||||||
|
|
||||||
|
def cpukey(s):
|
||||||
|
return "cpu_s_per_gb" if s in STREAM or s in ("http-ka-1m", "http-ka-50k-2000") \
|
||||||
|
else "cpu_us_per_req"
|
||||||
|
|
||||||
|
plain = [p for p in proxies if p != "direct" and p not in args.splice]
|
||||||
|
spliced = [p for p in proxies if p in args.splice]
|
||||||
|
groups = [g for g in ([p for p in proxies if p == "direct"], plain, spliced) if g]
|
||||||
|
|
||||||
|
prefix = f"{args.title}: " if args.title else ""
|
||||||
|
print(table(prefix + "throughput, Gbit/s (thousands of requests per second for HTTP)",
|
||||||
|
scenarios, groups, labels, throughput,
|
||||||
|
lambda s, g: winners(by, s, g, "gbit", True)))
|
||||||
|
print(table(prefix + "proxy CPU time per gigabyte or per request",
|
||||||
|
scenarios, groups, labels, cpu,
|
||||||
|
lambda s, g: winners(by, s, g, cpukey(s), False)))
|
||||||
|
print(table(prefix + "proxy peak memory, MB", scenarios, groups, labels, peak,
|
||||||
|
lambda s, g: winners(by, s, g, "peak_mb", False)))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
@ -669,8 +669,8 @@ tcppm -s 8080 192.168.1.1 80
|
|||||||
-s0 turns it off explicitly. In builds without it (CMake option 3PROXY_USE_SPLICE=OFF,
|
-s0 turns it off explicitly. In builds without it (CMake option 3PROXY_USE_SPLICE=OFF,
|
||||||
or -DWITHSPLICE removed from the Makefile) -s is accepted and ignored.
|
or -DWITHSPLICE removed from the Makefile) -s is accepted and ignored.
|
||||||
<p>splice() pays off when most of the traffic is large transfers: in the
|
<p>splice() pays off when most of the traffic is large transfers: in the
|
||||||
<a href="https://github.com/3proxy/3proxy/tree/master/bench">benchmarks</a> it moved
|
<a href="https://github.com/3proxy/3proxy/blob/master/bench/RESULTS.md">benchmarks</a> it moved
|
||||||
1.4 to 1.7 times more data than the read/write path at about half the CPU per gigabyte.
|
1.3 to 2.1 times more data than the read/write path at 40-55% less CPU per gigabyte.
|
||||||
It does not help small requests and short connections, which go slower with it, and
|
It does not help small requests and short connections, which go slower with it, and
|
||||||
every spliced connection needs two more pipes (file descriptors) and more kernel
|
every spliced connection needs two more pipes (file descriptors) and more kernel
|
||||||
buffer memory. Data filters are not applied to spliced data.
|
buffer memory. Data filters are not applied to spliced data.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user