Skip to content

Commit

Permalink
Add RAM benchmark
Browse files Browse the repository at this point in the history
  • Loading branch information
dsseng authored and ry committed Apr 14, 2019
1 parent c7e1f8f commit d6b4379
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 0 deletions.
15 changes: 15 additions & 0 deletions tools/benchmark.py
Expand Up @@ -17,6 +17,7 @@
import throughput_benchmark
from http_benchmark import http_benchmark
import prebuilt
from permission_prompt_test import tty_capture

# The list of the tuples of the benchmark name and arguments
exec_time_benchmarks = [
Expand Down Expand Up @@ -154,6 +155,19 @@ def run_syscall_count_benchmark(deno_path):
return syscall_count_map


def find_max_mem_in_mb(out):
for row in out.split('\n'):
if 'maximum resident set size (kbytes)' in row.lower():
_, value = row.split(': ')
return int(value) / 1024


def run_max_mem_benchmark(deno_path):
cmd = ["/usr/bin/time", "-v", deno_path, "tests/002_hello.ts", "--reload"]
out = tty_capture(cmd, '')[2]
return find_max_mem_in_mb(out)


def main(argv):
if len(argv) == 2:
build_dir = sys.argv[1]
Expand Down Expand Up @@ -222,6 +236,7 @@ def main(argv):
# Thread count test, only on linux
new_data["thread_count"] = run_thread_count_benchmark(deno_path)
new_data["syscall_count"] = run_syscall_count_benchmark(deno_path)
new_data["max_memory"] = run_max_mem_benchmark(deno_path)

all_data.append(new_data)
write_json(all_data_file, all_data)
Expand Down
7 changes: 7 additions & 0 deletions tools/benchmark_test.py
Expand Up @@ -20,6 +20,12 @@ def strace_parse_test():
assert summary["total"]["calls"] == 704


def max_mem_parse_test():
with open(os.path.join(sys.path[0], "testdata/time.out"), "r") as f:
data = f.read()
assert benchmark.find_max_mem_in_mb(data) * 1024 == 120380


def binary_size_test(build_dir):
binary_size_dict = benchmark.get_binary_sizes(build_dir)
assert binary_size_dict["deno"] > 0
Expand All @@ -43,6 +49,7 @@ def syscall_count_test(deno_path):
def benchmark_test(build_dir, deno_path):
strace_parse_test()
binary_size_test(build_dir)
max_mem_parse_test()
if "linux" in sys.platform:
thread_count_test(deno_path)
syscall_count_test(deno_path)
18 changes: 18 additions & 0 deletions tools/testdata/time.out
@@ -0,0 +1,18 @@
Hello
Command being timed: "./target/debug/deno tests/003_relative_import.ts"
User time (seconds): 2.43
System time (seconds): 0.05
Percent of CPU this job got: 156%
Elapsed (wall clock) time (h:mm:ss or m:ss): 0:01.59
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 120380
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 0
Minor (reclaiming a frame) page faults: 41452
Voluntary context switches: 75
Involuntary context switches: 42
Swaps: 0
File system inputs: 0
6 changes: 6 additions & 0 deletions website/app.js
Expand Up @@ -50,6 +50,10 @@ export function createMaxLatencyColumns(data) {
return createColumns(data, "max_latency");
}

export function createMaxMemoryColumns(data) {
return createColumns(data, "max_memory");
}

export function createBinarySizeColumns(data) {
const propName = "binary_size";
const binarySizeNames = Object.keys(data[data.length - 1][propName]);
Expand Down Expand Up @@ -203,6 +207,7 @@ export async function drawChartsFromBenchmarkData(dataUrl) {
const throughputColumns = createThroughputColumns(data);
const reqPerSecColumns = createReqPerSecColumns(data);
const maxLatencyColumns = createMaxLatencyColumns(data);
const maxMemoryColumns = createMaxMemoryColumns(data);
const binarySizeColumns = createBinarySizeColumns(data);
const threadCountColumns = createThreadCountColumns(data);
const syscallCountColumns = createSyscallCountColumns(data);
Expand Down Expand Up @@ -231,6 +236,7 @@ export async function drawChartsFromBenchmarkData(dataUrl) {
gen("#throughput-chart", throughputColumns, "seconds", logScale);
gen("#req-per-sec-chart", reqPerSecColumns, "1000 req/sec", formatReqSec);
gen("#max-latency-chart", maxLatencyColumns, "milliseconds", logScale);
gen("#max-memory-chart", maxMemoryColumns, "megabytes");
gen("#binary-size-chart", binarySizeColumns, "megabytes", formatMB);
gen("#thread-count-chart", threadCountColumns, "threads");
gen("#syscall-count-chart", syscallCountColumns, "syscalls");
Expand Down
8 changes: 8 additions & 0 deletions website/benchmarks.html
Expand Up @@ -125,6 +125,14 @@ <h3 id="max-latency">Max Latency <a href="#max-latency">#</a></h3>

<div id="max-latency-chart"></div>

<h3 id="max-memory">Max Memory Usage <a href="#max-memory">#</a></h3>

<p>
Max memory usage during execution. Smaller is better.
</p>

<div id="max-memory-chart"></div>

<h3 id="size">Executable size <a href="#size">#</a></h3>
<p>deno ships only a single binary. We track its size here.</p>
<div id="binary-size-chart"></div>
Expand Down

0 comments on commit d6b4379

Please sign in to comment.