All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] drm/scheduler: Add job dependency trace.
@ 2018-07-31 14:56 Andrey Grodzovsky
  2018-07-31 14:56 ` [PATCH 2/2] drm/amdgpu: Add job pipe sync dependecy trace Andrey Grodzovsky
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Andrey Grodzovsky @ 2018-07-31 14:56 UTC (permalink / raw)
  To: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
  Cc: Andrey Grodzovsky, christian.koenig-5C7GfCeVMHo

During debug sessions I encountered a need to trace
back a job dependecy a few steps back to the first failing
job. This trace helpped me a lot.

Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
---
 drivers/gpu/drm/scheduler/gpu_scheduler.c       |  8 ++++++--
 drivers/gpu/drm/scheduler/gpu_scheduler_trace.h | 24 ++++++++++++++++++++++++
 2 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/scheduler/gpu_scheduler.c b/drivers/gpu/drm/scheduler/gpu_scheduler.c
index 3f2fc5e..45703b9 100644
--- a/drivers/gpu/drm/scheduler/gpu_scheduler.c
+++ b/drivers/gpu/drm/scheduler/gpu_scheduler.c
@@ -506,9 +506,13 @@ drm_sched_entity_pop_job(struct drm_sched_entity *entity)
 	if (!sched_job)
 		return NULL;
 
-	while ((entity->dependency = sched->ops->dependency(sched_job, entity)))
-		if (drm_sched_entity_add_dependency_cb(entity))
+	while ((entity->dependency = sched->ops->dependency(sched_job, entity))) {
+		if (drm_sched_entity_add_dependency_cb(entity)) {
+
+			trace_drm_sched_job_wait_dep(sched_job, entity->dependency);
 			return NULL;
+		}
+	}
 
 	/* skip jobs from entity that marked guilty */
 	if (entity->guilty && atomic_read(entity->guilty))
diff --git a/drivers/gpu/drm/scheduler/gpu_scheduler_trace.h b/drivers/gpu/drm/scheduler/gpu_scheduler_trace.h
index 4998ad9..1626f39 100644
--- a/drivers/gpu/drm/scheduler/gpu_scheduler_trace.h
+++ b/drivers/gpu/drm/scheduler/gpu_scheduler_trace.h
@@ -74,6 +74,30 @@ TRACE_EVENT(drm_sched_process_job,
 	    TP_printk("fence=%p signaled", __entry->fence)
 );
 
+TRACE_EVENT(drm_sched_job_wait_dep,
+	    TP_PROTO(struct drm_sched_job *sched_job, struct dma_fence *fence),
+	    TP_ARGS(sched_job, fence),
+	    TP_STRUCT__entry(
+			     __field(const char *,name)
+			     __field(uint64_t, id)
+			     __field(struct dma_fence *, fence)
+			     __field(uint64_t, ctx)
+			     __field(unsigned, seqno)
+			     ),
+
+	    TP_fast_assign(
+			   __entry->name = sched_job->sched->name;
+			   __entry->id = sched_job->id;
+			   __entry->fence = fence;
+			   __entry->ctx = fence->context;
+			   __entry->seqno = fence->seqno;
+			   ),
+	    TP_printk("job ring=%s, id=%llu, depends fence=%p, context=%llu, seq=%u",
+		      __entry->name, __entry->id,
+		      __entry->fence, __entry->ctx,
+		      __entry->seqno)
+);
+
 #endif
 
 /* This part must be outside protection */
-- 
2.7.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] drm/amdgpu: Add job pipe sync dependecy trace
  2018-07-31 14:56 [PATCH 1/2] drm/scheduler: Add job dependency trace Andrey Grodzovsky
@ 2018-07-31 14:56 ` Andrey Grodzovsky
       [not found] ` <1533049014-6934-1-git-send-email-andrey.grodzovsky-5C7GfCeVMHo@public.gmane.org>
  2018-08-01  6:30 ` Huang Rui
  2 siblings, 0 replies; 4+ messages in thread
From: Andrey Grodzovsky @ 2018-07-31 14:56 UTC (permalink / raw)
  To: dri-devel, amd-gfx; +Cc: christian.koenig

It's useful to trace any dependency a job has on prevoius
jobs.

Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c    |  5 +++++
 drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h | 24 ++++++++++++++++++++++++
 2 files changed, 29 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
index 5518e62..5c22cfd 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
@@ -32,6 +32,7 @@
 #include <drm/amdgpu_drm.h>
 #include "amdgpu.h"
 #include "atom.h"
+#include "amdgpu_trace.h"
 
 #define AMDGPU_IB_TEST_TIMEOUT	msecs_to_jiffies(1000)
 
@@ -168,6 +169,10 @@ int amdgpu_ib_schedule(struct amdgpu_ring *ring, unsigned num_ibs,
 	    ((tmp = amdgpu_sync_get_fence(&job->sched_sync, NULL)) ||
 	     amdgpu_vm_need_pipeline_sync(ring, job))) {
 		need_pipe_sync = true;
+
+		if (tmp)
+			trace_amdgpu_ib_pipe_sync(job, tmp);
+
 		dma_fence_put(tmp);
 	}
 
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
index 11f262f..3cffe53 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_trace.h
@@ -457,6 +457,30 @@ TRACE_EVENT(amdgpu_bo_move,
 			__entry->new_placement, __entry->bo_size)
 );
 
+TRACE_EVENT(amdgpu_ib_pipe_sync,
+	    TP_PROTO(struct amdgpu_job *sched_job, struct dma_fence *fence),
+	    TP_ARGS(sched_job, fence),
+	    TP_STRUCT__entry(
+			     __field(const char *,name)
+			     __field(uint64_t, id)
+			     __field(struct dma_fence *, fence)
+			     __field(uint64_t, ctx)
+			     __field(unsigned, seqno)
+			     ),
+
+	    TP_fast_assign(
+			   __entry->name = sched_job->base.sched->name;
+			   __entry->id = sched_job->base.id;
+			   __entry->fence = fence;
+			   __entry->ctx = fence->context;
+			   __entry->seqno = fence->seqno;
+			   ),
+	    TP_printk("job ring=%s, id=%llu, need pipe sync to fence=%p, context=%llu, seq=%u",
+		      __entry->name, __entry->id,
+		      __entry->fence, __entry->ctx,
+		      __entry->seqno)
+);
+
 #undef AMDGPU_JOB_GET_TIMELINE_NAME
 #endif
 
-- 
2.7.4

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/2] drm/scheduler: Add job dependency trace.
       [not found] ` <1533049014-6934-1-git-send-email-andrey.grodzovsky-5C7GfCeVMHo@public.gmane.org>
@ 2018-07-31 15:23   ` Christian König
  0 siblings, 0 replies; 4+ messages in thread
From: Christian König @ 2018-07-31 15:23 UTC (permalink / raw)
  To: Andrey Grodzovsky, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
  Cc: christian.koenig-5C7GfCeVMHo

Am 31.07.2018 um 16:56 schrieb Andrey Grodzovsky:
> During debug sessions I encountered a need to trace
> back a job dependecy a few steps back to the first failing
> job. This trace helpped me a lot.
>
> Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>

Reviewed-by: Christian König <christian.koenig@amd.com> for the series.

> ---
>   drivers/gpu/drm/scheduler/gpu_scheduler.c       |  8 ++++++--
>   drivers/gpu/drm/scheduler/gpu_scheduler_trace.h | 24 ++++++++++++++++++++++++
>   2 files changed, 30 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/scheduler/gpu_scheduler.c b/drivers/gpu/drm/scheduler/gpu_scheduler.c
> index 3f2fc5e..45703b9 100644
> --- a/drivers/gpu/drm/scheduler/gpu_scheduler.c
> +++ b/drivers/gpu/drm/scheduler/gpu_scheduler.c
> @@ -506,9 +506,13 @@ drm_sched_entity_pop_job(struct drm_sched_entity *entity)
>   	if (!sched_job)
>   		return NULL;
>   
> -	while ((entity->dependency = sched->ops->dependency(sched_job, entity)))
> -		if (drm_sched_entity_add_dependency_cb(entity))
> +	while ((entity->dependency = sched->ops->dependency(sched_job, entity))) {
> +		if (drm_sched_entity_add_dependency_cb(entity)) {
> +
> +			trace_drm_sched_job_wait_dep(sched_job, entity->dependency);
>   			return NULL;
> +		}
> +	}
>   
>   	/* skip jobs from entity that marked guilty */
>   	if (entity->guilty && atomic_read(entity->guilty))
> diff --git a/drivers/gpu/drm/scheduler/gpu_scheduler_trace.h b/drivers/gpu/drm/scheduler/gpu_scheduler_trace.h
> index 4998ad9..1626f39 100644
> --- a/drivers/gpu/drm/scheduler/gpu_scheduler_trace.h
> +++ b/drivers/gpu/drm/scheduler/gpu_scheduler_trace.h
> @@ -74,6 +74,30 @@ TRACE_EVENT(drm_sched_process_job,
>   	    TP_printk("fence=%p signaled", __entry->fence)
>   );
>   
> +TRACE_EVENT(drm_sched_job_wait_dep,
> +	    TP_PROTO(struct drm_sched_job *sched_job, struct dma_fence *fence),
> +	    TP_ARGS(sched_job, fence),
> +	    TP_STRUCT__entry(
> +			     __field(const char *,name)
> +			     __field(uint64_t, id)
> +			     __field(struct dma_fence *, fence)
> +			     __field(uint64_t, ctx)
> +			     __field(unsigned, seqno)
> +			     ),
> +
> +	    TP_fast_assign(
> +			   __entry->name = sched_job->sched->name;
> +			   __entry->id = sched_job->id;
> +			   __entry->fence = fence;
> +			   __entry->ctx = fence->context;
> +			   __entry->seqno = fence->seqno;
> +			   ),
> +	    TP_printk("job ring=%s, id=%llu, depends fence=%p, context=%llu, seq=%u",
> +		      __entry->name, __entry->id,
> +		      __entry->fence, __entry->ctx,
> +		      __entry->seqno)
> +);
> +
>   #endif
>   
>   /* This part must be outside protection */

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/2] drm/scheduler: Add job dependency trace.
  2018-07-31 14:56 [PATCH 1/2] drm/scheduler: Add job dependency trace Andrey Grodzovsky
  2018-07-31 14:56 ` [PATCH 2/2] drm/amdgpu: Add job pipe sync dependecy trace Andrey Grodzovsky
       [not found] ` <1533049014-6934-1-git-send-email-andrey.grodzovsky-5C7GfCeVMHo@public.gmane.org>
@ 2018-08-01  6:30 ` Huang Rui
  2 siblings, 0 replies; 4+ messages in thread
From: Huang Rui @ 2018-08-01  6:30 UTC (permalink / raw)
  To: Andrey Grodzovsky; +Cc: amd-gfx, dri-devel, christian.koenig

On Tue, Jul 31, 2018 at 10:56:53AM -0400, Andrey Grodzovsky wrote:
> During debug sessions I encountered a need to trace
> back a job dependecy a few steps back to the first failing
> job. This trace helpped me a lot.
> 
> Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>

Series are Reviewed-by: Huang Rui <ray.huang@amd.com>

> ---
>  drivers/gpu/drm/scheduler/gpu_scheduler.c       |  8 ++++++--
>  drivers/gpu/drm/scheduler/gpu_scheduler_trace.h | 24 ++++++++++++++++++++++++
>  2 files changed, 30 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/scheduler/gpu_scheduler.c b/drivers/gpu/drm/scheduler/gpu_scheduler.c
> index 3f2fc5e..45703b9 100644
> --- a/drivers/gpu/drm/scheduler/gpu_scheduler.c
> +++ b/drivers/gpu/drm/scheduler/gpu_scheduler.c
> @@ -506,9 +506,13 @@ drm_sched_entity_pop_job(struct drm_sched_entity *entity)
>  	if (!sched_job)
>  		return NULL;
>  
> -	while ((entity->dependency = sched->ops->dependency(sched_job, entity)))
> -		if (drm_sched_entity_add_dependency_cb(entity))
> +	while ((entity->dependency = sched->ops->dependency(sched_job, entity))) {
> +		if (drm_sched_entity_add_dependency_cb(entity)) {
> +
> +			trace_drm_sched_job_wait_dep(sched_job, entity->dependency);
>  			return NULL;
> +		}
> +	}
>  
>  	/* skip jobs from entity that marked guilty */
>  	if (entity->guilty && atomic_read(entity->guilty))
> diff --git a/drivers/gpu/drm/scheduler/gpu_scheduler_trace.h b/drivers/gpu/drm/scheduler/gpu_scheduler_trace.h
> index 4998ad9..1626f39 100644
> --- a/drivers/gpu/drm/scheduler/gpu_scheduler_trace.h
> +++ b/drivers/gpu/drm/scheduler/gpu_scheduler_trace.h
> @@ -74,6 +74,30 @@ TRACE_EVENT(drm_sched_process_job,
>  	    TP_printk("fence=%p signaled", __entry->fence)
>  );
>  
> +TRACE_EVENT(drm_sched_job_wait_dep,
> +	    TP_PROTO(struct drm_sched_job *sched_job, struct dma_fence *fence),
> +	    TP_ARGS(sched_job, fence),
> +	    TP_STRUCT__entry(
> +			     __field(const char *,name)
> +			     __field(uint64_t, id)
> +			     __field(struct dma_fence *, fence)
> +			     __field(uint64_t, ctx)
> +			     __field(unsigned, seqno)
> +			     ),
> +
> +	    TP_fast_assign(
> +			   __entry->name = sched_job->sched->name;
> +			   __entry->id = sched_job->id;
> +			   __entry->fence = fence;
> +			   __entry->ctx = fence->context;
> +			   __entry->seqno = fence->seqno;
> +			   ),
> +	    TP_printk("job ring=%s, id=%llu, depends fence=%p, context=%llu, seq=%u",
> +		      __entry->name, __entry->id,
> +		      __entry->fence, __entry->ctx,
> +		      __entry->seqno)
> +);
> +
>  #endif
>  
>  /* This part must be outside protection */
> -- 
> 2.7.4
> 
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-08-01  6:30 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-31 14:56 [PATCH 1/2] drm/scheduler: Add job dependency trace Andrey Grodzovsky
2018-07-31 14:56 ` [PATCH 2/2] drm/amdgpu: Add job pipe sync dependecy trace Andrey Grodzovsky
     [not found] ` <1533049014-6934-1-git-send-email-andrey.grodzovsky-5C7GfCeVMHo@public.gmane.org>
2018-07-31 15:23   ` [PATCH 1/2] drm/scheduler: Add job dependency trace Christian König
2018-08-01  6:30 ` Huang Rui

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.