Igt-dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
To: igt-dev@lists.freedesktop.org
Subject: [igt-dev] [PATCH i-g-t v5 20/30] lib/i915/perf: Add support for OAM format in codegen
Date: Thu, 23 Mar 2023 15:55:24 -0700	[thread overview]
Message-ID: <20230323225534.3739835-21-umesh.nerlige.ramappa@intel.com> (raw)
In-Reply-To: <20230323225534.3739835-1-umesh.nerlige.ramappa@intel.com>

Include OAM SAMedia (Standalone Media) format for MTL.

v2: Improve commit message (Kamil)

Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Acked-by: Kamil Konieczny <kamil.konieczny@linux.intel.com>
---
 lib/i915/perf-configs/mdapi-xml-convert.py | 118 +++++++++++++++++++--
 1 file changed, 112 insertions(+), 6 deletions(-)

diff --git a/lib/i915/perf-configs/mdapi-xml-convert.py b/lib/i915/perf-configs/mdapi-xml-convert.py
index eee12ad5..ba0b7ba4 100755
--- a/lib/i915/perf-configs/mdapi-xml-convert.py
+++ b/lib/i915/perf-configs/mdapi-xml-convert.py
@@ -135,6 +135,36 @@ 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
+# Just treat the MPEC counter names as A counters here. If a format has both A
+# and MPEC counters, then we need to change this.
+mtl_chipset_oam_samedia_ll_params = {
+    'a_offset': 32,
+    'b_offset': 96,
+    'c_offset': 128,
+    'oa_report_size': 192,
+    'config_reg_blacklist': {
+        0x2364, # OACTXID
+    },
+    'register_offsets': {
+        0x1b0: 'PERFCNT 0',
+        0x1b8: 'PERFCNT 1',
+    }
+}
+
+mtl_chipset_oam_samedia_params = {
+    'a_offset': 32,
+    'b_offset': 64,
+    'c_offset': 96,
+    'oa_report_size': 128,
+    'config_reg_blacklist': {
+        0x2364, # OACTXID
+    },
+    'register_offsets': {
+        0x1b0: 'PERFCNT 0',
+        0x1b8: 'PERFCNT 1',
+    }
+}
+
 hsw_chipset_oa_formats = {
     '256B_GENERIC_NOA16': hsw_chipset_params,
 }
@@ -147,6 +177,11 @@ xehpsdv_chipset_oa_formats = {
     '256B_GENERIC_NOA16': xehpsdv_chipset_params,
 }
 
+mtl_chipset_oa_formats = {
+    '256B_GENERIC_NOA16': xehpsdv_chipset_params,
+    '192B_MPEC8LL_NOA16': mtl_chipset_oam_samedia_ll_params,
+    '128B_MPEC8_NOA16': mtl_chipset_oam_samedia_params,
+}
 
 chipsets = {
     'HSW': hsw_chipset_oa_formats,
@@ -165,7 +200,7 @@ chipsets = {
     'DG1': gen8_11_chipset_oa_formats,
     'ADL': gen8_11_chipset_oa_formats,
     'ACM': xehpsdv_chipset_oa_formats,
-    'MTL': xehpsdv_chipset_oa_formats,
+    'MTL': mtl_chipset_oa_formats,
 }
 
 xehp_plus = ( 'ACM', 'MTL' )
@@ -202,7 +237,62 @@ def read_value(chipset, offset, oa_format):
     assert 0
 
 
-def read_token_to_rpn_read(chipset, token, raw_offsets, oa_format):
+def read_token_to_rpn_read_oam(chipset, token, raw_offsets, oa_format):
+    width, offset_str = token.split('@')
+    offset = int(offset_str, 16)
+
+    if width == 'qw':
+        den = 8
+    else:
+        den = 4
+
+    if raw_offsets:
+        # Location in the HW reports
+        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 == 8:
+                return "GPU_TIME 0 READ"
+            elif offset == 24:
+                return "GPU_CLOCK 0 READ"
+            else:
+                assert 0
+        elif offset < b_offset:
+            a_cnt_offset = int((offset - a_offset) / den)
+            return "A " + str(a_cnt_offset) + " READ"
+        elif offset < c_offset:
+            return "B " + str(int((offset - b_offset) / den)) + " READ"
+        elif offset < report_size:
+            return "C " + str(int((offset - c_offset) / den)) + " READ"
+        else:
+            return "{0} READ".format(read_value(chipset, offset, oa_format))
+    else:
+        # Location in the accumulated deltas
+        idx = int(offset / 8)
+        if chipset in xehp_plus:
+            # For XEHPSDV the array of accumulated counters is
+            # assumed to start with a GPU_TIME then GPU_CLOCK,
+            # then 38 A counters, then 8 B counters and finally
+            # 8 C counters.
+            if idx == 0:
+                return "GPU_TIME 0 READ"
+            elif idx == 1:
+                return "GPU_CLOCK 0 READ"
+            elif idx < 40:
+                return "A " + str(idx - 2) + " READ"
+            elif idx < 48:
+                return "B " + str(idx - 40) + " READ"
+            elif idx < 56:
+                return "C " + str(idx - 48) + " READ"
+            else:
+                return "{0} READ".format(read_value(chipset, offset, oa_format))
+
+    assert 0
+
+def read_token_to_rpn_read_oag(chipset, token, raw_offsets, oa_format):
     width, offset_str = token.split('@')
 
     # For Broadwell the raw read notation was extended for 40 bit
@@ -298,6 +388,16 @@ def read_token_to_rpn_read(chipset, token, raw_offsets, oa_format):
 
     assert 0
 
+
+def read_token_to_rpn_read(chipset, token, raw_offsets, oa_format):
+    if oa_format == '256B_GENERIC_NOA16':
+        return read_token_to_rpn_read_oag(chipset, token, raw_offsets, oa_format)
+
+    if oa_format in ['192B_MPEC8LL_NOA16', '128B_MPEC8_NOA16']:
+        return read_token_to_rpn_read_oam(chipset, token, raw_offsets, oa_format)
+
+    assert 0
+
 def replace_read_tokens_with_rpn_read_ops(chipset, oa_format, equation, raw_offsets):
     # MDAPI MetricSet equations use tokens like 'dw@0xff' for reading raw
     # values from snapshots, but this doesn't seem convenient for a few
@@ -625,10 +725,13 @@ for arg in args.xml:
     for mdapi_set in mdapi.findall(".//MetricSet"):
 
         apis = mdapi_set.get('SupportedAPI')
-        if "OGL" not in apis and "OCL" not in apis and "MEDIA" not in apis:
+        if "OGL" not in apis and "OCL" not in apis and "MEDIA" not in apis and "IO" not in apis:
             continue
 
         oa_format = '256B_GENERIC_NOA16'
+        if mdapi_set.get('ReportType') in chipsets[chipset]:
+            oa_format = mdapi_set.get('ReportType')
+
         set_symbol_name = oa_registry.Registry.sanitize_symbol_name(mdapi_set.get('SymbolName'))
 
         if set_symbol_name in sets:
@@ -647,7 +750,7 @@ for arg in args.xml:
         if set_symbol_name in set_blacklist:
             continue
 
-        if mdapi_set.get('SnapshotReportSize') != '256':
+        if mdapi_set.get('SnapshotReportSize') != str(chipsets[chipset][oa_format]['oa_report_size']):
             print_err("WARNING: skipping metric set '{0}', report size {1} invalid".format(set_symbol_name, mdapi_set.get('SnapshotReportSize')))
             continue
 
@@ -880,8 +983,11 @@ for arg in args.xml:
             # XXX: As a special case, we override the raw and delta report
             # equations for the GpuTime counters, which seem inconsistent
             if mdapi_counter.get('SymbolName') == "GpuTime":
-                mdapi_counter.set('SnapshotReportReadEquation', "dw@0x04 1000000000 UMUL $GpuTimestampFrequency UDIV")
                 mdapi_counter.set('DeltaReportReadEquation', "qw@0x0 1000000000 UMUL $GpuTimestampFrequency UDIV")
+                if chipset == 'MTL' and oa_format != '256B_GENERIC_NOA16':
+                    mdapi_counter.set('SnapshotReportReadEquation', "qw@0x08 1000000000 UMUL $GpuTimestampFrequency UDIV")
+                else:
+                    mdapi_counter.set('SnapshotReportReadEquation', "dw@0x04 1000000000 UMUL $GpuTimestampFrequency UDIV")
 
             availability = fixup_equation(mdapi_counter.get('AvailabilityEquation'))
             if availability == "":
@@ -919,7 +1025,7 @@ for arg in args.xml:
                           "(" + mdapi_counter.get('ShortName') + ")" + "\"")
                 # Media metric counters currently have no delta equation even
                 # though they have normalization equations that reference $Self
-                if "MEDIA" in apis:
+                if "MEDIA" in apis or "IO" in apis:
                     print_err("WARNING: -> Treating inconsistent media metric's 'raw' equation as a 'delta report' equation, but results should be double checked!")
                     delta_read_eq = raw_read_eq
                 else:
-- 
2.36.1

  parent reply	other threads:[~2023-03-23 22:55 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-23 22:55 [igt-dev] [PATCH i-g-t v5 00/30] Enable OAM support in IGT and GPUvis Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 01/30] i915/perf: Add support for 64-bit OA formats Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 02/30] i915/perf: Define a default engine for OA Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 03/30] i915/perf: Use default engine for sseu tests Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 04/30] i915/perf: Ensure rcs0 is present for gen12-mi-rpc Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 05/30] i915/perf: Use ARRAY_SIZE for buffer-fill test Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 06/30] i915/perf: Add class:instance support to OA tests Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 07/30] i915/perf: Enable tests to run on specific engines Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 08/30] i915/perf: Treat ticks as 64 bit Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 09/30] i915/perf: Treat timestamp as 64 bit value Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 10/30] i915/perf: Add OAM format type Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 11/30] i915/perf: Move OA format array from stack to heap Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 12/30] i915/perf: Use a helper for OA format Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 13/30] i915/perf: Add support for oa perf groups Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 14/30] i915/perf: Test concurrent access to OA in different groups Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 15/30] i915/perf: Add OAM support Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 16/30] lib/i915/perf: Prepare to read different OA formats Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 17/30] lib/i915/perf: Choose OAM format for media metrics Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 18/30] lib/i915/perf: Set missing metric unit for some counters Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 19/30] lib/i915/perf: Add MTL to supported HW in OA guid registry Umesh Nerlige Ramappa
2023-03-23 22:55 ` Umesh Nerlige Ramappa [this message]
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 21/30] lib/i915/perf: Update MTL GT2 metrics Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 22/30] lib/i915/perf: Update MTL GT3 metrics Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 23/30] i915/perf: Add support for engine specific metrics Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 24/30] i915/perf: Run non-zero-reason on media engines as well Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 25/30] i915/perf: Make sanity check failures descriptive Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 26/30] lib/i915/perf: Enable multi-tile support for perf library Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 27/30] lib/i915/perf: Update MTL OA timestamp and EU thread config Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 28/30] lib/i915/perf: Add support for select MPEC formats Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 29/30] lib/i915/perf: Adjust the GPU timestamp for new OA formats Umesh Nerlige Ramappa
2023-03-23 22:55 ` [igt-dev] [PATCH i-g-t v5 30/30] lib/i915/perf: Apply shift to raw timestamp as well Umesh Nerlige Ramappa
2023-03-23 23:29 ` [igt-dev] ✓ Fi.CI.BAT: success for Enable OAM support in IGT and GPUvis (rev5) Patchwork
2023-03-24  5:01 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230323225534.3739835-21-umesh.nerlige.ramappa@intel.com \
    --to=umesh.nerlige.ramappa@intel.com \
    --cc=igt-dev@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox