diff options
Diffstat (limited to 'tools')
-rwxr-xr-x | tools/benchmark.py | 2 | ||||
-rwxr-xr-x | tools/http_benchmark.py | 49 | ||||
-rw-r--r-- | tools/node_http.js | 8 | ||||
-rw-r--r-- | tools/testdata/wrk1.txt | 9 | ||||
-rw-r--r-- | tools/util.py | 8 | ||||
-rw-r--r-- | tools/util_test.py | 8 |
6 files changed, 84 insertions, 0 deletions
diff --git a/tools/benchmark.py b/tools/benchmark.py index 4422764aa..856ee3c85 100755 --- a/tools/benchmark.py +++ b/tools/benchmark.py @@ -14,6 +14,7 @@ from util import run, run_output, root_path, build_path, executable_suffix import tempfile import http_server import throughput_benchmark +from http_benchmark import http_benchmark # The list of the tuples of the benchmark name and arguments exec_time_benchmarks = [ @@ -183,6 +184,7 @@ def main(argv): # pipe. if os.name != 'nt': new_data["throughput"] = run_throughput(deno_path) + new_data["req_per_sec"] = http_benchmark(deno_path) if "linux" in sys.platform: # Thread count test, only on linux new_data["thread_count"] = run_thread_count_benchmark(deno_path) diff --git a/tools/http_benchmark.py b/tools/http_benchmark.py new file mode 100755 index 000000000..0cfdc988c --- /dev/null +++ b/tools/http_benchmark.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python + +import os +import sys +import util +import time +import subprocess + +ADDR = "127.0.0.1:4544" +DURATION = "10s" + + +def http_benchmark(deno_exe): + deno_cmd = [deno_exe, "--allow-net", "tests/http_bench.ts", ADDR] + node_cmd = ["node", "tools/node_http.js", ADDR.split(":")[1]] + + print "http_benchmark testing DENO." + deno_rps = run(deno_cmd) + + print "http_benchmark testing NODE." + node_rps = run(node_cmd) + + return {"deno": deno_rps, "node": node_rps} + + +def run(server_cmd): + # Run deno echo server in the background. + server = subprocess.Popen(server_cmd) + time.sleep(5) # wait for server to wake up. TODO racy. + wrk_platform = { + "linux2": "linux", + "darwin": "mac", + }[sys.platform] + try: + cmd = "third_party/wrk/" + wrk_platform + "/wrk -d " + DURATION + " http://" + ADDR + "/" + print cmd + output = subprocess.check_output(cmd, shell=True) + req_per_sec = util.parse_wrk_output(output) + print output + return req_per_sec + finally: + server.kill() + + +if __name__ == '__main__': + if len(sys.argv) < 2: + print "Usage ./tools/tcp_http_benchmark.py out/debug/deno" + sys.exit(1) + http_benchmark(sys.argv[1]) diff --git a/tools/node_http.js b/tools/node_http.js new file mode 100644 index 000000000..dbe9de81a --- /dev/null +++ b/tools/node_http.js @@ -0,0 +1,8 @@ +const http = require("http"); +const port = process.argv[2] || "4544"; +console.log("port", port); +http + .Server((req, res) => { + res.end("Hello World\n"); + }) + .listen(port); diff --git a/tools/testdata/wrk1.txt b/tools/testdata/wrk1.txt new file mode 100644 index 000000000..d31d1e6fe --- /dev/null +++ b/tools/testdata/wrk1.txt @@ -0,0 +1,9 @@ +Running 10s test @ http://127.0.0.1:4500/ + 2 threads and 10 connections + Thread Stats Avg Stdev Max +/- Stdev + Latency 5.08ms 1.37ms 34.96ms 96.63% + Req/Sec 0.92k 51.83 1.00k 78.50% + 18381 requests in 10.00s, 0.89MB read + Socket errors: connect 0, read 18381, write 0, timeout 0 +Requests/sec: 1837.86 +Transfer/sec: 91.53KB diff --git a/tools/util.py b/tools/util.py index 2620e706f..10b6b9c6f 100644 --- a/tools/util.py +++ b/tools/util.py @@ -324,3 +324,11 @@ def extract_number(pattern, string): if len(matches) != 1: return None return int(matches[0]) + + +def parse_wrk_output(output): + req_per_sec = None + for line in output.split("\n"): + if req_per_sec is None: + req_per_sec = extract_number(r'Requests/sec:\s+(\d+)', line) + return req_per_sec diff --git a/tools/util_test.py b/tools/util_test.py index 4adf0d658..24fd2eba1 100644 --- a/tools/util_test.py +++ b/tools/util_test.py @@ -78,11 +78,19 @@ def parse_unit_test_output_test(): assert expected == None +def parse_wrk_output_test(): + print "Testing util.parse_wrk_output_test()..." + f = open(os.path.join(util.root_path, "tools/testdata/wrk1.txt")) + req_per_sec = util.parse_wrk_output(f.read()) + assert req_per_sec == 1837 + + def util_test(): pattern_match_test() parse_exit_code_test() shell_quote_win_test() parse_unit_test_output_test() + parse_wrk_output_test() if __name__ == '__main__': |