Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Luben Tuikov <ltuikov89@gmail.com>
To: Matthew Brost <matthew.brost@intel.com>
Cc: robdclark@chromium.org, tvrtko.ursulin@linux.intel.com,
	sarah.walker@imgtec.com, ltuikov@yahoo.com,
	ketil.johnsen@arm.com, lina@asahilina.net, mcanal@igalia.com,
	Liviu.Dudau@arm.com, dri-devel@lists.freedesktop.org,
	intel-xe@lists.freedesktop.org, boris.brezillon@collabora.com,
	dakr@redhat.com, donald.robson@imgtec.com,
	christian.koenig@amd.com, faith.ekstrand@collabora.com
Subject: Re: [Intel-xe] [PATCH] drm/sched: Eliminate drm_sched_run_job_queue_if_ready()
Date: Fri, 3 Nov 2023 20:24:15 -0400	[thread overview]
Message-ID: <19994348-7ce3-4e4d-9e9c-d0bdcd443637@gmail.com> (raw)
In-Reply-To: <ZUUOFw9YxklMb8FV@DUT025-TGLU.fm.intel.com>


[-- Attachment #1.1.1: Type: text/plain, Size: 2128 bytes --]

Hi Matt, :-)

On 2023-11-03 11:13, Matthew Brost wrote:
> On Thu, Nov 02, 2023 at 06:46:54PM -0400, Luben Tuikov wrote:
>> Eliminate drm_sched_run_job_queue_if_ready() and instead just call
>> drm_sched_run_job_queue() in drm_sched_free_job_work(). The problem is that
>> the former function uses drm_sched_select_entity() to determine if the
>> scheduler had an entity ready in one of its run-queues, and in the case of the
>> Round-Robin (RR) scheduling, the function drm_sched_rq_select_entity_rr() does
>> just that, selects the _next_ entity which is ready, sets up the run-queue and
>> completion and returns that entity. The FIFO scheduling algorithm is unaffected.
>>
>> Now, since drm_sched_run_job_work() also calls drm_sched_select_entity(), then
>> in the case of RR scheduling, that would result in calling select_entity()
>> twice, which may result in skipping a ready entity if more than one entity is
>> ready. This commit fixes this by eliminating the if_ready() variant.
>>
> 
> Ah, yes I guess we both missed this. What about reviving the peek
> argument [1]? This would avoid unnecessary re-queues.

So, I really am not too fond of "peek-then-get-and-do" (scheduling) organizations,
because they don't scale. As we've seen in our case, the RR has a side effect,
as Tvrtko pointed out (thanks!), and in the future this
"peek-first, then go-again, to go"-type of organization would only prevent us
from doing more interesting things.

Also, with the GPU scheduler organization, mixing in the "peek", we just get
to carry it around through many a function, only to be used in a leaf function,
and exported way back up (because we don't know the rq at that level).

I'd much rather we just did "consume-until-empty", and if we have one last
empty check (or first), then that's not a breaker. (I mean, we have a
drm_sched_pick_best() which has time complexity O(n), and we execute it every time
we arm a job, so it's not that big of a deal.) Plus, it makes the code concise
and compact.

Let me reconstitute the patch and I'll send it for yours review.
-- 
Regards,
Luben

[-- Attachment #1.1.2: OpenPGP public key --]
[-- Type: application/pgp-keys, Size: 677 bytes --]

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 236 bytes --]

  reply	other threads:[~2023-11-04  0:24 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-31  3:24 [Intel-xe] [PATCH v8 0/5] DRM scheduler changes for Xe Matthew Brost
2023-10-31  3:24 ` [Intel-xe] [PATCH v8 1/5] drm/sched: Add drm_sched_wqueue_* helpers Matthew Brost
2023-10-31  3:24 ` [Intel-xe] [PATCH v8 2/5] drm/sched: Convert drm scheduler to use a work queue rather than kthread Matthew Brost
2023-10-31  3:24 ` [Intel-xe] [PATCH v8 3/5] drm/sched: Split free_job into own work item Matthew Brost
2023-11-01 22:13   ` Luben Tuikov
2023-11-02 11:13   ` Tvrtko Ursulin
2023-11-02 22:46     ` [Intel-xe] [PATCH] drm/sched: Eliminate drm_sched_run_job_queue_if_ready() Luben Tuikov
2023-11-03 10:39       ` Tvrtko Ursulin
2023-11-04  0:25         ` Luben Tuikov
2023-11-06 12:54           ` Tvrtko Ursulin
2023-11-03 15:13       ` Matthew Brost
2023-11-04  0:24         ` Luben Tuikov [this message]
2023-11-02 22:58     ` [Intel-xe] [PATCH v8 3/5] drm/sched: Split free_job into own work item Luben Tuikov
2023-11-07  4:10     ` [Intel-xe] [PATCH] drm/sched: Don't disturb the entity when in RR-mode scheduling Luben Tuikov
2023-11-07 11:48       ` Matthew Brost
2023-11-08  3:28         ` Luben Tuikov
2023-11-07 17:53       ` Danilo Krummrich
2023-11-08  3:29         ` Luben Tuikov
2023-11-08  0:41       ` Danilo Krummrich
2023-11-09  6:52         ` Luben Tuikov
2023-11-09 19:24           ` Danilo Krummrich
2023-11-09 23:41             ` Danilo Krummrich
2023-11-09 23:49               ` Luben Tuikov
2023-11-27 13:30                 ` [Intel-xe] [PATCH] Revert "drm/sched: Qualify drm_sched_wakeup() by drm_sched_entity_is_ready()" Bert Karwatzki
2023-11-27 15:14                   ` Luben Tuikov
2023-10-31  3:24 ` [Intel-xe] [PATCH v8 4/5] drm/sched: Add drm_sched_start_timeout_unlocked helper Matthew Brost
2023-10-31  3:24 ` [Intel-xe] [PATCH v8 5/5] drm/sched: Add a helper to queue TDR immediately Matthew Brost
2023-10-31  3:31 ` [Intel-xe] ✗ CI.Patch_applied: failure for DRM scheduler changes for Xe (rev10) Patchwork
2023-11-01 22:16 ` [Intel-xe] [PATCH v8 0/5] DRM scheduler changes for Xe Luben Tuikov
2023-11-02 22:49 ` [Intel-xe] ✗ CI.Patch_applied: failure for DRM scheduler changes for Xe (rev11) Patchwork
2023-11-07  4:39 ` [Intel-xe] ✗ CI.Patch_applied: failure for DRM scheduler changes for Xe (rev12) Patchwork
2023-11-09  7:12 ` [Intel-xe] ✗ CI.Patch_applied: failure for DRM scheduler changes for Xe (rev13) Patchwork
2023-11-27 16:18 ` [Intel-xe] ✗ CI.Patch_applied: failure for DRM scheduler changes for Xe (rev14) Patchwork
2023-11-27 17:15   ` Bert Karwatzki

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=19994348-7ce3-4e4d-9e9c-d0bdcd443637@gmail.com \
    --to=ltuikov89@gmail.com \
    --cc=Liviu.Dudau@arm.com \
    --cc=boris.brezillon@collabora.com \
    --cc=christian.koenig@amd.com \
    --cc=dakr@redhat.com \
    --cc=donald.robson@imgtec.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=faith.ekstrand@collabora.com \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=ketil.johnsen@arm.com \
    --cc=lina@asahilina.net \
    --cc=ltuikov@yahoo.com \
    --cc=matthew.brost@intel.com \
    --cc=mcanal@igalia.com \
    --cc=robdclark@chromium.org \
    --cc=sarah.walker@imgtec.com \
    --cc=tvrtko.ursulin@linux.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox