summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBirte Kristina Friesel <birte.friesel@uos.de>2025-03-17 15:45:44 +0100
committerBirte Kristina Friesel <birte.friesel@uos.de>2025-03-17 15:45:44 +0100
commit86066c849912cdc026662825ca7ed2797c789397 (patch)
tree4b0a8a9eedf810cd92171a954997c26685ef7f67
parent74803f43f64437ae98e04586e14a22c9895d24f7 (diff)
add primitive workload evaluation for non-PTA models (WiP)
-rwxr-xr-xbin/workload.py75
1 files changed, 75 insertions, 0 deletions
diff --git a/bin/workload.py b/bin/workload.py
new file mode 100755
index 0000000..d4dff10
--- /dev/null
+++ b/bin/workload.py
@@ -0,0 +1,75 @@
+#!/usr/bin/env python3
+
+import argparse
+import json
+import sys
+import dfatool.cli
+import dfatool.utils
+from dfatool.model import AnalyticModel
+
+
+def main():
+ parser = argparse.ArgumentParser(
+ formatter_class=argparse.RawDescriptionHelpFormatter, description=__doc__
+ )
+ parser.add_argument("--aggregate", choices=["sum"], default="sum")
+ parser.add_argument(
+ "--aggregate-init",
+ default=0,
+ type=float,
+ )
+ parser.add_argument(
+ "--info",
+ action="store_true",
+ help="Show benchmark information (number of measurements, parameter values, ...)",
+ )
+ parser.add_argument(
+ "--models",
+ nargs="+",
+ type=str,
+ help="Path to model file (.json or .json.xz)",
+ )
+ parser.add_argument("event", nargs="+", type=str)
+ args = parser.parse_args()
+
+ models = list()
+ for model_file in args.models:
+ with open(model_file, "r") as f:
+ models.append(AnalyticModel.from_json(json.load(f)))
+
+ if args.info:
+ for i in range(len(models)):
+ print(f"""{args.models[i]}: {" ".join(models[i].parameters)}""")
+ for name in models[i].names:
+ for attr in models[i].attributes(name):
+ print(f" {name}.{attr}")
+
+ aggregate = args.aggregate_init
+ for event in args.event:
+ nn, param = event.split("(")
+ name, action = nn.split(".")
+ param_model = None
+ ref_model = None
+ for model in models:
+ if name in model.names and action in model.attributes(name):
+ ref_model = model
+ param_model, param_info = model.get_fitted()
+ break
+ assert param_model is not None
+ param = param.removesuffix(")")
+ if param == "":
+ param = dict()
+ else:
+ param = dfatool.utils.parse_conf_str(param)
+ if args.aggregate == "sum":
+ aggregate += param_model(
+ name,
+ action,
+ param=dfatool.utils.param_dict_to_list(param, ref_model.parameters),
+ )
+
+ print(aggregate)
+
+
+if __name__ == "__main__":
+ main()