From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06b.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id D4D5C10E660 for ; Tue, 6 Sep 2022 13:13:22 +0000 (UTC) Message-ID: Date: Tue, 6 Sep 2022 16:13:11 +0300 Content-Language: en-US To: Umesh Nerlige Ramappa , References: <20220823183036.5270-1-umesh.nerlige.ramappa@intel.com> <20220823183036.5270-11-umesh.nerlige.ramappa@intel.com> From: Lionel Landwerlin In-Reply-To: <20220823183036.5270-11-umesh.nerlige.ramappa@intel.com> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit MIME-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t 10/23] i915/perf: Use gt in perf tests and lib List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" List-ID: On 23/08/2022 21:30, Umesh Nerlige Ramappa wrote: > Enable perf tests to use gt information for sysfs attributes. > > Signed-off-by: Umesh Nerlige Ramappa Reviewed-by: Lionel Landwerlin > --- > lib/i915/perf.c | 36 ++++++++++++++++++++++++++++++++++-- > tests/i915/perf.c | 27 ++++++++++++++++++++------- > 2 files changed, 54 insertions(+), 9 deletions(-) > > diff --git a/lib/i915/perf.c b/lib/i915/perf.c > index 7349a460..3f131aaa 100644 > --- a/lib/i915/perf.c > +++ b/lib/i915/perf.c > @@ -409,6 +409,35 @@ open_master_sysfs_dir(int drm_fd) > return sysfs; > } > > +typedef enum { > + RPS_MIN_FREQ_MHZ, > + RPS_MAX_FREQ_MHZ, > + > + RPS_MAX_ATTR, > +} intel_sysfs_attr_id; > + > +static const char *intel_sysfs_attr_name[2][RPS_MAX_ATTR] = > +{ > + { > + "gt_min_freq_mhz", > + "gt_max_freq_mhz", > + }, > + { > + "gt/gt0/rps_min_freq_mhz", > + "gt/gt0/rps_max_freq_mhz", > + }, > +}; > + > +static const char * > +intel_sysfs_attr_id_to_name(int sysfs_dirfd, intel_sysfs_attr_id id) > +{ > + assert(id < RPS_MAX_ATTR); > + > + return !faccessat(sysfs_dirfd, "gt", O_RDONLY, 0) ? > + intel_sysfs_attr_name[1][id] : > + intel_sysfs_attr_name[0][id]; > +} > + > struct intel_perf * > intel_perf_for_fd(int drm_fd) > { > @@ -424,8 +453,11 @@ intel_perf_for_fd(int drm_fd) > if (sysfs_dir_fd < 0) > return NULL; > > - if (!read_sysfs(sysfs_dir_fd, "gt_min_freq_mhz", >_min_freq) || > - !read_sysfs(sysfs_dir_fd, "gt_max_freq_mhz", >_max_freq)) { > +#define read_sysfs_rps(fd, id, value) \ > + read_sysfs(fd, intel_sysfs_attr_id_to_name(fd, id), value) > + > + if (!read_sysfs_rps(sysfs_dir_fd, RPS_MIN_FREQ_MHZ, >_min_freq) || > + !read_sysfs_rps(sysfs_dir_fd, RPS_MAX_FREQ_MHZ, >_max_freq)) { > close(sysfs_dir_fd); > return NULL; > } > diff --git a/tests/i915/perf.c b/tests/i915/perf.c > index c120c898..89aa4931 100644 > --- a/tests/i915/perf.c > +++ b/tests/i915/perf.c > @@ -347,11 +347,11 @@ try_sysfs_read_u64(const char *path, uint64_t *val) > } > > static unsigned long > -sysfs_read(const char *path) > +sysfs_read(enum i915_attr_id id) > { > unsigned long value; > > - igt_assert(igt_sysfs_scanf(sysfs, path, "%lu", &value) == 1); > + igt_assert(igt_sysfs_rps_scanf(sysfs, id, "%lu", &value) == 1); > > return value; > } > @@ -4234,7 +4234,7 @@ gen12_test_single_ctx_render_target_writes_a_counter(void) > > static unsigned long rc6_residency_ms(void) > { > - return sysfs_read("power/rc6_residency_ms"); > + return sysfs_read(RC6_RESIDENCY_MS); > } > > static void > @@ -4257,7 +4257,7 @@ test_rc6_disable(void) > unsigned long rc6_start, rc6_end, rc6_enabled; > > rc6_enabled = 0; > - igt_sysfs_scanf(sysfs, "power/rc6_enable", "%lu", &rc6_enabled); > + igt_sysfs_rps_scanf(sysfs, RC6_ENABLE, "%lu", &rc6_enabled); > igt_require(rc6_enabled); > > /* Verify rc6 is functional by measuring residency while idle */ > @@ -4894,6 +4894,19 @@ done: > return ref_count; > } > > +static int perf_sysfs_open(int i915) > +{ > + int dirfd, gt; > + > + /* use the first available sysfs interface */ > + for_each_sysfs_gt_dirfd(i915, dirfd, gt) > + break; > + > + igt_assert(dirfd != -1); > + > + return dirfd; > +} > + > /* check that an open i915 perf stream holds a reference on the drm i915 module > * including in the corner case where the original drm fd has been closed. > */ > @@ -4929,7 +4942,7 @@ test_i915_ref_count(void) > drm_fd = __drm_open_driver(DRIVER_INTEL); > igt_require_intel(drm_fd); > devid = intel_get_drm_devid(drm_fd); > - sysfs = igt_sysfs_open(drm_fd); > + sysfs = perf_sysfs_open(drm_fd); > > /* Note: these global variables are only initialized after calling > * init_sys_info()... > @@ -5031,14 +5044,14 @@ igt_main > igt_require_gem(drm_fd); > > devid = intel_get_drm_devid(drm_fd); > - sysfs = igt_sysfs_open(drm_fd); > + sysfs = perf_sysfs_open(drm_fd); > > igt_require(init_sys_info()); > > write_u64_file("/proc/sys/dev/i915/perf_stream_paranoid", 1); > write_u64_file("/proc/sys/dev/i915/oa_max_sample_rate", 100000); > > - gt_max_freq_mhz = sysfs_read("gt_boost_freq_mhz"); > + gt_max_freq_mhz = sysfs_read(RPS_RP0_FREQ_MHZ); > > render_copy = igt_get_render_copyfunc(devid); > igt_require_f(render_copy, "no render-copy function\n");