drm/sched: Trace dependencies for GPU jobs
We can't trace dependencies from drm_sched_job_add_dependency because when it's called the job's fence is not available yet. So instead each dependency is traced individually when drm_sched_entity_push_job is used. Tracing the dependencies allows tools to analyze the dependencies between the jobs (previously it was only possible for fences traced by drm_sched_job_wait_dep). Signed-off-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com> Signed-off-by: Philipp Stanner <phasta@kernel.org> Link: https://lore.kernel.org/r/20250526125505.2360-6-pierre-eric.pelloux-prayer@amd.compull/1279/head
parent
8a98df7006
commit
76d97c870f
|
|
@ -87,6 +87,29 @@ TRACE_EVENT(drm_sched_process_job,
|
|||
__entry->fence_context, __entry->fence_seqno)
|
||||
);
|
||||
|
||||
TRACE_EVENT(drm_sched_job_add_dep,
|
||||
TP_PROTO(struct drm_sched_job *sched_job, struct dma_fence *fence),
|
||||
TP_ARGS(sched_job, fence),
|
||||
TP_STRUCT__entry(
|
||||
__field(u64, fence_context)
|
||||
__field(u64, fence_seqno)
|
||||
__field(u64, id)
|
||||
__field(u64, ctx)
|
||||
__field(u64, seqno)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->fence_context = sched_job->s_fence->finished.context;
|
||||
__entry->fence_seqno = sched_job->s_fence->finished.seqno;
|
||||
__entry->id = sched_job->id;
|
||||
__entry->ctx = fence->context;
|
||||
__entry->seqno = fence->seqno;
|
||||
),
|
||||
TP_printk("fence=%llu:%llu, id=%llu depends on fence=%llu:%llu",
|
||||
__entry->fence_context, __entry->fence_seqno, __entry->id,
|
||||
__entry->ctx, __entry->seqno)
|
||||
);
|
||||
|
||||
TRACE_EVENT(drm_sched_job_wait_dep,
|
||||
TP_PROTO(struct drm_sched_job *sched_job, struct dma_fence *fence),
|
||||
TP_ARGS(sched_job, fence),
|
||||
|
|
|
|||
|
|
@ -586,6 +586,14 @@ void drm_sched_entity_push_job(struct drm_sched_job *sched_job)
|
|||
ktime_t submit_ts;
|
||||
|
||||
trace_drm_sched_job(sched_job, entity);
|
||||
|
||||
if (trace_drm_sched_job_add_dep_enabled()) {
|
||||
struct dma_fence *entry;
|
||||
unsigned long index;
|
||||
|
||||
xa_for_each(&sched_job->dependencies, index, entry)
|
||||
trace_drm_sched_job_add_dep(sched_job, entry);
|
||||
}
|
||||
atomic_inc(entity->rq->sched->score);
|
||||
WRITE_ONCE(entity->last_user, current->group_leader);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue