diff --git a/docs/ideas-filesystems.txt b/docs/_not_used/ext4-ideas.txt similarity index 100% rename from docs/ideas-filesystems.txt rename to docs/_not_used/ext4-ideas.txt diff --git a/docs/http_benchmark.md b/docs/http_benchmark.md new file mode 100644 index 0000000..ecb5eac --- /dev/null +++ b/docs/http_benchmark.md @@ -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. diff --git a/docs/kernel-ideas.txt b/docs/kernel-ideas.txt index 1b42d85..9310a2f 100644 --- a/docs/kernel-ideas.txt +++ b/docs/kernel-ideas.txt @@ -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 diff --git a/docs/nginx-ideas.txt b/docs/nginx-ideas.txt index a88ccf9..f9f2ced 100644 --- a/docs/nginx-ideas.txt +++ b/docs/nginx-ideas.txt @@ -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; -} - - diff --git a/init-server.py b/init-server.py index 6f31558..cd6df69 100755 --- a/init-server.py +++ b/init-server.py @@ -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/') diff --git a/scripts/http_host/benchmark/command.txt b/scripts/http_host/benchmark/command.txt deleted file mode 100644 index e218ffe..0000000 --- a/scripts/http_host/benchmark/command.txt +++ /dev/null @@ -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 - diff --git a/scripts/http_host/benchmark/wrk_custom_list.lua b/scripts/http_host/benchmark/wrk_custom_list.lua index 8869ffc..cb1470d 100644 --- a/scripts/http_host/benchmark/wrk_custom_list.lua +++ b/scripts/http_host/benchmark/wrk_custom_list.lua @@ -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() diff --git a/scripts/http_host/benchmark/wrk_usage.txt b/scripts/http_host/benchmark/wrk_usage.txt new file mode 100644 index 0000000..0e11d25 --- /dev/null +++ b/scripts/http_host/benchmark/wrk_usage.txt @@ -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 + + + + diff --git a/ssh_lib/benchmark.py b/ssh_lib/benchmark.py index 8df7e62..75dd6fc 100644 --- a/ssh_lib/benchmark.py +++ b/ssh_lib/benchmark.py @@ -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