intel-gfx.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
From: Andi Shyti <andi@etezian.org>
To: Chris Wilson <chris@chris-wilson.co.uk>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [Intel-gfx] [PATCH 08/10] drm/i915/selftests: Measure set-priority duration
Date: Tue, 26 Jan 2021 20:05:38 +0200	[thread overview]
Message-ID: <YBBZ8lbpS4QW49UX@jack.zhora.eu> (raw)
In-Reply-To: <20210120122205.2808-8-chris@chris-wilson.co.uk>

On Wed, Jan 20, 2021 at 12:22:03PM +0000, Chris Wilson wrote:
> As a topological sort, we expect it to run in linear graph time,
> O(V+E). In removing the recursion, it is no longer a DFS but rather a
> BFS, and performs as O(VE). Let's demonstrate how bad this is with a few
> examples, and build a few test cases to verify a potential fix.

very noble purpose, but...

[...]

> +static int sparse(struct drm_i915_private *i915,
> +		  bool (*fn)(struct i915_request *rq,
> +			     unsigned long v, unsigned long e))
> +{
> +	return chains(i915, sparse_chain, fn);
> +}

... this is quite an intricate web of functions calling each
other.

Is there any simplier way to do this? This is that kind of code
that if you go on holiday for a few days you forget what you
wrote.

I do need three drawing boards and 24 fingers for keeping track
of what's happening here. :)

> +
> +static void report(const char *what, unsigned long v, unsigned long e, u64 dt)
> +{
> +	pr_info("(%4lu, %7lu), %s:%10lluns\n", v, e, what, dt);
> +}
> +
> +static u64 __set_priority(struct i915_request *rq, int prio)
> +{
> +	u64 dt;
> +
> +	preempt_disable();
> +	dt = ktime_get_raw_fast_ns();
> +	i915_request_set_priority(rq, prio);
> +	dt = ktime_get_raw_fast_ns() - dt;
> +	preempt_enable();
> +
> +	return dt;
> +}
> +
> +static bool set_priority(struct i915_request *rq,
> +			 unsigned long v, unsigned long e)
> +{
> +	report("set-priority", v, e, __set_priority(rq, I915_PRIORITY_BARRIER));

can't we pr_info directly here and spare a function?

> +	return true;
> +}
> +
> +static int single_priority(void *arg)
> +{
> +	return single(arg, set_priority);
> +}
> +
> +static int wide_priority(void *arg)
> +{
> +	return wide(arg, set_priority);
> +}
> +
> +static int inv_priority(void *arg)
> +{
> +	return inv(arg, set_priority);
> +}
> +
> +static int sparse_priority(void *arg)
> +{
> +	return sparse(arg, set_priority);
> +}
> +
> +int i915_scheduler_perf_selftests(struct drm_i915_private *i915)
> +{
> +	static const struct i915_subtest tests[] = {
> +		SUBTEST(single_priority),
> +		SUBTEST(wide_priority),
> +		SUBTEST(inv_priority),
> +		SUBTEST(sparse_priority),
> +	};
> +	static const struct {
> +		const char *name;
> +		size_t sz;
> +	} types[] = {
> +#define T(t) { #t, sizeof(struct t) }
> +		T(i915_priolist),
> +		T(i915_sched_attr),
> +		T(i915_sched_node),
> +#undef T

is this really making the code better? Is it a big deal to
clearly use

		{ i915_priolist, sizeof(i915_priolist) },
		{ i915_sched_attr, sizeof(i915_sched_attr) },
		{ i915_sched_node, sizeof(i915_sched_node) },

> +		{}
> +	};
> +	typeof(*types) *t;
> +
> +	for (t = types; t->name; t++)
> +		pr_info("sizeof(%s): %zd\n", t->name, t->sz);
> +
> +	return i915_subtests(tests, i915);
> +}
> -- 
> 2.20.1
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Andi
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2021-01-26 18:05 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-20 12:21 [Intel-gfx] [PATCH 01/10] drm/i915/gt: Do not suspend bonded requests if one hangs Chris Wilson
2021-01-20 12:21 ` [Intel-gfx] [PATCH 02/10] drm/i915/gt: Skip over completed active execlists, again Chris Wilson
2021-01-21 15:23   ` Andi Shyti
2021-01-20 12:21 ` [Intel-gfx] [PATCH 03/10] drm/i915: Strip out internal priorities Chris Wilson
2021-01-21 15:23   ` Andi Shyti
2021-01-21 15:30     ` Chris Wilson
2021-01-20 12:21 ` [Intel-gfx] [PATCH 04/10] drm/i915: Remove I915_USER_PRIORITY_SHIFT Chris Wilson
2021-01-21 15:25   ` Andi Shyti
2021-01-20 12:22 ` [Intel-gfx] [PATCH 05/10] drm/i915: Replace engine->schedule() with a known request operation Chris Wilson
2021-01-21 15:49   ` Andi Shyti
2021-01-21 16:25     ` Chris Wilson
2021-01-20 12:22 ` [Intel-gfx] [PATCH 06/10] drm/i915: Teach the i915_dependency to use a double-lock Chris Wilson
2021-01-20 12:22 ` [Intel-gfx] [PATCH 07/10] drm/i915: Restructure priority inheritance Chris Wilson
2021-01-26 17:18   ` Andi Shyti
2021-01-26 19:03     ` Chris Wilson
2021-01-20 12:22 ` [Intel-gfx] [PATCH 08/10] drm/i915/selftests: Measure set-priority duration Chris Wilson
2021-01-26 18:05   ` Andi Shyti [this message]
2021-01-26 21:16     ` Chris Wilson
2021-01-20 12:22 ` [Intel-gfx] [PATCH 09/10] drm/i915/selftests: Exercise priority inheritance around an engine loop Chris Wilson
2021-01-20 12:22 ` [Intel-gfx] [PATCH 10/10] drm/i915: Improve DFS for priority inheritance Chris Wilson
2021-01-26 17:34   ` Andi Shyti
2021-01-26 21:20     ` Chris Wilson
2021-01-20 19:22 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for series starting with [01/10] drm/i915/gt: Do not suspend bonded requests if one hangs Patchwork
2021-01-20 19:23 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2021-01-20 19:51 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2021-01-20 23:04 ` [Intel-gfx] ✓ Fi.CI.IGT: " Patchwork
2021-01-21 15:19 ` [Intel-gfx] [PATCH 01/10] " Andi Shyti

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=YBBZ8lbpS4QW49UX@jack.zhora.eu \
    --to=andi@etezian.org \
    --cc=chris@chris-wilson.co.uk \
    --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: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).