From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9423010E730 for ; Mon, 10 Oct 2022 22:06:42 +0000 (UTC) Date: Mon, 10 Oct 2022 15:06:37 -0700 From: Umesh Nerlige Ramappa To: , Lionel G Landwerlin , Ashutosh Dixit Message-ID: References: <20221010214215.5378-1-umesh.nerlige.ramappa@intel.com> <20221010214215.5378-19-umesh.nerlige.ramappa@intel.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Disposition: inline In-Reply-To: <20221010214215.5378-19-umesh.nerlige.ramappa@intel.com> MIME-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t v6 18/36] tools/i915-perf-recorder: add ability to select device List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" List-ID: On Mon, Oct 10, 2022 at 09:41:57PM +0000, Umesh Nerlige Ramappa wrote: >From: Lionel Landwerlin > >We're starting to have system with multiple Intel GPUs. > >Signed-off-by: Lionel Landwerlin nit: I would use a --list option with arguments like 'devices' or 'metrics', but this works too, so Reviewed-by: Umesh Nerlige Ramappa Umesh >--- > tools/i915-perf/i915_perf_recorder.c | 50 ++++++++++++++++++++++++---- > 1 file changed, 43 insertions(+), 7 deletions(-) > >diff --git a/tools/i915-perf/i915_perf_recorder.c b/tools/i915-perf/i915_perf_recorder.c >index 00195290..7ced7b40 100644 >--- a/tools/i915-perf/i915_perf_recorder.c >+++ b/tools/i915-perf/i915_perf_recorder.c >@@ -250,16 +250,37 @@ find_intel_render_node(void) > return -1; > } > >+static void >+print_intel_devices(void) >+{ >+ fprintf(stdout, "Available devices:\n"); >+ for (int i = 0; i < 128; i++) { >+ if (read_device_param("card", i, "vendor") == 0x8086) { >+ uint32_t devid = read_device_param("card", i, "device"); >+ const struct intel_device_info *devinfo = >+ intel_get_device_info(devid); >+ fprintf(stdout, " %i: %s (0x%04hx)\n", i, >+ devinfo ? devinfo->codename : "unknwon", >+ devid); >+ } >+ } >+} >+ > static int >-open_render_node(uint32_t *devid) >+open_render_node(uint32_t *devid, int card) > { > char *name; > int ret; > int fd; >+ int render; > >- int render = find_intel_render_node(); >- if (render < 0) >- return -1; >+ if (card < 0) { >+ render = find_intel_render_node(); >+ if (render < 0) >+ return -1; >+ } else { >+ render = 128 + card; >+ } > > ret = asprintf(&name, "/dev/dri/renderD%u", render); > assert(ret != -1); >@@ -722,6 +743,9 @@ usage(const char *name) > "Recording tool for i915-perf.\n" > "\n" > " --help, -h Print this screen\n" >+ " --device, -d Device to use\n" >+ " (value=list to list devices\n" >+ " value=1 to use /dev/dri/card1)\n" > " --correlation-period, -c Time period of timestamp correlation in seconds\n" > " (default = 1.0)\n" > " --perf-period, -p Time period of i915-perf reports in seconds\n" >@@ -772,6 +796,7 @@ main(int argc, char *argv[]) > { > const struct option long_options[] = { > {"help", no_argument, 0, 'h'}, >+ {"device", required_argument, 0, 'd'}, > {"correlation-period", required_argument, 0, 'c'}, > {"perf-period", required_argument, 0, 'p'}, > {"metric", required_argument, 0, 'm'}, >@@ -798,7 +823,7 @@ main(int argc, char *argv[]) > struct timespec now; > uint64_t corr_period_ns, poll_time_ns; > uint32_t circular_size = 0; >- int opt; >+ int opt, dev_node_id = -1; > bool list_counters = false; > FILE *output = NULL; > struct recording_context ctx = { >@@ -812,7 +837,7 @@ main(int argc, char *argv[]) > .poll_period = 5 * 1000 * 1000, > }; > >- while ((opt = getopt_long(argc, argv, "hc:p:m:Co:s:f:k:P:", long_options, NULL)) != -1) { >+ while ((opt = getopt_long(argc, argv, "hc:d:p:m:Co:s:f:k:P:", long_options, NULL)) != -1) { > switch (opt) { > case 'h': > usage(argv[0]); >@@ -820,6 +845,12 @@ main(int argc, char *argv[]) > case 'c': > corr_period = atof(optarg); > break; >+ case 'd': >+ if (!strcmp(optarg, "list")) >+ dev_node_id = -2; >+ else >+ dev_node_id = atoi(optarg); >+ break; > case 'p': > perf_period = atof(optarg); > break; >@@ -865,7 +896,12 @@ main(int argc, char *argv[]) > } > } > >- ctx.drm_fd = open_render_node(&ctx.devid); >+ if (dev_node_id == -2) { >+ print_intel_devices(); >+ return EXIT_SUCCESS; >+ } >+ >+ ctx.drm_fd = open_render_node(&ctx.devid, dev_node_id); > if (ctx.drm_fd < 0) { > fprintf(stderr, "Unable to open device.\n"); > return EXIT_FAILURE; >-- >2.25.1 >