예제 #1
0
def get_record_set_3d(settings, dataset, dataset_types, rw, metric):
    record_set = {
        "iodepth": dataset_types["iodepth"],
        "numjobs": dataset_types["numjobs"],
        "values": [],
        "fio_version": [],
    }
    # pprint.pprint(dataset)
    if settings["rw"] == "randrw":
        if len(settings["filter"]) > 1 or not settings["filter"]:
            print("Since we are processing randrw data, you must specify a "
                  "filter for either read or write data, not both.")
            exit(1)

    for depth in dataset_types["iodepth"]:
        row = []
        for jobs in dataset_types["numjobs"]:
            for record in dataset[0]["data"]:
                # pprint.pprint(record)
                if ((int(record["iodepth"]) == int(depth))
                        and int(record["numjobs"]) == jobs
                        and record["rw"] == rw
                        and record["type"] in settings["filter"]):
                    row.append(record[metric])
        record_set["values"].append(supporting.round_metric_series(row))
    record_set["fio_version"].append(dataset[0]["data"][0]["fio_version"])
    return record_set
예제 #2
0
def get_record_set_3d(settings, dataset, dataset_types, rw, metric):
    record_set = {
        'iodepth': dataset_types['iodepth'],
        'numjobs': dataset_types['numjobs'],
        'values': []
    }
    # pprint.pprint(dataset)
    if settings['rw'] == 'randrw':
        if len(settings['filter']) > 1 or not settings['filter']:
            print(
                "Since we are processing randrw data, you must specify a filter for either read or write data, not both."
            )
            exit(1)

    for depth in dataset_types['iodepth']:
        row = []
        for jobs in dataset_types['numjobs']:
            for record in dataset[0]['data']:
                # pprint.pprint(record)
                if (int(record['iodepth']) == int(depth)) \
                        and int(record['numjobs']) == jobs \
                        and record['rw'] == rw \
                        and record['type'] in settings['filter']:
                    row.append(record[metric])
        record_set['values'].append(supporting.round_metric_series(row))
    return record_set
예제 #3
0
def scale_data(datadict):

    iops_series_raw = datadict["iops_series_raw"]
    iops_stddev_series_raw = datadict["iops_stddev_series_raw"]
    lat_series_raw = datadict["lat_series_raw"]
    lat_stddev_series_raw = datadict["lat_stddev_series_raw"]
    cpu_usr = datadict["cpu"]["cpu_usr"]
    cpu_sys = datadict["cpu"]["cpu_sys"]

    if "ss_settings" in datadict.keys():
        ss_data_bw_mean = datadict["ss_data_bw_mean"]
        ss_data_iops_mean = datadict["ss_data_iops_mean"]

    #
    # Latency data must be scaled, IOPs will not be scaled.
    #
    latency_scale_factor = supporting.get_scale_factor_lat(lat_series_raw)
    scaled_latency_data = supporting.scale_yaxis(lat_series_raw,
                                                 latency_scale_factor)
    #
    # Latency data must be rounded.
    #
    scaled_latency_data_rounded = supporting.round_metric_series(
        scaled_latency_data["data"])
    scaled_latency_data["data"] = scaled_latency_data_rounded
    #
    # Latency stddev must be scaled with same scale factor as the data
    #
    lat_stdev_scaled = supporting.scale_yaxis(lat_stddev_series_raw,
                                              latency_scale_factor)

    lat_stdev_scaled_rounded = supporting.round_metric_series(
        lat_stdev_scaled["data"])

    #
    # Latency data is converted to percent.
    #
    lat_stddev_percent = supporting.raw_stddev_to_percent(
        scaled_latency_data["data"], lat_stdev_scaled_rounded)

    lat_stddev_percent = [int(x) for x in lat_stddev_percent]

    scaled_latency_data["stddev"] = supporting.round_metric_series(
        lat_stddev_percent)
    #
    # IOPS data is rounded
    iops_series_rounded = supporting.round_metric_series(iops_series_raw)
    #
    # IOPS stddev is converted to percent
    iops_stdev_rounded = supporting.round_metric_series(iops_stddev_series_raw)
    iops_stdev_rounded_percent = supporting.raw_stddev_to_percent(
        iops_series_rounded, iops_stdev_rounded)
    iops_stdev_rounded_percent = [int(x) for x in iops_stdev_rounded_percent]
    #
    #

    # Steady state bandwidth data must be scaled.
    if "ss_settings" in datadict.keys():
        if datadict["ss_settings"]:
            ss_bw_scalefactor = supporting.get_scale_factor_bw_ss(
                ss_data_bw_mean)
            ss_data_bw_mean = supporting.scale_yaxis(ss_data_bw_mean,
                                                     ss_bw_scalefactor)
            ss_data_bw_mean["data"] = supporting.round_metric_series(
                ss_data_bw_mean["data"])

            ss_iops_scalefactor = supporting.get_scale_factor_iops(
                ss_data_iops_mean)
            ss_data_iops_mean = supporting.scale_yaxis(ss_data_iops_mean,
                                                       ss_iops_scalefactor)
            ss_data_iops_mean["data"] = supporting.round_metric_series(
                ss_data_iops_mean["data"])

    datadict["y1_axis"] = {
        "data": iops_series_rounded,
        "format": "IOPS",
        "stddev": iops_stdev_rounded_percent,
    }

    datadict["y2_axis"] = scaled_latency_data
    if cpu_sys and cpu_usr:
        datadict["cpu"] = {"cpu_sys": cpu_sys, "cpu_usr": cpu_usr}

    if "ss_settings" in datadict.keys():
        if datadict["ss_settings"]:
            datadict["ss_data_bw_mean"] = ss_data_bw_mean
            datadict["ss_data_iops_mean"] = ss_data_iops_mean

    return datadict
def get_record_set(settings, dataset, dataset_types, rw, numjobs):
    """The supplied dataset, a list of flat dictionaries with data is filtered based
    on the parameters as set by the command line. The filtered data is also scaled and rounded.
    """
    if settings['rw'] == 'randrw':
        if len(settings['filter']) > 1 or not settings['filter']:
            print(
                "Since we are processing randrw data, you must specify a filter for either read or write data, not both."
            )
            exit(1)

    record_set = {
        'x_axis': dataset_types['iodepth'],
        'x_axis_format': 'Queue Depth',
        'y1_axis': None,
        'y2_axis': None,
        'numjobs': numjobs
    }

    iops_series_raw = []
    iops_stddev_series_raw = []
    lat_series_raw = []
    lat_stddev_series_raw = []

    for depth in dataset_types['iodepth']:
        for record in dataset:
            if (int(record['iodepth']) == int(depth)) and int(
                    record['numjobs']) == int(numjobs[0]) and record[
                        'rw'] == rw and record['type'] in settings['filter']:
                iops_series_raw.append(record['iops'])
                lat_series_raw.append(record['lat'])
                iops_stddev_series_raw.append(record['iops_stddev'])
                lat_stddev_series_raw.append(record['lat_stddev'])
    #
    # Latency data must be scaled, IOPs will not be scaled.
    #
    latency_scale_factor = supporting.get_scale_factor(lat_series_raw)
    scaled_latency_data = supporting.scale_yaxis_latency(
        lat_series_raw, latency_scale_factor)
    #
    # Latency data must be rounded.
    #
    scaled_latency_data_rounded = supporting.round_metric_series(
        scaled_latency_data['data'])
    scaled_latency_data['data'] = scaled_latency_data_rounded
    #
    # Latency stddev must be scaled with same scale factor as the data
    #
    lat_stdev_scaled = supporting.scale_yaxis_latency(lat_stddev_series_raw,
                                                      latency_scale_factor)

    lat_stdev_scaled_rounded = supporting.round_metric_series(
        lat_stdev_scaled['data'])

    #
    # Latency data is converted to percent.
    #
    lat_stddev_percent = supporting.raw_stddev_to_percent(
        scaled_latency_data['data'], lat_stdev_scaled_rounded)

    lat_stddev_percent = [int(x) for x in lat_stddev_percent]

    scaled_latency_data['stddev'] = supporting.round_metric_series(
        lat_stddev_percent)
    #
    # IOPS data is rounded
    iops_series_rounded = supporting.round_metric_series(iops_series_raw)
    #
    # IOPS stddev is converted to percent
    iops_stdev_rounded = supporting.round_metric_series(iops_stddev_series_raw)
    iops_stdev_rounded_percent = supporting.raw_stddev_to_percent(
        iops_series_rounded, iops_stdev_rounded)
    iops_stdev_rounded_percent = [int(x) for x in iops_stdev_rounded_percent]
    #
    #
    record_set['y1_axis'] = {
        'data': iops_series_rounded,
        'format': "IOPS",
        'stddev': iops_stdev_rounded_percent
    }
    record_set['y2_axis'] = scaled_latency_data

    return record_set
예제 #5
0
def scale_data(datadict):

    iops_series_raw = datadict['iops_series_raw']
    iops_stddev_series_raw = datadict['iops_stddev_series_raw']
    lat_series_raw = datadict['lat_series_raw']
    lat_stddev_series_raw = datadict['lat_stddev_series_raw']
    cpu_usr = datadict['cpu']['cpu_usr']
    cpu_sys = datadict['cpu']['cpu_sys']

    #
    # Latency data must be scaled, IOPs will not be scaled.
    #
    latency_scale_factor = supporting.get_scale_factor(lat_series_raw)
    scaled_latency_data = supporting.scale_yaxis_latency(
        lat_series_raw, latency_scale_factor)
    #
    # Latency data must be rounded.
    #
    scaled_latency_data_rounded = supporting.round_metric_series(
        scaled_latency_data['data'])
    scaled_latency_data['data'] = scaled_latency_data_rounded
    #
    # Latency stddev must be scaled with same scale factor as the data
    #
    lat_stdev_scaled = supporting.scale_yaxis_latency(lat_stddev_series_raw,
                                                      latency_scale_factor)

    lat_stdev_scaled_rounded = supporting.round_metric_series(
        lat_stdev_scaled['data'])

    #
    # Latency data is converted to percent.
    #
    lat_stddev_percent = supporting.raw_stddev_to_percent(
        scaled_latency_data['data'], lat_stdev_scaled_rounded)

    lat_stddev_percent = [int(x) for x in lat_stddev_percent]

    scaled_latency_data['stddev'] = supporting.round_metric_series(
        lat_stddev_percent)
    #
    # IOPS data is rounded
    iops_series_rounded = supporting.round_metric_series(iops_series_raw)
    #
    # IOPS stddev is converted to percent
    iops_stdev_rounded = supporting.round_metric_series(iops_stddev_series_raw)
    iops_stdev_rounded_percent = supporting.raw_stddev_to_percent(
        iops_series_rounded, iops_stdev_rounded)
    iops_stdev_rounded_percent = [int(x) for x in iops_stdev_rounded_percent]
    #
    #
    datadict['y1_axis'] = {
        'data': iops_series_rounded,
        'format': "IOPS",
        'stddev': iops_stdev_rounded_percent
    }
    datadict['y2_axis'] = scaled_latency_data
    if cpu_sys and cpu_usr:
        datadict['cpu'] = {'cpu_sys': cpu_sys, 'cpu_usr': cpu_usr}

    return datadict
예제 #6
0
def scale_data(datadict, settings):

    if settings["type"] is None or len(settings["type"]) == 0:
        settings["type"] = ['iops', 'lat']

    left_series_raw = datadict[settings['type'][0] + "_series_raw"]
    if settings['type'][0] + "_stddev_series_raw" in datadict:
        left_stddev_series_raw = datadict[settings['type'][0] +
                                          "_stddev_series_raw"]
    else:
        left_stddev_series_raw = None
    if len(settings['type']) == 2:
        right_series_raw = datadict[settings['type'][1] + "_series_raw"]
        if settings['type'][1] + "_stddev_series_raw" in datadict:
            right_stddev_series_raw = datadict[settings['type'][1] +
                                               "_stddev_series_raw"]
        else:
            right_stddev_series_raw = None
    else:
        right_series_raw = None
    cpu_usr = datadict["cpu"]["cpu_usr"]
    cpu_sys = datadict["cpu"]["cpu_sys"]

    if "ss_settings" in datadict.keys():
        ss_data_bw_mean = datadict["ss_data_bw_mean"]
        ss_data_iops_mean = datadict["ss_data_iops_mean"]

    #
    # Latency data must be scaled, IOPs will not be scaled.
    #
    if right_series_raw is not None:
        latency_scale_factor = supporting.get_scale_factor_lat(
            right_series_raw)
        scaled_latency_data = supporting.scale_yaxis(right_series_raw,
                                                     latency_scale_factor)
        #
        # Latency data must be rounded.
        #
        scaled_latency_data_rounded = supporting.round_metric_series(
            scaled_latency_data["data"])
        scaled_latency_data["data"] = scaled_latency_data_rounded
        #
        # Latency stddev must be scaled with same scale factor as the data
        #
        lat_stdev_scaled = supporting.scale_yaxis(right_stddev_series_raw,
                                                  latency_scale_factor)

        lat_stdev_scaled_rounded = supporting.round_metric_series(
            lat_stdev_scaled["data"])

        #
        # Latency data is converted to percent.
        #
        lat_stddev_percent = supporting.raw_stddev_to_percent(
            scaled_latency_data["data"], lat_stdev_scaled_rounded)

        lat_stddev_percent = [int(x) for x in lat_stddev_percent]

        scaled_latency_data["stddev"] = supporting.round_metric_series(
            lat_stddev_percent)
    #
    # IOPS data is rounded
    left_series_rounded = supporting.round_metric_series(left_series_raw)
    #
    # IOPS stddev is converted to percent
    if left_stddev_series_raw is not None:
        left_stdev_rounded = supporting.round_metric_series(
            left_stddev_series_raw)
        left_stdev_rounded_percent = supporting.raw_stddev_to_percent(
            left_series_rounded, left_stdev_rounded)
        left_stdev_rounded_percent = [
            int(x) for x in left_stdev_rounded_percent
        ]
    else:
        left_stdev_rounded_percent = None
    #
    #

    # Steady state bandwidth data must be scaled.
    if "ss_settings" in datadict.keys():
        if datadict["ss_settings"]:
            ss_bw_scalefactor = supporting.get_scale_factor_bw_ss(
                ss_data_bw_mean)
            ss_data_bw_mean = supporting.scale_yaxis(ss_data_bw_mean,
                                                     ss_bw_scalefactor)
            ss_data_bw_mean["data"] = supporting.round_metric_series(
                ss_data_bw_mean["data"])

            ss_iops_scalefactor = supporting.get_scale_factor_iops(
                ss_data_iops_mean)
            ss_data_iops_mean = supporting.scale_yaxis(ss_data_iops_mean,
                                                       ss_iops_scalefactor)
            ss_data_iops_mean["data"] = supporting.round_metric_series(
                ss_data_iops_mean["data"])

    datadict["y1_axis"] = {
        "data": left_series_rounded,
        "format": labelByType(settings["type"][0]),
        "stddev": left_stdev_rounded_percent,
    }
    if right_series_raw is not None:
        datadict["y2_axis"] = scaled_latency_data

    if cpu_sys and cpu_usr:
        datadict["cpu"] = {"cpu_sys": cpu_sys, "cpu_usr": cpu_usr}

    if "ss_settings" in datadict.keys():
        if datadict["ss_settings"]:
            datadict["ss_data_bw_mean"] = ss_data_bw_mean
            datadict["ss_data_iops_mean"] = ss_data_iops_mean

    return datadict