Mesa (staging/21.3): intel/perf: Use a function to initialize perf counters
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue May 10 06:58:50 UTC 2022
Module: Mesa
Branch: staging/21.3
Commit: c0e75fa0ffd678cd7aa59d44e85f5d844c141b47
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c0e75fa0ffd678cd7aa59d44e85f5d844c141b47
Author: Matt Turner <mattst88 at gmail.com>
Date: Wed Mar 2 17:53:02 2022 -0800
intel/perf: Use a function to initialize perf counters
And specifically mark it with ATTRIBUTE_NOINLINE. Otherwise it will be
inlined and actually slightly increase code size.
Cuts 505 KiB from iris_dri.so and libvulkan_intel.so.
text data bss dec hex filename
1538720 0 0 1538720 177aa0 meson-generated_.._intel_perf_metrics.c.o (before)
926811 43200 0 970011 ecd1b meson-generated_.._intel_perf_metrics.c.o (after)
text data bss dec hex filename
14751700 365708 210004 15327412 e9e0b4 iris_dri.so (before)
14190852 408908 210004 14809764 e1faa4 iris_dri.so (after)
text data bss dec hex filename
8744913 214264 22820 8981997 890ded libvulkan_intel.so (before)
8184097 257464 22820 8464381 8127fd libvulkan_intel.so (after)
Relocations increase because the counter initializations are moved from
code (in .text) to pointers (in .text) to .rodata, which require
relocations.
relinfo:
iris_dri.so (before): 15605 relocations, 15385 relative (98%), 452 PLT entries, 1 for local syms (0%), 0 users
iris_dri.so (after) : 17765 relocations, 17545 relative (98%), 452 PLT entries, 1 for local syms (0%), 0 users
libvulkan_intel.so (before): 8560 relocations, 4829 relative (56%), 355 PLT entries, 1 for local syms (0%), 0 users
libvulkan_intel.so (after) : 10720 relocations, 6989 relative (65%), 355 PLT entries, 1 for local syms (0%), 0 users
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
(cherry picked from commit bbbbb0325b6da31298a493ab3e9c3cb1648481d8)
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16405>
---
src/intel/perf/gen_perf.py | 45 ++++++++++++++++++++++++++++++++-------------
1 file changed, 32 insertions(+), 13 deletions(-)
diff --git a/src/intel/perf/gen_perf.py b/src/intel/perf/gen_perf.py
index 6b0e1641d8a..f4e766f2c2d 100644
--- a/src/intel/perf/gen_perf.py
+++ b/src/intel/perf/gen_perf.py
@@ -461,19 +461,13 @@ def output_counter_report(set, counter, counter_to_idx, current_offset):
key = counter_key(counter)
idx = str(counter_to_idx[key])
- c("counter = &query->counters[query->n_counters++];\n")
- c("counter->oa_counter_read_" + data_type + " = " + set.read_funcs[counter.get('symbol_name')] + ";\n")
- c("counter->name = counters[" + idx + "].name;\n")
- c("counter->desc = counters[" + idx + "].desc;\n")
- c("counter->symbol_name = counters[" + idx + "].symbol_name;\n")
- c("counter->category = counters[" + idx + "].category;\n")
- c("counter->type = counters[" + idx + "].type;\n")
- c("counter->data_type = counters[" + idx + "].data_type;\n")
- c("counter->units = counters[" + idx + "].units;\n")
- c("counter->raw_max = " + set.max_values[counter.get('symbol_name')] + ";\n")
-
current_offset = pot_align(current_offset, sizeof(c_type))
- c("counter->offset = " + str(current_offset) + ";\n")
+
+ c("counter = &query->counters[query->n_counters++];\n")
+ c("intel_perf_query_add_counter(counter, " + idx + ", " +
+ str(current_offset) + ", " +
+ set.max_values[counter.get('symbol_name')] + ", (oa_counter_read_func)" +
+ set.read_funcs[counter.get('symbol_name')] + ");\n")
if availability:
c_outdent(3);
@@ -757,7 +751,32 @@ def main():
idx += 1
c_outdent(3)
- c("};\n")
+ c("};\n\n")
+
+ c(textwrap.dedent("""\
+ typedef uint64_t (*oa_counter_read_func)(struct intel_perf_config *perf,
+ const struct intel_perf_query_info *query,
+ const struct intel_perf_query_result *results);
+ static void ATTRIBUTE_NOINLINE
+ intel_perf_query_add_counter(struct intel_perf_query_counter *dest,
+ int counter_idx, size_t offset,
+ uint64_t raw_max, oa_counter_read_func oa_counter_read_uint64)
+ {
+ const struct intel_perf_query_counter *counter = &counters[counter_idx];
+
+ dest->name = counter->name;
+ dest->desc = counter->desc;
+ dest->symbol_name = counter->symbol_name;
+ dest->category = counter->category;
+ dest->raw_max = raw_max;
+
+ dest->offset = offset;
+ dest->type = counter->type;
+ dest->data_type = counter->data_type;
+ dest->units = counter->units;
+ dest->oa_counter_read_uint64 = oa_counter_read_uint64;
+ }
+ """))
# Print out all metric sets registration functions for each set in each
# generation.
More information about the mesa-commit
mailing list