From: Chris Wilson <chris@chris-wilson.co.uk> To: dri-devel@lists.freedesktop.org Cc: intel-gfx@lists.freedesktop.org, Chris Wilson <chris@chris-wilson.co.uk> Subject: [RFC 3/3] drm/i915/gt: Export device and per-process runtimes via procfs Date: Thu, 4 Feb 2021 12:11:21 +0000 [thread overview] Message-ID: <20210204121121.2660-3-chris@chris-wilson.co.uk> (raw) In-Reply-To: <20210204121121.2660-1-chris@chris-wilson.co.uk> Register with /proc/gpu to provide the client runtimes for generic top-like overview, e.g. gnome-system-monitor can use this information to show the per-process multi-GPU usage. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> --- drivers/gpu/drm/i915/Makefile | 1 + drivers/gpu/drm/i915/gt/intel_gt.c | 5 ++ drivers/gpu/drm/i915/gt/intel_gt_proc.c | 66 ++++++++++++++++++++++++ drivers/gpu/drm/i915/gt/intel_gt_proc.h | 14 +++++ drivers/gpu/drm/i915/gt/intel_gt_types.h | 3 ++ 5 files changed, 89 insertions(+) create mode 100644 drivers/gpu/drm/i915/gt/intel_gt_proc.c create mode 100644 drivers/gpu/drm/i915/gt/intel_gt_proc.h diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile index ce01634d4ea7..16171f65f5d1 100644 --- a/drivers/gpu/drm/i915/Makefile +++ b/drivers/gpu/drm/i915/Makefile @@ -104,6 +104,7 @@ gt-y += \ gt/intel_gt_irq.o \ gt/intel_gt_pm.o \ gt/intel_gt_pm_irq.o \ + gt/intel_gt_proc.o \ gt/intel_gt_requests.o \ gt/intel_gtt.o \ gt/intel_llc.o \ diff --git a/drivers/gpu/drm/i915/gt/intel_gt.c b/drivers/gpu/drm/i915/gt/intel_gt.c index ca76f93bc03d..72199c13330d 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt.c +++ b/drivers/gpu/drm/i915/gt/intel_gt.c @@ -12,6 +12,7 @@ #include "intel_gt_buffer_pool.h" #include "intel_gt_clock_utils.h" #include "intel_gt_pm.h" +#include "intel_gt_proc.h" #include "intel_gt_requests.h" #include "intel_mocs.h" #include "intel_rc6.h" @@ -373,6 +374,8 @@ void intel_gt_driver_register(struct intel_gt *gt) intel_rps_driver_register(>->rps); debugfs_gt_register(gt); + + intel_gt_driver_register__proc(gt); } static int intel_gt_init_scratch(struct intel_gt *gt, unsigned int size) @@ -656,6 +659,8 @@ void intel_gt_driver_unregister(struct intel_gt *gt) { intel_wakeref_t wakeref; + intel_gt_driver_unregister__proc(gt); + intel_rps_driver_unregister(>->rps); /* diff --git a/drivers/gpu/drm/i915/gt/intel_gt_proc.c b/drivers/gpu/drm/i915/gt/intel_gt_proc.c new file mode 100644 index 000000000000..42db22326c7c --- /dev/null +++ b/drivers/gpu/drm/i915/gt/intel_gt_proc.c @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: MIT +/* + * Copyright © 2020 Intel Corporation + */ + +#include <linux/proc_gpu.h> + +#include "i915_drm_client.h" +#include "i915_drv.h" +#include "intel_gt.h" +#include "intel_gt_pm.h" +#include "intel_gt_proc.h" + +static void proc_runtime_pid(struct intel_gt *gt, + struct pid *pid, + struct proc_gpu_runtime *rt) +{ + struct i915_drm_clients *clients = >->i915->clients; + + BUILD_BUG_ON(MAX_ENGINE_CLASS >= ARRAY_SIZE(rt->channel)); + + rt->device = i915_drm_clients_get_runtime(clients, pid, rt->channel); + rt->nchannel = MAX_ENGINE_CLASS + 1; +} + +static void proc_runtime_device(struct intel_gt *gt, + struct pid *pid, + struct proc_gpu_runtime *rt) +{ + struct intel_engine_cs *engine; + enum intel_engine_id id; + ktime_t dummy; + + rt->nchannel = 0; + for_each_engine(engine, gt, id) { + rt->channel[rt->nchannel++] = + intel_engine_get_busy_time(engine, &dummy); + if (rt->nchannel == ARRAY_SIZE(rt->channel)) + break; + } + rt->device = intel_gt_get_awake_time(gt); +} + +static void proc_runtime(struct proc_gpu *pg, + struct pid *pid, + struct proc_gpu_runtime *rt) +{ + struct intel_gt *gt = container_of(pg, typeof(*gt), proc); + + strscpy(rt->name, dev_name(gt->i915->drm.dev), sizeof(rt->name)); + if (pid) + proc_runtime_pid(gt, pid, rt); + else + proc_runtime_device(gt, pid, rt); +} + +void intel_gt_driver_register__proc(struct intel_gt *gt) +{ + gt->proc.fn = proc_runtime; + proc_gpu_register(>->proc); +} + +void intel_gt_driver_unregister__proc(struct intel_gt *gt) +{ + proc_gpu_unregister(>->proc); +} diff --git a/drivers/gpu/drm/i915/gt/intel_gt_proc.h b/drivers/gpu/drm/i915/gt/intel_gt_proc.h new file mode 100644 index 000000000000..7a9bff0fb020 --- /dev/null +++ b/drivers/gpu/drm/i915/gt/intel_gt_proc.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: MIT */ +/* + * Copyright © 2020 Intel Corporation + */ + +#ifndef INTEL_GT_PROC_H +#define INTEL_GT_PROC_H + +struct intel_gt; + +void intel_gt_driver_register__proc(struct intel_gt *gt); +void intel_gt_driver_unregister__proc(struct intel_gt *gt); + +#endif /* INTEL_GT_PROC_H */ diff --git a/drivers/gpu/drm/i915/gt/intel_gt_types.h b/drivers/gpu/drm/i915/gt/intel_gt_types.h index 626af37c7790..3fc6d9741764 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt_types.h +++ b/drivers/gpu/drm/i915/gt/intel_gt_types.h @@ -10,6 +10,7 @@ #include <linux/list.h> #include <linux/mutex.h> #include <linux/notifier.h> +#include <linux/proc_gpu.h> #include <linux/spinlock.h> #include <linux/types.h> @@ -135,6 +136,8 @@ struct intel_gt { struct i915_vma *scratch; + struct proc_gpu proc; + struct intel_gt_info { intel_engine_mask_t engine_mask; u8 num_engines; -- 2.20.1 _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
WARNING: multiple messages have this Message-ID (diff)
From: Chris Wilson <chris@chris-wilson.co.uk> To: dri-devel@lists.freedesktop.org Cc: intel-gfx@lists.freedesktop.org, Chris Wilson <chris@chris-wilson.co.uk> Subject: [Intel-gfx] [RFC 3/3] drm/i915/gt: Export device and per-process runtimes via procfs Date: Thu, 4 Feb 2021 12:11:21 +0000 [thread overview] Message-ID: <20210204121121.2660-3-chris@chris-wilson.co.uk> (raw) In-Reply-To: <20210204121121.2660-1-chris@chris-wilson.co.uk> Register with /proc/gpu to provide the client runtimes for generic top-like overview, e.g. gnome-system-monitor can use this information to show the per-process multi-GPU usage. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> --- drivers/gpu/drm/i915/Makefile | 1 + drivers/gpu/drm/i915/gt/intel_gt.c | 5 ++ drivers/gpu/drm/i915/gt/intel_gt_proc.c | 66 ++++++++++++++++++++++++ drivers/gpu/drm/i915/gt/intel_gt_proc.h | 14 +++++ drivers/gpu/drm/i915/gt/intel_gt_types.h | 3 ++ 5 files changed, 89 insertions(+) create mode 100644 drivers/gpu/drm/i915/gt/intel_gt_proc.c create mode 100644 drivers/gpu/drm/i915/gt/intel_gt_proc.h diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile index ce01634d4ea7..16171f65f5d1 100644 --- a/drivers/gpu/drm/i915/Makefile +++ b/drivers/gpu/drm/i915/Makefile @@ -104,6 +104,7 @@ gt-y += \ gt/intel_gt_irq.o \ gt/intel_gt_pm.o \ gt/intel_gt_pm_irq.o \ + gt/intel_gt_proc.o \ gt/intel_gt_requests.o \ gt/intel_gtt.o \ gt/intel_llc.o \ diff --git a/drivers/gpu/drm/i915/gt/intel_gt.c b/drivers/gpu/drm/i915/gt/intel_gt.c index ca76f93bc03d..72199c13330d 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt.c +++ b/drivers/gpu/drm/i915/gt/intel_gt.c @@ -12,6 +12,7 @@ #include "intel_gt_buffer_pool.h" #include "intel_gt_clock_utils.h" #include "intel_gt_pm.h" +#include "intel_gt_proc.h" #include "intel_gt_requests.h" #include "intel_mocs.h" #include "intel_rc6.h" @@ -373,6 +374,8 @@ void intel_gt_driver_register(struct intel_gt *gt) intel_rps_driver_register(>->rps); debugfs_gt_register(gt); + + intel_gt_driver_register__proc(gt); } static int intel_gt_init_scratch(struct intel_gt *gt, unsigned int size) @@ -656,6 +659,8 @@ void intel_gt_driver_unregister(struct intel_gt *gt) { intel_wakeref_t wakeref; + intel_gt_driver_unregister__proc(gt); + intel_rps_driver_unregister(>->rps); /* diff --git a/drivers/gpu/drm/i915/gt/intel_gt_proc.c b/drivers/gpu/drm/i915/gt/intel_gt_proc.c new file mode 100644 index 000000000000..42db22326c7c --- /dev/null +++ b/drivers/gpu/drm/i915/gt/intel_gt_proc.c @@ -0,0 +1,66 @@ +// SPDX-License-Identifier: MIT +/* + * Copyright © 2020 Intel Corporation + */ + +#include <linux/proc_gpu.h> + +#include "i915_drm_client.h" +#include "i915_drv.h" +#include "intel_gt.h" +#include "intel_gt_pm.h" +#include "intel_gt_proc.h" + +static void proc_runtime_pid(struct intel_gt *gt, + struct pid *pid, + struct proc_gpu_runtime *rt) +{ + struct i915_drm_clients *clients = >->i915->clients; + + BUILD_BUG_ON(MAX_ENGINE_CLASS >= ARRAY_SIZE(rt->channel)); + + rt->device = i915_drm_clients_get_runtime(clients, pid, rt->channel); + rt->nchannel = MAX_ENGINE_CLASS + 1; +} + +static void proc_runtime_device(struct intel_gt *gt, + struct pid *pid, + struct proc_gpu_runtime *rt) +{ + struct intel_engine_cs *engine; + enum intel_engine_id id; + ktime_t dummy; + + rt->nchannel = 0; + for_each_engine(engine, gt, id) { + rt->channel[rt->nchannel++] = + intel_engine_get_busy_time(engine, &dummy); + if (rt->nchannel == ARRAY_SIZE(rt->channel)) + break; + } + rt->device = intel_gt_get_awake_time(gt); +} + +static void proc_runtime(struct proc_gpu *pg, + struct pid *pid, + struct proc_gpu_runtime *rt) +{ + struct intel_gt *gt = container_of(pg, typeof(*gt), proc); + + strscpy(rt->name, dev_name(gt->i915->drm.dev), sizeof(rt->name)); + if (pid) + proc_runtime_pid(gt, pid, rt); + else + proc_runtime_device(gt, pid, rt); +} + +void intel_gt_driver_register__proc(struct intel_gt *gt) +{ + gt->proc.fn = proc_runtime; + proc_gpu_register(>->proc); +} + +void intel_gt_driver_unregister__proc(struct intel_gt *gt) +{ + proc_gpu_unregister(>->proc); +} diff --git a/drivers/gpu/drm/i915/gt/intel_gt_proc.h b/drivers/gpu/drm/i915/gt/intel_gt_proc.h new file mode 100644 index 000000000000..7a9bff0fb020 --- /dev/null +++ b/drivers/gpu/drm/i915/gt/intel_gt_proc.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: MIT */ +/* + * Copyright © 2020 Intel Corporation + */ + +#ifndef INTEL_GT_PROC_H +#define INTEL_GT_PROC_H + +struct intel_gt; + +void intel_gt_driver_register__proc(struct intel_gt *gt); +void intel_gt_driver_unregister__proc(struct intel_gt *gt); + +#endif /* INTEL_GT_PROC_H */ diff --git a/drivers/gpu/drm/i915/gt/intel_gt_types.h b/drivers/gpu/drm/i915/gt/intel_gt_types.h index 626af37c7790..3fc6d9741764 100644 --- a/drivers/gpu/drm/i915/gt/intel_gt_types.h +++ b/drivers/gpu/drm/i915/gt/intel_gt_types.h @@ -10,6 +10,7 @@ #include <linux/list.h> #include <linux/mutex.h> #include <linux/notifier.h> +#include <linux/proc_gpu.h> #include <linux/spinlock.h> #include <linux/types.h> @@ -135,6 +136,8 @@ struct intel_gt { struct i915_vma *scratch; + struct proc_gpu proc; + struct intel_gt_info { intel_engine_mask_t engine_mask; u8 num_engines; -- 2.20.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2021-02-04 12:11 UTC|newest] Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-02-04 12:11 [RFC 1/3] proc: Show GPU runtimes Chris Wilson 2021-02-04 12:11 ` [Intel-gfx] " Chris Wilson 2021-02-04 12:11 ` [RFC 2/3] drm/i915: Look up clients by pid Chris Wilson 2021-02-04 12:11 ` [Intel-gfx] " Chris Wilson 2021-02-04 12:11 ` Chris Wilson [this message] 2021-02-04 12:11 ` [Intel-gfx] [RFC 3/3] drm/i915/gt: Export device and per-process runtimes via procfs Chris Wilson 2021-02-12 14:57 ` Emil Velikov 2021-02-12 14:57 ` [Intel-gfx] " Emil Velikov 2021-02-12 15:16 ` Chris Wilson 2021-02-12 15:16 ` [Intel-gfx] " Chris Wilson 2021-02-12 15:45 ` Emil Velikov 2021-02-12 15:45 ` [Intel-gfx] " Emil Velikov 2021-02-12 16:07 ` Chris Wilson 2021-02-12 16:07 ` [Intel-gfx] " Chris Wilson 2021-02-04 17:01 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for series starting with [RFC,1/3] proc: Show GPU runtimes Patchwork 2021-02-04 17:31 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork 2021-02-04 22:16 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210204121121.2660-3-chris@chris-wilson.co.uk \ --to=chris@chris-wilson.co.uk \ --cc=dri-devel@lists.freedesktop.org \ --cc=intel-gfx@lists.freedesktop.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.