diff options
author | Anton Vorontsov <avorontsov@nvidia.com> | 2015-08-19 17:27:51 -0400 |
---|---|---|
committer | Terje Bergstrom <tbergstrom@nvidia.com> | 2016-03-23 10:48:47 -0400 |
commit | 1c40d09c4c9c011c1318c328c0b4b6b17d1f537e (patch) | |
tree | 8b93fcd00739f9ada9302f06175278c9cb1d6785 /include/trace | |
parent | 82da6ed595a87c8a3038eecd75880ab21dd4c5de (diff) |
gpu: nvgpu: Add support for FECS ctxsw tracing
bug 1648908
This commit adds support for FECS ctxsw tracing. Code is compiled
conditionnaly under CONFIG_GK20_CTXSW_TRACE.
This feature requires an updated FECS ucode that writes one record to a ring
buffer on each context switch. On RM/Kernel side, the GPU driver reads records
from the master ring buffer and generates trace entries into a user-facing
VM ring buffer. For each record in the master ring buffer, RM/Kernel has
to retrieve the vmid+pid of the user process that submitted related work.
Features currently implemented:
- master ring buffer allocation
- debugfs to dump master ring buffer
- FECS record per context switch (with both current and new contexts)
- dedicated device for ctxsw tracing (access to VM ring buffer)
- SOF generation (and access to PTIMER)
- VM ring buffer allocation, and reconfiguration
- enable/disable tracing at user level
- event-based trace filtering
- context_ptr to vmid+pid mapping
- read system call for ctxsw dev
- mmap system call for ctxsw dev (direct access to VM ring buffer)
- poll system call for ctxsw dev
- save/restore register on ELPG/CG6
- separate user ring from FECS ring handling
Features requiring ucode changes:
- enable/disable tracing at FECS level
- actual busy time on engine (bug 1642354)
- master ring buffer threshold interrupt (P1)
- API for GPU to CPU timestamp conversion (P1)
- vmid/pid/uid based filtering (P1)
Change-Id: I8e39c648221ee0fa09d5df8524b03dca83fe24f3
Signed-off-by: Thomas Fleury <tfleury@nvidia.com>
Reviewed-on: http://git-master/r/1022737
GVS: Gerrit_Virtual_Submit
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'include/trace')
-rw-r--r-- | include/trace/events/gk20a.h | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/include/trace/events/gk20a.h b/include/trace/events/gk20a.h index 461ff6e8..23b5b642 100644 --- a/include/trace/events/gk20a.h +++ b/include/trace/events/gk20a.h | |||
@@ -387,7 +387,7 @@ TRACE_EVENT(gk20a_as_ioctl_get_va_regions, | |||
387 | TRACE_EVENT(gk20a_mmu_fault, | 387 | TRACE_EVENT(gk20a_mmu_fault, |
388 | TP_PROTO(u32 fault_hi, u32 fault_lo, | 388 | TP_PROTO(u32 fault_hi, u32 fault_lo, |
389 | u32 fault_info, | 389 | u32 fault_info, |
390 | u32 instance, | 390 | u64 instance, |
391 | u32 engine_id, | 391 | u32 engine_id, |
392 | const char *engine, | 392 | const char *engine, |
393 | const char *client, | 393 | const char *client, |
@@ -398,7 +398,7 @@ TRACE_EVENT(gk20a_mmu_fault, | |||
398 | __field(u32, fault_hi) | 398 | __field(u32, fault_hi) |
399 | __field(u32, fault_lo) | 399 | __field(u32, fault_lo) |
400 | __field(u32, fault_info) | 400 | __field(u32, fault_info) |
401 | __field(u32, instance) | 401 | __field(u64, instance) |
402 | __field(u32, engine_id) | 402 | __field(u32, engine_id) |
403 | __field(const char *, engine) | 403 | __field(const char *, engine) |
404 | __field(const char *, client) | 404 | __field(const char *, client) |
@@ -414,7 +414,7 @@ TRACE_EVENT(gk20a_mmu_fault, | |||
414 | __entry->client = client; | 414 | __entry->client = client; |
415 | __entry->fault_type = fault_type; | 415 | __entry->fault_type = fault_type; |
416 | ), | 416 | ), |
417 | TP_printk("fault=0x%x,%08x info=0x%x instance=0x%x engine_id=%d engine=%s client=%s type=%s", | 417 | TP_printk("fault=0x%x,%08x info=0x%x instance=0x%llx engine_id=%d engine=%s client=%s type=%s", |
418 | __entry->fault_hi, __entry->fault_lo, | 418 | __entry->fault_hi, __entry->fault_lo, |
419 | __entry->fault_info, __entry->instance, __entry->engine_id, | 419 | __entry->fault_info, __entry->instance, __entry->engine_id, |
420 | __entry->engine, __entry->client, __entry->fault_type) | 420 | __entry->engine, __entry->client, __entry->fault_type) |