ds: add osu fast generators
This commit is contained in:
parent
ed932c9921
commit
1d015c7e1e
@ -10,4 +10,9 @@
|
|||||||
std = {
|
std = {
|
||||||
timetable = callPackage ./std/timetable.nix {};
|
timetable = callPackage ./std/timetable.nix {};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
osu = {
|
||||||
|
latency = callPackage ./osu/latency.nix {};
|
||||||
|
bw = callPackage ./osu/bw.nix {};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
23
garlic/ds/osu/bw.nix
Normal file
23
garlic/ds/osu/bw.nix
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
stdenv
|
||||||
|
, python3
|
||||||
|
, gzip
|
||||||
|
}:
|
||||||
|
|
||||||
|
resultTree:
|
||||||
|
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
name = "osu-bw.json.gz";
|
||||||
|
preferLocalBuild = true;
|
||||||
|
src = ./bw.py;
|
||||||
|
phases = [ "unpackPhase" "installPhase" ];
|
||||||
|
|
||||||
|
unpackPhase = ''
|
||||||
|
cp $src bw.py
|
||||||
|
'';
|
||||||
|
|
||||||
|
buildInputs = [ python3 gzip ];
|
||||||
|
installPhase = ''
|
||||||
|
python bw.py ${resultTree} | gzip > $out
|
||||||
|
'';
|
||||||
|
}
|
64
garlic/ds/osu/bw.py
Normal file
64
garlic/ds/osu/bw.py
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
import json, re, sys, os, glob
|
||||||
|
from os import path
|
||||||
|
|
||||||
|
def eprint(*args, **kwargs):
|
||||||
|
print(*args, file=sys.stderr, flush=True, **kwargs)
|
||||||
|
|
||||||
|
def process_run(tree, runPath):
|
||||||
|
with open("stdout.log", "r") as f:
|
||||||
|
lines = [line.strip() for line in f.readlines()]
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
|
||||||
|
if not re.match('^[0-9]+ *[0-9\.]+$', line):
|
||||||
|
continue
|
||||||
|
|
||||||
|
slices = line.split()
|
||||||
|
size = slices[0]
|
||||||
|
bw = slices[1]
|
||||||
|
|
||||||
|
tree['size'] = int(size)
|
||||||
|
tree['bw'] = float(bw)
|
||||||
|
print(json.dumps(tree))
|
||||||
|
|
||||||
|
def process_result_tree(resultTree):
|
||||||
|
|
||||||
|
eprint("processing resultTree: " + resultTree)
|
||||||
|
|
||||||
|
os.chdir(resultTree)
|
||||||
|
|
||||||
|
experiments = glob.glob(resultTree + "/*-experiment")
|
||||||
|
|
||||||
|
for exp in glob.glob("*-experiment"):
|
||||||
|
eprint("found experiment: " + exp)
|
||||||
|
expPath = path.join(resultTree, exp)
|
||||||
|
os.chdir(expPath)
|
||||||
|
|
||||||
|
for unit in glob.glob("*-unit"):
|
||||||
|
eprint("found unit: " + unit)
|
||||||
|
unitPath = path.join(resultTree, exp, unit)
|
||||||
|
os.chdir(unitPath)
|
||||||
|
|
||||||
|
with open('garlic_config.json') as json_file:
|
||||||
|
garlic_conf = json.load(json_file)
|
||||||
|
|
||||||
|
tree = {"exp":exp, "unit":unit, "config":garlic_conf}
|
||||||
|
|
||||||
|
for i in range(garlic_conf['loops']):
|
||||||
|
run = str(i + 1)
|
||||||
|
runPath = path.join(resultTree, exp, unit, run)
|
||||||
|
if path.isdir(runPath) == False:
|
||||||
|
eprint("missing run {}, aborting".format(run))
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
tree["run"] = run
|
||||||
|
os.chdir(runPath)
|
||||||
|
|
||||||
|
process_run(tree, runPath)
|
||||||
|
|
||||||
|
|
||||||
|
if len(sys.argv) != 2:
|
||||||
|
eprint("usage: python {} <resultTree>".format(argv[0]))
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
process_result_tree(sys.argv[1])
|
23
garlic/ds/osu/latency.nix
Normal file
23
garlic/ds/osu/latency.nix
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
stdenv
|
||||||
|
, python3
|
||||||
|
, gzip
|
||||||
|
}:
|
||||||
|
|
||||||
|
resultTree:
|
||||||
|
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
name = "osu-latency.json.gz";
|
||||||
|
preferLocalBuild = true;
|
||||||
|
src = ./latency.py;
|
||||||
|
phases = [ "unpackPhase" "installPhase" ];
|
||||||
|
|
||||||
|
unpackPhase = ''
|
||||||
|
cp $src latency.py
|
||||||
|
'';
|
||||||
|
|
||||||
|
buildInputs = [ python3 gzip ];
|
||||||
|
installPhase = ''
|
||||||
|
python latency.py ${resultTree} | gzip > $out
|
||||||
|
'';
|
||||||
|
}
|
64
garlic/ds/osu/latency.py
Normal file
64
garlic/ds/osu/latency.py
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
import json, re, sys, os, glob
|
||||||
|
from os import path
|
||||||
|
|
||||||
|
def eprint(*args, **kwargs):
|
||||||
|
print(*args, file=sys.stderr, flush=True, **kwargs)
|
||||||
|
|
||||||
|
def process_run(tree, runPath):
|
||||||
|
with open("stdout.log", "r") as f:
|
||||||
|
lines = [line.strip() for line in f.readlines()]
|
||||||
|
|
||||||
|
for line in lines:
|
||||||
|
|
||||||
|
if not re.match('^[0-9]+ *[0-9\.]+$', line):
|
||||||
|
continue
|
||||||
|
|
||||||
|
slices = line.split()
|
||||||
|
size = slices[0]
|
||||||
|
latency = slices[1]
|
||||||
|
|
||||||
|
tree['size'] = int(size)
|
||||||
|
tree['latency'] = float(latency)
|
||||||
|
print(json.dumps(tree))
|
||||||
|
|
||||||
|
def process_result_tree(resultTree):
|
||||||
|
|
||||||
|
eprint("processing resultTree: " + resultTree)
|
||||||
|
|
||||||
|
os.chdir(resultTree)
|
||||||
|
|
||||||
|
experiments = glob.glob(resultTree + "/*-experiment")
|
||||||
|
|
||||||
|
for exp in glob.glob("*-experiment"):
|
||||||
|
eprint("found experiment: " + exp)
|
||||||
|
expPath = path.join(resultTree, exp)
|
||||||
|
os.chdir(expPath)
|
||||||
|
|
||||||
|
for unit in glob.glob("*-unit"):
|
||||||
|
eprint("found unit: " + unit)
|
||||||
|
unitPath = path.join(resultTree, exp, unit)
|
||||||
|
os.chdir(unitPath)
|
||||||
|
|
||||||
|
with open('garlic_config.json') as json_file:
|
||||||
|
garlic_conf = json.load(json_file)
|
||||||
|
|
||||||
|
tree = {"exp":exp, "unit":unit, "config":garlic_conf}
|
||||||
|
|
||||||
|
for i in range(garlic_conf['loops']):
|
||||||
|
run = str(i + 1)
|
||||||
|
runPath = path.join(resultTree, exp, unit, run)
|
||||||
|
if path.isdir(runPath) == False:
|
||||||
|
eprint("missing run {}, aborting".format(run))
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
tree["run"] = run
|
||||||
|
os.chdir(runPath)
|
||||||
|
|
||||||
|
process_run(tree, runPath)
|
||||||
|
|
||||||
|
|
||||||
|
if len(sys.argv) != 2:
|
||||||
|
eprint("usage: python {} <resultTree>".format(argv[0]))
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
process_result_tree(sys.argv[1])
|
Loading…
Reference in New Issue
Block a user