[igt-dev] [PATCH i-g-t 10/23] i915/perf: Use gt in perf tests and lib
Lionel Landwerlin
lionel.g.landwerlin at intel.com
Tue Sep 6 13:13:11 UTC 2022
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 <umesh.nerlige.ramappa at intel.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
> ---
> 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");
More information about the igt-dev
mailing list