From: Sharat Masetty <smasetty-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
To: "Koenig,
Christian" <Christian.Koenig-5C7GfCeVMHo@public.gmane.org>,
"freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org"
<freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org>
Cc: "linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org"
<jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>,
"dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org"
<dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org>,
"Grodzovsky,
Andrey" <Andrey.Grodzovsky-5C7GfCeVMHo@public.gmane.org>
Subject: Re: [PATCH 2/2] drm/scheduler: Add a start_timeout_notify() backend function
Date: Fri, 2 Nov 2018 18:55:13 +0530 [thread overview]
Message-ID: <f30f0949-1a4e-1b96-982a-661ee3e3c9d3@codeaurora.org> (raw)
In-Reply-To: <57ffb214-3635-6445-e0e1-fc5010e05ba7-5C7GfCeVMHo@public.gmane.org>
On 11/2/2018 4:09 PM, Koenig, Christian wrote:
> Am 02.11.18 um 11:31 schrieb Sharat Masetty:
>> Add an optional backend function op which will let the scheduler clients
>> know when the timeout got scheduled on the scheduler instance. This will
>> help drivers with multiple schedulers(one per ring) measure time spent on
>> the ring accurately, eventually helping with better timeout detection.
>>
>> Signed-off-by: Sharat Masetty <smasetty@codeaurora.org>
>
> Well, NAK. drm_sched_start_timeout() is called whenever the timer needs
> to run, but that doesn't mean that the timer is started (e.g. it can
> already be running).
>
> So the callback would be called multiple times and not reflect the
> actual job run time.
>
> Additional to that it can be racy, e.g. we can complete multiple jobs at
> a time before the timer is started again.
>
> If you want to accurately count how much time you spend on each job/ring
> you need to do this by measuring the time inside your driver instead.
>
> E.g. for amdgpu I would get the time first in amdgpu_job_run() and then
> again in amdgpu_job_free_cb() and calculate the difference.
Hi Christian,
Thank you for the comments and apologies if this was confusing. All I
want to determine(more accurately) is that when the scheduler instance
timer of say 500 ms goes off, is if the ring(associated with the
scheduler instance) actually spent 500 ms on the hardware - and for this
I need to know in the driver space when the timer actually started.
In msm hardware we have ring preemption support enabled and the kernel
driver triggers a preemption switch to a higher priority ring if there
is work available on that ring for the GPU to work on. So in the
presence of preemption it is possible that a lower priority ring did not
actually get to spend the full 500 ms and this is what I am trying to
catch with this callback.
I am *not* trying to profile per job time consumption with this.
> Well, NAK. drm_sched_start_timeout() is called whenever the timer needs
> to run, but that doesn't mean that the timer is started (e.g. it can
> already be running).
Regarding the case where the timer may already be running - good point,
but it should be easy to address the scenario. I will check the output
of schedule_delayed_work() and only call the callback(new proposed) if
the timer was really scheduled.
In summary, when this timedout_job() callback is called, it is assumed
that the job actually did time out from the POV of the scheduler, but
this will not hold true with preemption switching and that is what I am
trying to better address with this patch.
Sharat
>
> Regards,
> Christian.
>
>> ---
>> Here is an example of how I plan to use this new function callback.
>>
>> [1] https://patchwork.freedesktop.org/patch/254227/
>>
>> drivers/gpu/drm/scheduler/sched_main.c | 7 ++++++-
>> include/drm/gpu_scheduler.h | 6 ++++++
>> 2 files changed, 12 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
>> index c993d10..afd461e 100644
>> --- a/drivers/gpu/drm/scheduler/sched_main.c
>> +++ b/drivers/gpu/drm/scheduler/sched_main.c
>> @@ -192,8 +192,13 @@ bool drm_sched_dependency_optimized(struct dma_fence* fence,
>> static void drm_sched_start_timeout(struct drm_gpu_scheduler *sched)
>> {
>> if (sched->timeout != MAX_SCHEDULE_TIMEOUT &&
>> - !list_empty(&sched->ring_mirror_list))
>> + !list_empty(&sched->ring_mirror_list)) {
>> +
>> schedule_delayed_work(&sched->work_tdr, sched->timeout);
>> +
>> + if (sched->ops->start_timeout_notify)
>> + sched->ops->start_timeout_notify(sched);
>> + }
>> }
>>
>> /* job_finish is called after hw fence signaled
>> diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h
>> index d87b268..faf28b4 100644
>> --- a/include/drm/gpu_scheduler.h
>> +++ b/include/drm/gpu_scheduler.h
>> @@ -239,6 +239,12 @@ struct drm_sched_backend_ops {
>> * and it's time to clean it up.
>> */
>> void (*free_job)(struct drm_sched_job *sched_job);
>> +
>> + /*
>> + * (Optional) Called to let the driver know that a timeout detection
>> + * timer has been started.
>> + */
>> + void (*start_timeout_notify)(struct drm_gpu_scheduler *sched);
>> };
>>
>> /**
>> --
>> 1.9.1
>>
>
> _______________________________________________
> Freedreno mailing list
> Freedreno@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/freedreno
>
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
Linux Foundation Collaborative Project
_______________________________________________
Freedreno mailing list
Freedreno@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/freedreno
next prev parent reply other threads:[~2018-11-02 13:25 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-02 10:31 [PATCH 1/2] drm/scheduler: Set sched->thread to NULL on failure Sharat Masetty
[not found] ` <1541154693-29623-1-git-send-email-smasetty-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-11-02 10:31 ` [PATCH 2/2] drm/scheduler: Add a start_timeout_notify() backend function Sharat Masetty
[not found] ` <1541154693-29623-2-git-send-email-smasetty-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-11-02 10:39 ` Koenig, Christian
[not found] ` <57ffb214-3635-6445-e0e1-fc5010e05ba7-5C7GfCeVMHo@public.gmane.org>
2018-11-02 13:25 ` Sharat Masetty [this message]
[not found] ` <f30f0949-1a4e-1b96-982a-661ee3e3c9d3-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-11-02 13:37 ` Koenig, Christian
2018-11-05 7:55 ` [Freedreno] " Sharat Masetty
[not found] ` <bbfa8eae-23f5-5484-5abb-bf55dee64e34-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2018-11-05 12:06 ` Koenig, Christian
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=f30f0949-1a4e-1b96-982a-661ee3e3c9d3@codeaurora.org \
--to=smasetty-sgv2jx0feol9jmxxk+q4oq@public.gmane.org \
--cc=Andrey.Grodzovsky-5C7GfCeVMHo@public.gmane.org \
--cc=Christian.Koenig-5C7GfCeVMHo@public.gmane.org \
--cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
--cc=freedreno-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
--cc=jcrouse-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org \
--cc=linux-arm-msm-u79uwXL29TY76Z2rM5mHXA@public.gmane.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