diff options
author | Yujun Zhang <zhang.yujunz@zte.com.cn> | 2016-12-30 14:08:15 +0800 |
---|---|---|
committer | Yujun Zhang <zhang.yujunz@zte.com.cn> | 2017-01-03 18:16:12 +0800 |
commit | d8c05b528b5a75377848d130286bc997da06a792 (patch) | |
tree | d88f44e3a0d87ffdf64ba20ecf0417e01f63427f /qtip/loader | |
parent | decad5f7fdb212c4f78fc31f00e591eaba104450 (diff) |
Implement plan, qpi and metric constructors
- separate runner from `plan` and move `plan` to `loader`
- rename `algorithm` to `formula`
- use `numpy` for formulas
- update sample qpi and metrics
Change-Id: I3131ca79907376f2de31d6cb920bd7d0230664a6
Signed-off-by: Yujun Zhang <zhang.yujunz@zte.com.cn>
Diffstat (limited to 'qtip/loader')
-rw-r--r-- | qtip/loader/base.py | 11 | ||||
-rw-r--r-- | qtip/loader/metric.py | 2 | ||||
-rw-r--r-- | qtip/loader/plan.py | 27 | ||||
-rw-r--r-- | qtip/loader/qpi.py | 22 |
4 files changed, 54 insertions, 8 deletions
diff --git a/qtip/loader/base.py b/qtip/loader/base.py index f7fcb669..2f5ab67a 100644 --- a/qtip/loader/base.py +++ b/qtip/loader/base.py @@ -20,13 +20,13 @@ ROOT_DIR = 'benchmarks' class BaseLoader(object): """Abstract class of QTIP benchmark loader""" - DEFAULT_DIR = '.' + RELATIVE_PATH = '.' _paths = [path.join(path.dirname(__file__), path.pardir, path.pardir, ROOT_DIR)] def __init__(self, name, paths=None): self._file = name - self._abspath = self._find(name, paths) + self._abspath = self._find(name, paths=paths) try: content = yaml.safe_load(file(self._abspath)) @@ -38,12 +38,11 @@ class BaseLoader(object): else path.splitext(name)[0] self.content = content - def _find(self, name, paths): + def _find(self, name, paths=None): """find a benchmark in searching paths""" paths = self._paths if paths is None else paths - name = path.join(self.DEFAULT_DIR, name) for p in paths: - abspath = path.join(p, name) + abspath = path.join(p, self.RELATIVE_PATH, name) if path.exists(abspath): return abspath raise NotFound(name, paths) @@ -52,7 +51,7 @@ class BaseLoader(object): def list_all(cls, paths=None): """list all available benchmarks""" paths = cls._paths if paths is None else paths - names = chain.from_iterable([listdir(path.join(p, cls.DEFAULT_DIR)) + names = chain.from_iterable([listdir(path.join(p, cls.RELATIVE_PATH)) for p in paths]) for name in names: item = cls(name, paths=paths) diff --git a/qtip/loader/metric.py b/qtip/loader/metric.py index d6174e8f..8b6fa5d3 100644 --- a/qtip/loader/metric.py +++ b/qtip/loader/metric.py @@ -13,4 +13,4 @@ from base import BaseLoader class MetricSpec(BaseLoader): """metrics in QTIP are categorized by performance test tools, such as dhrystone, whetstone and etc""" - DEFAULT_DIR = 'metric' + RELATIVE_PATH = 'metric' diff --git a/qtip/loader/plan.py b/qtip/loader/plan.py new file mode 100644 index 00000000..cf517ea2 --- /dev/null +++ b/qtip/loader/plan.py @@ -0,0 +1,27 @@ +############################################################################## +# Copyright (c) 2016 ZTE Corp and others. +# +# All rights reserved. This program and the accompanying materials +# are made available under the terms of the Apache License, Version 2.0 +# which accompanies this distribution, and is available at +# http://www.apache.org/licenses/LICENSE-2.0 +############################################################################## + + +from qtip.base.constant import PropName +from qtip.loader.base import BaseLoader +from qtip.loader.qpi import QPISpec + + +class Plan(BaseLoader): + """ + a benchmark plan is consist of configuration and a QPI list + """ + + RELATIVE_PATH = 'plan' + + def __init__(self, name, paths=None): + super(Plan, self).__init__(name, paths) + + self.qpis = [QPISpec(qpi, paths=paths) + for qpi in self.content[PropName.QPIS]] diff --git a/qtip/loader/qpi.py b/qtip/loader/qpi.py index 2972cbd7..cfa918c5 100644 --- a/qtip/loader/qpi.py +++ b/qtip/loader/qpi.py @@ -8,6 +8,10 @@ ############################################################################## from base import BaseLoader +from metric import MetricSpec + +from qtip.base.constant import PropName +from qtip.utils.formula import Formula class QPISpec(BaseLoader): @@ -15,4 +19,20 @@ class QPISpec(BaseLoader): a QPI specification defines how to calculate a performance index from collected metrics. """ - DEFAULT_DIR = 'QPI' + RELATIVE_PATH = 'QPI' + + def __init__(self, name, paths=None): + super(QPISpec, self).__init__(name, paths=paths) + content = self.content + self.formula = Formula(content[PropName.FORMULA]) + self.sections = [Section(record, paths=paths) + for record in content[PropName.SECTIONS]] + + +class Section(object): + def __init__(self, content, paths=None): + self.name = content[PropName.NAME] + self.weight = content[PropName.WEIGHT] + self.formula = Formula(content[PropName.FORMULA]) + self.metrics = [MetricSpec(record, paths=paths) + for record in content[PropName.METRICS]] |