[igt-dev] [PATCH i-g-t 16/31] lib/perf: Make chipsets aware of oa formats
Kamil Konieczny
kamil.konieczny at linux.intel.com
Mon Mar 13 15:49:05 UTC 2023
Hi Umesh,
please improve subject:
lib/perf: Make chipsets aware of oa formats
--- ^ -------- ^
Add i915 to it:
lib/i915/perf:
and change description to not mention specific structure name,
like
Prepare to read different oa formats
With that
Acked-by: Kamil Konieczny <kamil.konieczny at linux.intel.com>
Regards,
Kamil
On 2023-02-14 at 16:46:33 -0800, Umesh Nerlige Ramappa wrote:
> Make chipsets aware of oa formats to allow addition of different formats
> per chipset.
>
> Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa at intel.com>
> ---
> lib/i915/perf-configs/mdapi-xml-convert.py | 98 +++++++++++++---------
> 1 file changed, 58 insertions(+), 40 deletions(-)
>
> diff --git a/lib/i915/perf-configs/mdapi-xml-convert.py b/lib/i915/perf-configs/mdapi-xml-convert.py
> index b20b104d..5c784643 100755
> --- a/lib/i915/perf-configs/mdapi-xml-convert.py
> +++ b/lib/i915/perf-configs/mdapi-xml-convert.py
> @@ -133,24 +133,39 @@ xehpsdv_chipset_params = {
> }
> }
>
> +# There is no ReportType field in most Metrics XML files, Use 256B_GENERIC_NOA16
> +# to denote the generic 256 byte format that is used by most chipsets
> +hsw_chipset_oa_formats = {
> + '256B_GENERIC_NOA16': hsw_chipset_params,
> +}
> +
> +gen8_11_chipset_oa_formats = {
> + '256B_GENERIC_NOA16': gen8_11_chipset_params,
> +}
> +
> +xehpsdv_chipset_oa_formats = {
> + '256B_GENERIC_NOA16': xehpsdv_chipset_params,
> +}
> +
> +
Two newlines ?
> chipsets = {
> - 'HSW': hsw_chipset_params,
> - 'BDW': gen8_11_chipset_params,
> - 'CHV': gen8_11_chipset_params,
> - 'SKL': gen8_11_chipset_params,
> - 'BXT': gen8_11_chipset_params,
> - 'KBL': gen8_11_chipset_params,
> - 'GLK': gen8_11_chipset_params,
> - 'CFL': gen8_11_chipset_params,
> - 'CNL': gen8_11_chipset_params,
> - 'ICL': gen8_11_chipset_params,
> - 'EHL': gen8_11_chipset_params,
> - 'TGL': gen8_11_chipset_params,
> - 'RKL': gen8_11_chipset_params,
> - 'DG1': gen8_11_chipset_params,
> - 'ADL': gen8_11_chipset_params,
> - 'ACM': xehpsdv_chipset_params,
> - 'MTL': xehpsdv_chipset_params,
> + 'HSW': hsw_chipset_oa_formats,
> + 'BDW': gen8_11_chipset_oa_formats,
> + 'CHV': gen8_11_chipset_oa_formats,
> + 'SKL': gen8_11_chipset_oa_formats,
> + 'BXT': gen8_11_chipset_oa_formats,
> + 'KBL': gen8_11_chipset_oa_formats,
> + 'GLK': gen8_11_chipset_oa_formats,
> + 'CFL': gen8_11_chipset_oa_formats,
> + 'CNL': gen8_11_chipset_oa_formats,
> + 'ICL': gen8_11_chipset_oa_formats,
> + 'EHL': gen8_11_chipset_oa_formats,
> + 'TGL': gen8_11_chipset_oa_formats,
> + 'RKL': gen8_11_chipset_oa_formats,
> + 'DG1': gen8_11_chipset_oa_formats,
> + 'ADL': gen8_11_chipset_oa_formats,
> + 'ACM': xehpsdv_chipset_oa_formats,
> + 'MTL': xehpsdv_chipset_oa_formats,
> }
>
> xehp_plus = ( 'ACM', 'MTL' )
> @@ -180,14 +195,14 @@ def underscore(name):
> def print_err(*args):
> sys.stderr.write(' '.join(map(str,args)) + '\n')
>
> -def read_value(chipset, offset):
> - if offset in chipsets[chipset]['register_offsets']:
> - return chipsets[chipset]['register_offsets'][offset]
> +def read_value(chipset, offset, oa_format):
> + if offset in chipsets[chipset][oa_format]['register_offsets']:
> + return chipsets[chipset][oa_format]['register_offsets'][offset]
> print_err("Unknown offset register at offset {0}".format(offset))
> assert 0
>
>
> -def read_token_to_rpn_read(chipset, token, raw_offsets):
> +def read_token_to_rpn_read(chipset, token, raw_offsets, oa_format):
> width, offset_str = token.split('@')
>
> # For Broadwell the raw read notation was extended for 40 bit
> @@ -200,10 +215,10 @@ def read_token_to_rpn_read(chipset, token, raw_offsets):
>
> if raw_offsets:
> # Location in the HW reports
> - a_offset = chipsets[chipset]['a_offset']
> - b_offset = chipsets[chipset]['b_offset']
> - c_offset = chipsets[chipset]['c_offset']
> - report_size = chipsets[chipset]['oa_report_size']
> + a_offset = chipsets[chipset][oa_format]['a_offset']
> + b_offset = chipsets[chipset][oa_format]['b_offset']
> + c_offset = chipsets[chipset][oa_format]['c_offset']
> + report_size = chipsets[chipset][oa_format]['oa_report_size']
>
> if offset < a_offset:
> if offset == 4:
> @@ -228,7 +243,7 @@ def read_token_to_rpn_read(chipset, token, raw_offsets):
> elif offset < report_size:
> return "C " + str(int((offset - c_offset) / 4)) + " READ"
> else:
> - return "{0} READ".format(read_value(chipset, offset))
> + return "{0} READ".format(read_value(chipset, offset, oa_format))
> else:
> # Location in the accumulated deltas
> idx = int(offset / 8)
> @@ -245,7 +260,7 @@ def read_token_to_rpn_read(chipset, token, raw_offsets):
> elif idx < 62:
> return "C " + str(idx - 54) + " READ"
> else:
> - return "{0} READ".format(read_value(chipset, offset))
> + return "{0} READ".format(read_value(chipset, offset, oa_format))
> elif chipset in xehp_plus:
> # For XEHPSDV the array of accumulated counters is
> # assumed to start with a GPU_TIME then GPU_CLOCK,
> @@ -262,7 +277,7 @@ def read_token_to_rpn_read(chipset, token, raw_offsets):
> elif idx < 56:
> return "C " + str(idx - 48) + " READ"
> else:
> - return "{0} READ".format(read_value(chipset, offset))
> + return "{0} READ".format(read_value(chipset, offset, oa_format))
> else:
> # For Gen8+ the array of accumulated counters is
> # assumed to start with a GPU_TIME then GPU_CLOCK,
> @@ -279,11 +294,11 @@ def read_token_to_rpn_read(chipset, token, raw_offsets):
> elif idx < 54:
> return "C " + str(idx - 46) + " READ"
> else:
> - return "{0} READ".format(read_value(chipset, offset))
> + return "{0} READ".format(read_value(chipset, offset, oa_format))
>
> assert 0
>
> -def replace_read_tokens_with_rpn_read_ops(chipset, equation, raw_offsets):
> +def replace_read_tokens_with_rpn_read_ops(chipset, oa_format, equation, raw_offsets):
> # MDAPI MetricSet equations use tokens like 'dw at 0xff' for reading raw
> # values from snapshots, but this doesn't seem convenient for a few
> # reasons:
> @@ -307,7 +322,7 @@ def replace_read_tokens_with_rpn_read_ops(chipset, equation, raw_offsets):
>
> for token in tokens:
> if '@' in token:
> - read_exp = read_token_to_rpn_read(chipset, token, raw_offsets)
> + read_exp = read_token_to_rpn_read(chipset, token, raw_offsets, oa_format)
> equation = equation + " " + read_exp
> else:
> equation = equation + " " + token
> @@ -425,14 +440,14 @@ def fixup_equation(equation):
> # double check that there's never any variations between repeated
> # configs
> #
> -def filter_single_config_registers_of_type(mdapi_metric_set, type):
> +def filter_single_config_registers_of_type(mdapi_metric_set, type, oa_format):
> regs = []
> for mdapi_reg_config in mdapi_metric_set.findall("RegConfigStart"):
> tmp_regs = []
> for mdapi_reg in mdapi_reg_config.findall("Register"):
> reg = (int(mdapi_reg.get('offset'),16), int(mdapi_reg.get('value'),16))
>
> - if reg[0] in chipsets[chipset]['config_reg_blacklist']:
> + if reg[0] in chipsets[chipset][oa_format]['config_reg_blacklist']:
> continue
>
> if mdapi_reg.get('type') == type:
> @@ -472,7 +487,7 @@ def get_mux_id_group(id_groups, id):
>
>
>
> -def process_mux_configs(mdapi_set):
> +def process_mux_configs(mdapi_set, oa_format):
> allow_missing_id = True
>
> mux_config_id_groups = []
> @@ -483,7 +498,7 @@ def process_mux_configs(mdapi_set):
> for mdapi_reg in mdapi_reg_config.findall("Register"):
> address = int(mdapi_reg.get('offset'), 16)
>
> - if address in chipsets[chipset]['config_reg_blacklist']:
> + if address in chipsets[chipset][oa_format]['config_reg_blacklist']:
> continue
>
> reg_type = mdapi_reg.get('type')
> @@ -613,6 +628,7 @@ for arg in args.xml:
> if "OGL" not in apis and "OCL" not in apis and "MEDIA" not in apis:
> continue
>
> + oa_format = '256B_GENERIC_NOA16'
> set_symbol_name = oa_registry.Registry.sanitize_symbol_name(mdapi_set.get('SymbolName'))
>
> if set_symbol_name in sets:
> @@ -668,7 +684,7 @@ for arg in args.xml:
> # to deal with. (At least we got the handling of the Broadwell
> # ComputeExtended example wrong and it took several email exchanges and
> # a conference call to confirm how to interpret this case)
> - mux_configs = process_mux_configs(mdapi_set)
> + mux_configs = process_mux_configs(mdapi_set, oa_format)
>
> # Unlike for MUX registers, we only expect one set of FLEX/OA
> # registers per metric set (even though they are sometimes duplicated
> @@ -680,8 +696,8 @@ for arg in args.xml:
> # need some adapting to support multiple OA/FLEX configs with different
> # availability expressions)
> #
> - flex_regs = filter_single_config_registers_of_type(mdapi_set, "FLEX")
> - oa_regs = filter_single_config_registers_of_type(mdapi_set, "OA")
> + flex_regs = filter_single_config_registers_of_type(mdapi_set, "FLEX", oa_format)
> + oa_regs = filter_single_config_registers_of_type(mdapi_set, "OA", oa_format)
>
>
> # Note: we ignore Perfmon registers
> @@ -877,6 +893,7 @@ for arg in args.xml:
> raw_read_eq = None
> else:
> raw_read_eq = replace_read_tokens_with_rpn_read_ops(chipset,
> + oa_format,
> raw_read_eq,
> True) #raw offsets
>
> @@ -886,6 +903,7 @@ for arg in args.xml:
> delta_read_eq = None
> else:
> delta_read_eq = replace_read_tokens_with_rpn_read_ops(chipset,
> + oa_format,
> delta_read_eq,
> False) #delta offsets
>
> @@ -1070,8 +1088,8 @@ for set in metrics.findall(".//set"):
> for reg in config.findall("register"):
> addr = int(reg.get('address'), 16)
>
> - if 'registers' in chipsets[chipset] and addr in chipsets[chipset]['registers']:
> - reg_info = chipsets[chipset]['registers'][addr]
> + if 'registers' in chipsets[chipset][oa_format] and addr in chipsets[chipset][oa_format]['registers']:
> + reg_info = chipsets[chipset][oa_format]['registers'][addr]
> comment = ' <!--' + reg_info['name'] + ' -->'
> else:
> comment = ''
> --
> 2.36.1
>
More information about the igt-dev
mailing list