benchmark

This commit is contained in:
Zsolt Ero
2024-01-04 18:16:15 +01:00
parent 4b173ba50a
commit b09a2eded4
9 changed files with 61 additions and 33 deletions

37
docs/http_benchmark.md Normal file
View File

@@ -0,0 +1,37 @@
### wrk localhost
clean cache after nginx restart
```
service nginx restart
wrk -c10 -t4 -d60s -s /data/ofm/benchmark/wrk_custom_list.lua http://localhost
Running 1m test @ http://localhost
4 threads and 10 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 2.02ms 7.04ms 50.43ms 93.23%
Req/Sec 8.42k 2.01k 18.52k 69.79%
2871265 requests in 1.00m, 230.65GB read
Requests/sec: 47811.00
Transfer/sec: 3.84GB
```
Super much overkill, we'd only need 125 MB/s for Gigabit connection and this is 3840 MB/s.
Also max request time is super nice + no errors.
### wrk over network
```
wrk -c10 -t4 -d60s -s /data/ofm/benchmark/wrk_custom_list.lua http://x.x.x.x
Running 1m test @ http://144.76.168.195
4 threads and 10 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 7.57ms 6.61ms 45.34ms 84.32%
Req/Sec 293.85 141.33 1.18k 73.07%
71628 requests in 1.00m, 6.05GB read
Requests/sec: 1191.88
Transfer/sec: 103.01MB
```
Realistically this is the max over Gigabit connection.

View File

@@ -8,11 +8,8 @@ fs.file-max # not needed, recent Ubuntu has it on high by default
tcp_fin_timeout
TCP max buffer size
net.core.netdev_max_backlog = 262144
net.core.rmem_max = 16777216
net.core.somaxconn = 262144
net.core.wmem_max = 16777216
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_max_tw_buckets = 6000000

View File

@@ -16,6 +16,9 @@ gzip_proxied any; # no proxying
types_hash_max_size 2048; # default should be good for the default set
# not tested
client_body_buffer_size 128k;
@@ -23,21 +26,5 @@ client_max_body_size 128k;
client_header_buffer_size 1k;
large_client_header_buffers 2 1k;
# SSL optimizations
SSL Session Cache
SSL OCSP Stapling
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_prefer_server_ciphers on;
client_header_timeout 12; # default is 60
location / {
try_files $uri =404;
}

View File

@@ -6,7 +6,7 @@ from dotenv import dotenv_values
from fabric import Config, Connection
from ssh_lib import CONFIG_DIR, HTTP_HOST_BIN, OFM_DIR, REMOTE_CONFIG, SCRIPTS_DIR, TILE_GEN_BIN
from ssh_lib.benchmark import c1000k
from ssh_lib.benchmark import c1000k, wrk
from ssh_lib.kernel import kernel_tweaks_ofm
from ssh_lib.nginx import certbot, nginx
from ssh_lib.pkg_base import pkg_base, pkg_upgrade
@@ -91,7 +91,6 @@ def prepare_tile_gen(c):
def prepare_http_host(c, skip_cron: bool):
nginx(c)
certbot(c)
c1000k(c)
c.sudo('rm -rf /data/ofm/http_host/logs')
c.sudo('mkdir -p /data/ofm/http_host/logs')
@@ -130,8 +129,14 @@ def upload_certificates(c):
c.sudo('chown -R nginx:nginx /data/nginx')
def install_benchmark(c):
c1000k(c)
wrk(c)
def debug_tmp(c):
upload_https_host_files(c)
install_benchmark(c)
# upload_https_host_files(c)
# put(c, SCRIPTS_DIR / 'http_host' / 'cron.d' / 'ofm_http_host', '/etc/cron.d/')

View File

@@ -1,4 +0,0 @@
wrk -c1000 -d10s -t1 -s /data/ofm/benchmark/wrk_custom_list.lua http://localhost
# -t1 - needs to be single treaded, otherwise the urls would be read not in sequence

View File

@@ -1,10 +1,10 @@
local counter = 1
local lines = {}
local base_path = "/planet/20231208_091355/tiles/"
local file_path = "/data/ofm/benchmark/path_list_100k.txt"
local url_base = "/planet/20231221_134737_pt/" -- trailing slash
local path_list_txt = "/data/ofm/benchmark/path_list_500k.txt"
for line in io.lines(file_path) do
table.insert(lines, base_path .. line)
for line in io.lines(path_list_txt) do
table.insert(lines, url_base .. line)
end
local function getNextUrl()

View File

@@ -0,0 +1,8 @@
wrk -c10 -t4 -d10s -s /data/ofm/benchmark/wrk_custom_list.lua http://localhost
# -t1 => more correct, since the url list is loaded exactly in sequence
# -t4 => reflecting real world usage

View File

@@ -17,9 +17,7 @@ def c1000k(c):
# make sure it runs till 1 million
def benchmark(c):
def wrk(c):
apt_get_install(c, 'wrk')
c.sudo('mkdir -p /data/ofm/benchmark')
put(c, f'{SCRIPTS_DIR}/http_host/benchmark/wrk_custom_list.lua', '/data/ofm/benchmark')
# wrk -c10 -d10s -t1 -s /data/ofm/benchmark/wrk_custom_list.lua http://localhost