From 9a6cfd653d74ab23d9415e6ce67da22badb8101e Mon Sep 17 00:00:00 2001 From: Kurt Mackey Date: Thu, 6 Jun 2019 21:46:18 -0500 Subject: add tcp proxy benchmarks + split out website section for proxy req/s (#2464) --- website/app.js | 31 ++++++++++++ website/benchmarks.html | 130 ++++++++++++++++++++++++++++++++++++------------ 2 files changed, 130 insertions(+), 31 deletions(-) (limited to 'website') diff --git a/website/app.js b/website/app.js index 23618274b..9f16e8e45 100644 --- a/website/app.js +++ b/website/app.js @@ -42,6 +42,10 @@ export function createThroughputColumns(data) { return createColumns(data, "throughput"); } +export function createProxyColumns(data) { + return createColumns(data, "req_per_sec_proxy"); +} + export function createReqPerSecColumns(data) { return createColumns(data, "req_per_sec"); } @@ -197,15 +201,41 @@ export function drawCharts(dataUrl) { return drawChartsFromBenchmarkData(dataUrl); } +const proxyFields = [ + "req_per_sec" + //"max_latency" +]; +function extractProxyFields(data) { + for (const row of data) { + for (const field of proxyFields) { + const d = row[field]; + if (!d) continue; + const name = field + "_proxy"; + const newField = {}; + row[name] = newField; + for (const k of Object.getOwnPropertyNames(d)) { + if (k.includes("_proxy")) { + const v = d[k]; + delete d[k]; + newField[k] = v; + } + } + } + } +} /** * Draws the charts from the benchmark data stored in gh-pages branch. */ export async function drawChartsFromBenchmarkData(dataUrl) { const data = await getJson(dataUrl); + // hack to extract proxy fields from req/s fields + extractProxyFields(data); + const execTimeColumns = createExecTimeColumns(data); const throughputColumns = createThroughputColumns(data); const reqPerSecColumns = createReqPerSecColumns(data); + const proxyColumns = createProxyColumns(data); const maxLatencyColumns = createMaxLatencyColumns(data); const maxMemoryColumns = createMaxMemoryColumns(data); const binarySizeColumns = createBinarySizeColumns(data); @@ -235,6 +265,7 @@ export async function drawChartsFromBenchmarkData(dataUrl) { gen("#exec-time-chart", execTimeColumns, "seconds", logScale); gen("#throughput-chart", throughputColumns, "seconds", logScale); gen("#req-per-sec-chart", reqPerSecColumns, "1000 req/sec", formatReqSec); + gen("#proxy-req-per-sec-chart", proxyColumns, "req/sec"); gen("#max-latency-chart", maxLatencyColumns, "milliseconds", logScale); gen("#max-memory-chart", maxMemoryColumns, "megabytes", formatMB); gen("#binary-size-chart", binarySizeColumns, "megabytes", formatMB); diff --git a/website/benchmarks.html b/website/benchmarks.html index a307fcdad..fa1b140e9 100644 --- a/website/benchmarks.html +++ b/website/benchmarks.html @@ -3,17 +3,18 @@ Deno Benchmarks - +
-
` +
+ `
- +

Deno Continuous Benchmarks

@@ -21,7 +22,10 @@ master branch.

-

Make sure your adblocker is disabled as some can block the chart rendering.

+

+ Make sure your adblocker is disabled as some can block the chart + rendering. +

recent data

all data (takes a moment to load)

@@ -37,41 +41,53 @@
  • deno_tcp + >deno_tcp is a fake http server that doesn't parse HTTP. It is comparable to node_tcp + >node_tcp .
  • deno_http + >deno_http is a web server written in TypeScript. It is comparable to node_http + >node_http .
  • -
  • deno_core_single and deno_core_multi are two versions of - a minimal fake HTTP server. It blindly reads and writes fixed HTTP - packets. It is comparable to deno_tcp and node_tcp. - This is a standalone executable that uses the deno rust crate. The +
  • + deno_core_single and deno_core_multi are two versions of a minimal + fake HTTP server. It blindly reads and writes fixed HTTP packets. It + is comparable to deno_tcp and node_tcp. This is a standalone + executable that uses + the deno rust crate. The code is in http_bench.rs + >http_bench.rs and http_bench.js. single uses tokio::runtime::current_thread - and multi uses tokio::runtime::threadpool. + >http_bench.js. single uses + tokio::runtime::current_thread + and multi uses + tokio::runtime::threadpool.
  • @@ -86,10 +102,60 @@
    +

    + Proxy Req/Sec # +

    + +

    + Tests proxy performance. 10 keep-alive connections do as many + hello-world requests as possible. Bigger is better. +

    + +
      +
    • + deno_proxy_tcp + is a fake tcp proxy server that doesn't parse HTTP. It is comparable + to + node_proxy_tcp + . +
    • + +
    • + deno_proxy + is an HTTP proxy server written in TypeScript. It is comparable to + node_proxy + . +
    • + +
    • + + hyper + + is a Rust HTTP server used as the origin for the proxy tests +
    • +
    + +
    +

    Max Latency #

    - Max latency during the same test used above for requests/second. Smaller is better. + Max latency during the same test used above for requests/second. Smaller + is better.

    @@ -101,8 +167,8 @@ - tests/002_hello.ts - , + tests/002_hello.ts , tests/003_relative_import.ts import { drawCharts } from "./app.js"; window.chartWidth = 800; - const overlay = document.getElementById("spinner-overlay") + const overlay = document.getElementById("spinner-overlay"); - function showSpinner () { + function showSpinner() { overlay.style.display = "block"; } - function hideSpinner () { + function hideSpinner() { overlay.style.display = "none"; } - function updateCharts () { - const u = window.location.hash.match("all") ? "./data.json" : "recent.json"; + function updateCharts() { + const u = window.location.hash.match("all") + ? "./data.json" + : "recent.json"; + + showSpinner(); - showSpinner() - - drawCharts(u).finally(hideSpinner) + drawCharts(u).finally(hideSpinner); } - updateCharts() + updateCharts(); - window.onhashchange = updateCharts + window.onhashchange = updateCharts; -- cgit v1.2.3