[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