[PATCH 2/2] drm/amdgpu: trace fence details in amdgpu_sched_run_job
Alex Deucher
alexdeucher at gmail.com
Wed Mar 8 21:21:38 UTC 2017
Is this patch ready to land or is there more work required?
Thanks,
Alex
On Sun, Feb 26, 2017 at 5:54 AM, Christian König
<deathsimple at vodafone.de> wrote:
> Am 25.02.2017 um 18:28 schrieb Andres Rodriguez:
>
>
>
> On Feb 25, 2017 4:40 AM, "Christian König" <deathsimple at vodafone.de> wrote:
>
> Am 24.02.2017 um 19:20 schrieb Andres Rodriguez:
>>
>> This information is intended to provide the required data to associate
>> amdgpu tracepoints with their corresponding dma_fence_* events.
>>
>> Signed-off-by: Andres Rodriguez <andresx7 at gmail.com>
>> ---
>> drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h | 11 +++++++++--
>> 1 file changed, 9 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
>> index 01623d1..cc9a31d 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
>> @@ -130,6 +130,9 @@ TRACE_EVENT(amdgpu_sched_run_job,
>> __field(struct amd_sched_job *, sched_job)
>> __field(struct amdgpu_ib *, ib)
>> __field(struct dma_fence *, fence)
>> + __string(timeline,
>> job->base.s_fence->finished.ops->get_timeline_name(&job->base.s_fence->finished))
>> + __field(unsigned int, context)
>> + __field(unsigned int, seqno)
>> __field(char *, ring_name)
>> __field(u32, num_ibs)
>> ),
>> @@ -139,12 +142,16 @@ TRACE_EVENT(amdgpu_sched_run_job,
>> __entry->sched_job = &job->base;
>> __entry->ib = job->ibs;
>> __entry->fence = &job->base.s_fence->finished;
>> + __assign_str(timeline,
>> job->base.s_fence->finished.ops->get_timeline_name(&job->base.s_fence->finished))
>
>
> Not 100% sure, but we might be able to use a char * field here instead of
> the extra overhead of embedding a string, the timeline names are never freed
> IIRC.
>
>
> I'll give this a try.
>
>
>
>> + __entry->context =
>> job->base.s_fence->finished.context;
>> + __entry->seqno =
>> job->base.s_fence->finished.seqno;
>> __entry->ring_name = job->ring->name;
>> __entry->num_ibs = job->num_ibs;
>> ),
>> - TP_printk("adev=%p, sched_job=%p, first ib=%p, sched fence=%p,
>> ring name=%s, num_ibs=%u",
>> + TP_printk("adev=%p, sched_job=%p, first ib=%p, sched fence=%p,
>> timeline=%s, context=%u, seqno=%u, ring name=%s, num_ibs=%u",
>
>
> If you have time for another patch please drop the pinters here as well.
> Scheduler job, IBs and fence are all heavily reallocated (sometimes even
> with a slab allocator). So the pointers are completely meaningless. The adev
> pointer is superseded by the timeline name and context numbers.
>
>
> The pointers do provide some useful data. But you need to make sure you read
> it in between an allocation event and a fence signal event. It is extremely
> terrible for reading from a trace text file.
>
>
> Yeah, that's why I try to avoid them in the trace files.
>
> Additional to that the adev pointer is 8 bytes and pretty much meaningless
> in the trace file, but the PCI bus number is only 4 bytes IIRC and really
> easy to related to other log messages.
>
>
> How do you feel about if we replaced the job pointer with a job id, and
> replaced the fence pointers with the fence data?
>
>
> Mostly sounds like a plan to me. I would just try to get away from trying to
> use the job to identify a command submission.
>
> Instead use the scheduler fence for this. The difference is that we create
> the job structure early during command submission, but the scheduler fence
> only when the command submission is actually successfully and not
> interrupted by a signal.
>
> So a job id would contain a bunch of numbers which are never submitted.
> Especially for the X server that is usually rather annoying in the logs.
>
> Regards,
> Christian.
>
>
>
>
> Anyway that should be done in an extra patch, so this one is Reviewed-by:
> Christian König <christian.koenig at amd.com>.
>
> Regards,
> Christian.
>
>
>> __entry->adev, __entry->sched_job, __entry->ib,
>> - __entry->fence, __entry->ring_name,
>> __entry->num_ibs)
>> + __entry->fence, __get_str(timeline),
>> __entry->context, __entry->seqno,
>> + __entry->ring_name, __entry->num_ibs)
>> );
>>
>
>
>
>
>
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
>
More information about the amd-gfx
mailing list