[Intel-gfx] [PATCH i-g-t 2/2] intel_gpu_top: Add option to sort by PID
Chris Wilson
chris at chris-wilson.co.uk
Wed Feb 3 11:50:28 UTC 2021
Quoting Tvrtko Ursulin (2021-02-03 11:44:56)
> From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
>
> Useful to mimick top view.
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> ---
> man/intel_gpu_top.rst | 2 +-
> tools/intel_gpu_top.c | 46 +++++++++++++++++++++++++++++++------------
> 2 files changed, 34 insertions(+), 14 deletions(-)
>
> diff --git a/man/intel_gpu_top.rst b/man/intel_gpu_top.rst
> index 118d8b953a70..b145d85c0440 100644
> --- a/man/intel_gpu_top.rst
> +++ b/man/intel_gpu_top.rst
> @@ -56,7 +56,7 @@ Supported keys:
> 'q' Exit from the tool.
> '1' Toggle between aggregated engine class and physical engine mode.
> 'n' Toggle display of numeric client busyness overlay.
> - 's' Toggle between sort modes (runtime, total runtime, client id).
> + 's' Toggle between sort modes (runtime, total runtime, pid, client id).
> 'i' Toggle display of clients which used no GPU time.
>
> DEVICE SELECTION
> diff --git a/tools/intel_gpu_top.c b/tools/intel_gpu_top.c
> index b409106f3718..24a87d2f4f3f 100644
> --- a/tools/intel_gpu_top.c
> +++ b/tools/intel_gpu_top.c
> @@ -959,6 +959,24 @@ static int client_id_cmp(const void *_a, const void *_b)
> return (int)b->id - a->id;
> }
>
> +static int client_pid_cmp(const void *_a, const void *_b)
> +{
> + const struct client *a = _a;
> + const struct client *b = _b;
> + int pid_a, pid_b;
> +
> + pid_a = a->status == ALIVE ? a->pid : INT_MAX;
> + pid_b = b->status == ALIVE ? b->pid : INT_MAX;
> +
> + pid_b -= pid_a;
> + if (pid_b > 0)
> + return -1;
> + if (pid_b < 0)
> + return 1;
> +
> + return (int)a->id - b->id;
> +}
> +
> static int (*client_cmp)(const void *, const void *) = client_last_cmp;
>
> static void sort_clients(struct clients *clients)
> @@ -2149,21 +2167,23 @@ static void interactive_stdin(void)
>
> static void select_client_sort(void)
> {
> + struct {
> + int (*cmp)(const void *, const void *);
> + const char *msg;
> + } cmp[] = {
> + { client_last_cmp, "Sorting clients by current GPU usage." },
> + { client_total_cmp, "Sorting clients by accummulated GPU usage." },
> + { client_pid_cmp, "Sorting clients by pid." },
> + { client_id_cmp, "Sorting clients by sysfs id." },
> + };
> static unsigned int client_sort;
>
> - switch (++client_sort % 3) {
> - case 0:
> - client_cmp = client_last_cmp;
> - header_msg = "Sorting clients by current GPU usage.";
> - break;
> - case 1:
> - client_cmp = client_total_cmp;
> - header_msg = "Sorting clients by accummulated GPU usage.";
> - break;
> - case 2:
> - client_cmp = client_id_cmp;
> - header_msg = "Sorting clients by sysfs id.";
> - }
> + ++client_sort;
> + if (client_sort >= ARRAY_SIZE(cmp))
> + client_sort = 0;
> +
> + client_cmp = cmp[client_sort].cmp;
> + header_msg = cmp[client_sort].msg;
> }
Reviewed-by: Chris Wilson <chris at chris-wilson.co.uk>
-Chris
More information about the Intel-gfx
mailing list