aboutsummaryrefslogtreecommitdiffstats
path: root/research/experiments/024-finding-items/micro.py
diff options
context:
space:
mode:
Diffstat (limited to 'research/experiments/024-finding-items/micro.py')
-rw-r--r--research/experiments/024-finding-items/micro.py26
1 files changed, 26 insertions, 0 deletions
diff --git a/research/experiments/024-finding-items/micro.py b/research/experiments/024-finding-items/micro.py
new file mode 100644
index 0000000..1e80a9e
--- /dev/null
+++ b/research/experiments/024-finding-items/micro.py
@@ -0,0 +1,26 @@
+#!/usr/bin/env python3
+"""bench-seek before and after prefetch.patch, taking turns five times, lists of 100,000 and 400,000 items:
+the median ns of each way and the spread (slowest over fastest), and the load average when it began and ended.
+
+ micro.py DIRECTORY (holding bench-before and bench-after)"""
+import os
+import statistics
+import subprocess
+import sys
+from pathlib import Path
+
+here = Path(sys.argv[1])
+ways = ['seek', 'seek+3 reads', 'seek+3 reads+3 changes', 'same, a share each 30']
+print('load average at the start:', os.getloadavg())
+for items in (100000, 400000):
+ runs = {'before': [], 'after': []}
+ for _ in range(5):
+ for version in runs:
+ out = subprocess.run([here / f'bench-{version}', str(items), '1500000'], capture_output=True, text=True,
+ check=True).stdout.splitlines()[:4]
+ runs[version].append([float(line.split()[-2]) for line in out])
+ for version, measured in runs.items():
+ medians = [statistics.median(m[i] for m in measured) for i in range(4)]
+ spreads = [max(m[i] for m in measured) / min(m[i] for m in measured) for i in range(4)]
+ print(f'{items:>7} {version:<6} ' + ' '.join(f'{w}: {m:.1f} ns (x{s:.2f})' for w, m, s in zip(ways, medians, spreads)))
+print('load average at the end:', os.getloadavg())