tools/perf/tests/shell/lib/perf_metric_validation.py

Source file repositories/reference/linux-study-clean/tools/perf/tests/shell/lib/perf_metric_validation.py

File Facts

System
Linux kernel
Corpus path
tools/perf/tests/shell/lib/perf_metric_validation.py
Extension
.py
Size
23292 bytes
Lines
604
Domain
Support Tooling And Documentation
Bucket
tools
Inferred role
Support Tooling And Documentation: tools
Status
atlas-only

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

# SPDX-License-Identifier: GPL-2.0
import re
import csv
import json
import argparse
from pathlib import Path
import subprocess


class TestError:
    def __init__(self, metric: list[str], wl: str, value: list[float], low: float, up=float('nan'), description=str()):
        self.metric: list = metric  # multiple metrics in relationship type tests
        self.workloads = [wl]  # multiple workloads possible
        self.collectedValue: list = value
        self.valueLowBound = low
        self.valueUpBound = up
        self.description = description

    def __repr__(self) -> str:
        if len(self.metric) > 1:
            return "\nMetric Relationship Error: \tThe collected value of metric {0}\n\
                \tis {1} in workload(s): {2} \n\
                \tbut expected value range is [{3}, {4}]\n\
                \tRelationship rule description: \'{5}\'".format(self.metric, self.collectedValue, self.workloads,
                                                                 self.valueLowBound, self.valueUpBound, self.description)
        elif len(self.collectedValue) == 0:
            return "\nNo Metric Value Error: \tMetric {0} returns with no value \n\
                    \tworkload(s): {1}".format(self.metric, self.workloads)
        else:
            return "\nWrong Metric Value Error: \tThe collected value of metric {0}\n\
                    \tis {1} in workload(s): {2}\n\
                    \tbut expected value range is [{3}, {4}]"\
                        .format(self.metric, self.collectedValue, self.workloads,
                                self.valueLowBound, self.valueUpBound)


class Validator:
    def __init__(self, rulefname, reportfname='', t=5, debug=False, datafname='', fullrulefname='',
                 workload='true', metrics='', cputype='cpu'):
        self.rulefname = rulefname
        self.reportfname = reportfname
        self.rules = None
        self.collectlist: str = metrics
        self.metrics = self.__set_metrics(metrics)
        self.skiplist = set()
        self.tolerance = t
        self.cputype = cputype

        self.workloads = [x for x in workload.split(",") if x]
        self.wlidx = 0  # idx of current workloads
        self.allresults = dict()  # metric results of all workload
        self.alltotalcnt = dict()
        self.allpassedcnt = dict()

        self.results = dict()  # metric results of current workload
        # vars for test pass/failure statistics
        # metrics with no results or negative results, neg result counts failed tests
        self.ignoremetrics = set()
        self.totalcnt = 0
        self.passedcnt = 0
        # vars for errors
        self.errlist = list()

        # vars for Rule Generator
        self.pctgmetrics = set()  # Percentage rule

        # vars for debug
        self.datafname = datafname
        self.debug = debug
        self.fullrulefname = fullrulefname

Annotation

Implementation Notes