From: Matthew Brost <matthew.brost@intel.com>
To: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org,
john.c.harrison@intel.com,
Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>,
daniel.vetter@ffwll.ch
Subject: Re: [Intel-gfx] [PATCH 1/2] drm/i915/pmu: Add a name to the execlists stats
Date: Wed, 27 Oct 2021 11:56:26 -0700 [thread overview]
Message-ID: <20211027185626.GA16049@jons-linux-dev-box> (raw)
In-Reply-To: <20211027004821.66097-1-umesh.nerlige.ramappa@intel.com>
On Tue, Oct 26, 2021 at 05:48:20PM -0700, Umesh Nerlige Ramappa wrote:
> In preparation for GuC pmu stats, add a name to the execlists stats
> structure so that it can be differentiated from the GuC stats.
>
> Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
> ---
> drivers/gpu/drm/i915/gt/intel_engine_cs.c | 14 +++---
> drivers/gpu/drm/i915/gt/intel_engine_stats.h | 33 +++++++------
> drivers/gpu/drm/i915/gt/intel_engine_types.h | 52 +++++++++++---------
> 3 files changed, 53 insertions(+), 46 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> index ff6753ccb129..2de396e34d83 100644
> --- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> +++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> @@ -363,7 +363,7 @@ static int intel_engine_setup(struct intel_gt *gt, enum intel_engine_id id,
> DRIVER_CAPS(i915)->has_logical_contexts = true;
>
> ewma__engine_latency_init(&engine->latency);
> - seqcount_init(&engine->stats.lock);
> + seqcount_init(&engine->stats.execlists.lock);
>
> ATOMIC_INIT_NOTIFIER_HEAD(&engine->context_status_notifier);
>
> @@ -1918,15 +1918,16 @@ void intel_engine_dump(struct intel_engine_cs *engine,
> static ktime_t __intel_engine_get_busy_time(struct intel_engine_cs *engine,
> ktime_t *now)
> {
> - ktime_t total = engine->stats.total;
> + struct intel_engine_execlists_stats *stats = &engine->stats.execlists;
> + ktime_t total = stats->total;
>
> /*
> * If the engine is executing something at the moment
> * add it to the total.
> */
> *now = ktime_get();
> - if (READ_ONCE(engine->stats.active))
> - total = ktime_add(total, ktime_sub(*now, engine->stats.start));
> + if (READ_ONCE(stats->active))
> + total = ktime_add(total, ktime_sub(*now, stats->start));
>
> return total;
> }
> @@ -1940,13 +1941,14 @@ static ktime_t __intel_engine_get_busy_time(struct intel_engine_cs *engine,
> */
> ktime_t intel_engine_get_busy_time(struct intel_engine_cs *engine, ktime_t *now)
> {
> + struct intel_engine_execlists_stats *stats = &engine->stats.execlists;
> unsigned int seq;
> ktime_t total;
>
> do {
> - seq = read_seqcount_begin(&engine->stats.lock);
> + seq = read_seqcount_begin(&stats->lock);
> total = __intel_engine_get_busy_time(engine, now);
> - } while (read_seqcount_retry(&engine->stats.lock, seq));
> + } while (read_seqcount_retry(&stats->lock, seq));
>
> return total;
> }
> diff --git a/drivers/gpu/drm/i915/gt/intel_engine_stats.h b/drivers/gpu/drm/i915/gt/intel_engine_stats.h
> index 24fbdd94351a..8e762d683e50 100644
> --- a/drivers/gpu/drm/i915/gt/intel_engine_stats.h
> +++ b/drivers/gpu/drm/i915/gt/intel_engine_stats.h
> @@ -15,45 +15,46 @@
>
> static inline void intel_engine_context_in(struct intel_engine_cs *engine)
> {
> + struct intel_engine_execlists_stats *stats = &engine->stats.execlists;
> unsigned long flags;
>
> - if (engine->stats.active) {
> - engine->stats.active++;
> + if (stats->active) {
> + stats->active++;
> return;
> }
>
> /* The writer is serialised; but the pmu reader may be from hardirq */
> local_irq_save(flags);
> - write_seqcount_begin(&engine->stats.lock);
> + write_seqcount_begin(&stats->lock);
>
> - engine->stats.start = ktime_get();
> - engine->stats.active++;
> + stats->start = ktime_get();
> + stats->active++;
>
> - write_seqcount_end(&engine->stats.lock);
> + write_seqcount_end(&stats->lock);
> local_irq_restore(flags);
>
> - GEM_BUG_ON(!engine->stats.active);
> + GEM_BUG_ON(!stats->active);
> }
>
> static inline void intel_engine_context_out(struct intel_engine_cs *engine)
> {
> + struct intel_engine_execlists_stats *stats = &engine->stats.execlists;
> unsigned long flags;
>
> - GEM_BUG_ON(!engine->stats.active);
> - if (engine->stats.active > 1) {
> - engine->stats.active--;
> + GEM_BUG_ON(!stats->active);
> + if (stats->active > 1) {
> + stats->active--;
> return;
> }
>
> local_irq_save(flags);
> - write_seqcount_begin(&engine->stats.lock);
> + write_seqcount_begin(&stats->lock);
>
> - engine->stats.active--;
> - engine->stats.total =
> - ktime_add(engine->stats.total,
> - ktime_sub(ktime_get(), engine->stats.start));
> + stats->active--;
> + stats->total = ktime_add(stats->total,
> + ktime_sub(ktime_get(), stats->start));
>
> - write_seqcount_end(&engine->stats.lock);
> + write_seqcount_end(&stats->lock);
> local_irq_restore(flags);
> }
>
> diff --git a/drivers/gpu/drm/i915/gt/intel_engine_types.h b/drivers/gpu/drm/i915/gt/intel_engine_types.h
> index e0f773585c29..24fa7fb0e7de 100644
> --- a/drivers/gpu/drm/i915/gt/intel_engine_types.h
> +++ b/drivers/gpu/drm/i915/gt/intel_engine_types.h
> @@ -257,6 +257,33 @@ struct intel_engine_execlists {
>
> #define INTEL_ENGINE_CS_MAX_NAME 8
>
> +struct intel_engine_execlists_stats {
> + /**
> + * @active: Number of contexts currently scheduled in.
> + */
> + unsigned int active;
> +
> + /**
> + * @lock: Lock protecting the below fields.
> + */
> + seqcount_t lock;
> +
> + /**
> + * @total: Total time this engine was busy.
> + *
> + * Accumulated time not counting the most recent block in cases where
> + * engine is currently busy (active > 0).
> + */
> + ktime_t total;
> +
> + /**
> + * @start: Timestamp of the last idle to active transition.
> + *
> + * Idle is defined as active == 0, active is active > 0.
> + */
> + ktime_t start;
> +};
> +
> struct intel_engine_cs {
> struct drm_i915_private *i915;
> struct intel_gt *gt;
> @@ -488,30 +515,7 @@ struct intel_engine_cs {
> u32 (*get_cmd_length_mask)(u32 cmd_header);
>
> struct {
> - /**
> - * @active: Number of contexts currently scheduled in.
> - */
> - unsigned int active;
> -
> - /**
> - * @lock: Lock protecting the below fields.
> - */
> - seqcount_t lock;
> -
> - /**
> - * @total: Total time this engine was busy.
> - *
> - * Accumulated time not counting the most recent block in cases
> - * where engine is currently busy (active > 0).
> - */
> - ktime_t total;
> -
> - /**
> - * @start: Timestamp of the last idle to active transition.
> - *
> - * Idle is defined as active == 0, active is active > 0.
> - */
> - ktime_t start;
> + struct intel_engine_execlists_stats execlists;
I'd probably just define this sub-structure inline rather defining it
above. e.g.
struct {
struct {
fields...
} execlists;
} stats;
Then the follow up patch:
union {
struct {
fields...
} execlists;
struct {
fields...
} guc;
} stats;
Or if there is common fields:
struct {
common fields...
struct {
fields...
} execlists;
struct {
fields...
} guc;
} stats;
That being said, if you prefer to leave it as is, that's fine too.
With that:
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
>
> /**
> * @rps: Utilisation at last RPS sampling.
> --
> 2.20.1
>
WARNING: multiple messages have this Message-ID (diff)
From: Matthew Brost <matthew.brost@intel.com>
To: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org,
john.c.harrison@intel.com,
Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>,
daniel.vetter@ffwll.ch
Subject: Re: [PATCH 1/2] drm/i915/pmu: Add a name to the execlists stats
Date: Wed, 27 Oct 2021 11:56:26 -0700 [thread overview]
Message-ID: <20211027185626.GA16049@jons-linux-dev-box> (raw)
In-Reply-To: <20211027004821.66097-1-umesh.nerlige.ramappa@intel.com>
On Tue, Oct 26, 2021 at 05:48:20PM -0700, Umesh Nerlige Ramappa wrote:
> In preparation for GuC pmu stats, add a name to the execlists stats
> structure so that it can be differentiated from the GuC stats.
>
> Signed-off-by: Umesh Nerlige Ramappa <umesh.nerlige.ramappa@intel.com>
> ---
> drivers/gpu/drm/i915/gt/intel_engine_cs.c | 14 +++---
> drivers/gpu/drm/i915/gt/intel_engine_stats.h | 33 +++++++------
> drivers/gpu/drm/i915/gt/intel_engine_types.h | 52 +++++++++++---------
> 3 files changed, 53 insertions(+), 46 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> index ff6753ccb129..2de396e34d83 100644
> --- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> +++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> @@ -363,7 +363,7 @@ static int intel_engine_setup(struct intel_gt *gt, enum intel_engine_id id,
> DRIVER_CAPS(i915)->has_logical_contexts = true;
>
> ewma__engine_latency_init(&engine->latency);
> - seqcount_init(&engine->stats.lock);
> + seqcount_init(&engine->stats.execlists.lock);
>
> ATOMIC_INIT_NOTIFIER_HEAD(&engine->context_status_notifier);
>
> @@ -1918,15 +1918,16 @@ void intel_engine_dump(struct intel_engine_cs *engine,
> static ktime_t __intel_engine_get_busy_time(struct intel_engine_cs *engine,
> ktime_t *now)
> {
> - ktime_t total = engine->stats.total;
> + struct intel_engine_execlists_stats *stats = &engine->stats.execlists;
> + ktime_t total = stats->total;
>
> /*
> * If the engine is executing something at the moment
> * add it to the total.
> */
> *now = ktime_get();
> - if (READ_ONCE(engine->stats.active))
> - total = ktime_add(total, ktime_sub(*now, engine->stats.start));
> + if (READ_ONCE(stats->active))
> + total = ktime_add(total, ktime_sub(*now, stats->start));
>
> return total;
> }
> @@ -1940,13 +1941,14 @@ static ktime_t __intel_engine_get_busy_time(struct intel_engine_cs *engine,
> */
> ktime_t intel_engine_get_busy_time(struct intel_engine_cs *engine, ktime_t *now)
> {
> + struct intel_engine_execlists_stats *stats = &engine->stats.execlists;
> unsigned int seq;
> ktime_t total;
>
> do {
> - seq = read_seqcount_begin(&engine->stats.lock);
> + seq = read_seqcount_begin(&stats->lock);
> total = __intel_engine_get_busy_time(engine, now);
> - } while (read_seqcount_retry(&engine->stats.lock, seq));
> + } while (read_seqcount_retry(&stats->lock, seq));
>
> return total;
> }
> diff --git a/drivers/gpu/drm/i915/gt/intel_engine_stats.h b/drivers/gpu/drm/i915/gt/intel_engine_stats.h
> index 24fbdd94351a..8e762d683e50 100644
> --- a/drivers/gpu/drm/i915/gt/intel_engine_stats.h
> +++ b/drivers/gpu/drm/i915/gt/intel_engine_stats.h
> @@ -15,45 +15,46 @@
>
> static inline void intel_engine_context_in(struct intel_engine_cs *engine)
> {
> + struct intel_engine_execlists_stats *stats = &engine->stats.execlists;
> unsigned long flags;
>
> - if (engine->stats.active) {
> - engine->stats.active++;
> + if (stats->active) {
> + stats->active++;
> return;
> }
>
> /* The writer is serialised; but the pmu reader may be from hardirq */
> local_irq_save(flags);
> - write_seqcount_begin(&engine->stats.lock);
> + write_seqcount_begin(&stats->lock);
>
> - engine->stats.start = ktime_get();
> - engine->stats.active++;
> + stats->start = ktime_get();
> + stats->active++;
>
> - write_seqcount_end(&engine->stats.lock);
> + write_seqcount_end(&stats->lock);
> local_irq_restore(flags);
>
> - GEM_BUG_ON(!engine->stats.active);
> + GEM_BUG_ON(!stats->active);
> }
>
> static inline void intel_engine_context_out(struct intel_engine_cs *engine)
> {
> + struct intel_engine_execlists_stats *stats = &engine->stats.execlists;
> unsigned long flags;
>
> - GEM_BUG_ON(!engine->stats.active);
> - if (engine->stats.active > 1) {
> - engine->stats.active--;
> + GEM_BUG_ON(!stats->active);
> + if (stats->active > 1) {
> + stats->active--;
> return;
> }
>
> local_irq_save(flags);
> - write_seqcount_begin(&engine->stats.lock);
> + write_seqcount_begin(&stats->lock);
>
> - engine->stats.active--;
> - engine->stats.total =
> - ktime_add(engine->stats.total,
> - ktime_sub(ktime_get(), engine->stats.start));
> + stats->active--;
> + stats->total = ktime_add(stats->total,
> + ktime_sub(ktime_get(), stats->start));
>
> - write_seqcount_end(&engine->stats.lock);
> + write_seqcount_end(&stats->lock);
> local_irq_restore(flags);
> }
>
> diff --git a/drivers/gpu/drm/i915/gt/intel_engine_types.h b/drivers/gpu/drm/i915/gt/intel_engine_types.h
> index e0f773585c29..24fa7fb0e7de 100644
> --- a/drivers/gpu/drm/i915/gt/intel_engine_types.h
> +++ b/drivers/gpu/drm/i915/gt/intel_engine_types.h
> @@ -257,6 +257,33 @@ struct intel_engine_execlists {
>
> #define INTEL_ENGINE_CS_MAX_NAME 8
>
> +struct intel_engine_execlists_stats {
> + /**
> + * @active: Number of contexts currently scheduled in.
> + */
> + unsigned int active;
> +
> + /**
> + * @lock: Lock protecting the below fields.
> + */
> + seqcount_t lock;
> +
> + /**
> + * @total: Total time this engine was busy.
> + *
> + * Accumulated time not counting the most recent block in cases where
> + * engine is currently busy (active > 0).
> + */
> + ktime_t total;
> +
> + /**
> + * @start: Timestamp of the last idle to active transition.
> + *
> + * Idle is defined as active == 0, active is active > 0.
> + */
> + ktime_t start;
> +};
> +
> struct intel_engine_cs {
> struct drm_i915_private *i915;
> struct intel_gt *gt;
> @@ -488,30 +515,7 @@ struct intel_engine_cs {
> u32 (*get_cmd_length_mask)(u32 cmd_header);
>
> struct {
> - /**
> - * @active: Number of contexts currently scheduled in.
> - */
> - unsigned int active;
> -
> - /**
> - * @lock: Lock protecting the below fields.
> - */
> - seqcount_t lock;
> -
> - /**
> - * @total: Total time this engine was busy.
> - *
> - * Accumulated time not counting the most recent block in cases
> - * where engine is currently busy (active > 0).
> - */
> - ktime_t total;
> -
> - /**
> - * @start: Timestamp of the last idle to active transition.
> - *
> - * Idle is defined as active == 0, active is active > 0.
> - */
> - ktime_t start;
> + struct intel_engine_execlists_stats execlists;
I'd probably just define this sub-structure inline rather defining it
above. e.g.
struct {
struct {
fields...
} execlists;
} stats;
Then the follow up patch:
union {
struct {
fields...
} execlists;
struct {
fields...
} guc;
} stats;
Or if there is common fields:
struct {
common fields...
struct {
fields...
} execlists;
struct {
fields...
} guc;
} stats;
That being said, if you prefer to leave it as is, that's fine too.
With that:
Reviewed-by: Matthew Brost <matthew.brost@intel.com>
>
> /**
> * @rps: Utilisation at last RPS sampling.
> --
> 2.20.1
>
next prev parent reply other threads:[~2021-10-27 19:01 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-27 0:48 [Intel-gfx] [PATCH 1/2] drm/i915/pmu: Add a name to the execlists stats Umesh Nerlige Ramappa
2021-10-27 0:48 ` Umesh Nerlige Ramappa
2021-10-27 0:48 ` [Intel-gfx] [PATCH 2/2] drm/i915/pmu: Connect engine busyness stats from GuC to pmu Umesh Nerlige Ramappa
2021-10-27 0:48 ` Umesh Nerlige Ramappa
2021-10-27 20:02 ` [Intel-gfx] " Matthew Brost
2021-10-27 20:02 ` Matthew Brost
2021-10-30 0:40 ` [Intel-gfx] " Umesh Nerlige Ramappa
2022-10-21 8:42 ` Tvrtko Ursulin
2022-10-21 8:42 ` Tvrtko Ursulin
2022-10-22 0:21 ` [Intel-gfx] " Umesh Nerlige Ramappa
2022-10-22 0:21 ` Umesh Nerlige Ramappa
2021-10-27 0:58 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for series starting with [1/2] drm/i915/pmu: Add a name to the execlists stats Patchwork
2021-10-27 1:27 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2021-10-27 2:49 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
2021-10-27 18:56 ` Matthew Brost [this message]
2021-10-27 18:56 ` [PATCH 1/2] " Matthew Brost
-- strict thread matches above, loose matches on Subject: below --
2021-10-15 23:47 [Intel-gfx] " Umesh Nerlige Ramappa
2021-10-15 1:18 Umesh Nerlige Ramappa
2021-10-13 0:56 Umesh Nerlige Ramappa
2021-10-07 22:55 Umesh Nerlige Ramappa
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=20211027185626.GA16049@jons-linux-dev-box \
--to=matthew.brost@intel.com \
--cc=daniel.vetter@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=john.c.harrison@intel.com \
--cc=tvrtko.ursulin@linux.intel.com \
--cc=umesh.nerlige.ramappa@intel.com \
/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: link
Be 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.