Files

210 lines
5.2 KiB
Bash
Executable File

#!/bin/bash
SCRIPT_DIR="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
## Output filename
OUTPUT_FILENAME="${1}"
exec >>"${OUTPUT_FILENAME}.log" 2>&1
date
echo "date!" >&2
# Circular capture buffer size in kB / cpu
BUFF_SIZE="${2:-100000}"
# Collect a bevvy of trace events into this array
TRACE_EVENTS=()
# https://github.com/mikesart/gpuvis/wiki/TechDocs-Linux-Scheduler
TRACE_EVENTS+=(
"sched:sched_switch"
"sched:sched_process_fork"
"sched:sched_process_exec"
"sched:sched_process_exit"
)
# vblank events
TRACE_EVENTS+=(
"drm:drm_vblank_event"
"drm:drm_vblank_event_queued"
"drm:drm_vblank_event_delivered"
)
TRACE_EVENTS+=( "power:cpu_frequency" )
# https://github.com/mikesart/gpuvis/wiki/TechDocs-AMDGpu
TRACE_EVENTS+=(
"amdgpu:amdgpu_vm_flush"
"amdgpu:amdgpu_cs_ioctl"
"amdgpu:amdgpu_sched_run_job"
"amdgpu:amdgpu_ttm_bo_move"
"*fence:*fence_signaled"
)
# adreno specific
TRACE_EVENTS+=(
"kgsl:adreno_cmdbatch_queued"
"kgsl:adreno_cmdbatch_submitted"
"kgsl:adreno_cmdbatch_retired"
"kgsl:adreno_cmdbatch_sync"
"kgsl:adreno_cmdbatch_fault"
"kgsl:adreno_cmdbatch_recovery"
"kgsl:adreno_drawctxt_wait_start"
"kgsl:adreno_drawctxt_wait_done"
"kgsl:adreno_drawctxt_switch"
"kgsl:adreno_gpu_fault"
"kgsl:adreno_sp_tp"
"kgsl:kgsl_a3xx_irq_status"
"kgsl:kgsl_a4xx_irq_status"
"kgsl:kgsl_a5xx_irq_status"
"kgsl:adreno_hw_preempt_comp_to_clear"
"kgsl:adreno_hw_preempt_token_submit"
"kgsl:adreno_preempt_trigger"
"kgsl:adreno_preempt_done"
"kgsl:adreno_ifpc_count"
"sde:sde_perf_set_qos_luts"
"sde:sde_perf_set_danger_luts"
"sde:sde_perf_set_ot"
"sde:sde_perf_update_bus"
"sde:sde_cmd_release_bw"
"sde:sde_encoder_underrun"
"sde:tracing_mark_write"
"sde:sde_evtlog"
"sde:sde_perf_crtc_update"
"sde:sde_perf_calc_crtc"
"drm_msm_atomic:msm_atomic_async_commit_finish"
"drm_msm_atomic:msm_atomic_async_commit_start"
"drm_msm_atomic:msm_atomic_commit_tail_finish"
"drm_msm_atomic:msm_atomic_commit_tail_start"
"drm_msm_atomic:msm_atomic_flush_commit"
"drm_msm_atomic:msm_atomic_wait_flush_finish"
"drm_msm_atomic:msm_atomic_wait_flush_start"
"drm_msm_gpu:msm_gmu_freq_change"
"drm_msm_gpu:msm_gpu_devfreq_status"
"drm_msm_gpu:msm_gpu_freq_change"
"drm_msm_gpu:msm_gpu_preemption_irq"
"drm_msm_gpu:msm_gpu_preemption_trigger"
"drm_msm_gpu:msm_gpu_submit_flush"
"drm_msm_gpu:msm_gpu_submit_retired"
"drm_msm_gpu:msm_gpu_submit"
"drm_msm_gpu2:msm_gpu2_preempt_debug"
"drm_msm_gpu2:msm_gpu2_reset"
"drm_msm_gpu2:msm_gpu2_submit_flush"
"drm_msm_gpu2:msm_gpu2_submit_retired"
"drm_msm_gpu2:msm_gpu2_update_debug"
"drm_msm_gpu2:msm_gpu2_update_rptr"
# "drm_msm_gpu:msm_gem_purge_vmaps"
# "drm_msm_gpu:msm_gem_purge"
# "drm_msm_gpu:msm_gpu_resume"
# "drm_msm_gpu:msm_gpu_suspend"
)
# v4l2 related
TRACE_EVENTS+=(
"v4l2:vb2_v4l2_qbuf"
"v4l2:vb2_v4l2_dqbuf"
"v4l2:vb2_v4l2_buf_queue"
"v4l2:vb2_v4l2_buf_done"
"v4l2:v4l2_qbuf"
"v4l2:v4l2_dqbuf"
)
# iris video decoder related
TRACE_EVENTS+=(
"qcom_iris:iris_vdec_streamon_input"
"qcom_iris:iris_hfi_response_dequeue"
"qcom_iris:iris_hfi_response_output"
"qcom_iris:iris_hfi_response_input"
"qcom_iris:iris_hfi_queue_buffer"
)
# Battery related
TRACE_EVENTS+=(
"batt_iadc:batt_iadc_power_avg_now"
"batt_iadc:batt_iadc_current_voltage_power_now"
# "batt_iadc:batt_iadc_power_now"
# "batt_iadc:batt_iadc_voltage_now"
# "batt_iadc:batt_iadc_current_now"
)
# SPI related
TRACE_EVENTS+=(
"qcom_qspi:qspi_prepare_message"
"qcom_qspi:qcom_qspi_irq_start"
"qcom_qspi:qcom_qspi_irq_pre_complete"
"qcom_qspi:qcom_qspi_dma_sync_single_for_device"
"qcom_qspi:qcom_qspi_completion_timeout_done"
)
TRACE_EVENTS+=( "qcom_qdsp6:qcom_qdsp6_irq" )
TRACE_EVENTS+=(
"qcom_camss:vfe_isr"
"qcom_camss:csid_isr"
"qcom_camss:csid_isr_wm_done"
"qcom_camss:csid_isr_sof"
)
# These are all our special `gpuvis_print` events!
TRACE_EVENTS+=(
"gpuvis:gpuvis_print"
"gpuvis:gpuvis_print_begin_dtime"
)
# DPU related
TRACE_EVENTS+=(
"dpu2:dpu2_underflow"
"dpu:dpu_crtc_complete_commit"
"dpu:dpu_crtc_vblank"
)
# Prepend `-e` to the beginning of all trace events
TRACE_CMD_ARGS=(
# Set buffer size
-b "${BUFF_SIZE}"
# Set clock to mono_raw
-C mono_raw
# Try to disable the function tracer
-D
# Ignore requested events that don't exist
-i
# Embed data to get absolute time
--date
# List of events to trace
$(printf " -e %s" "${TRACE_EVENTS[@]}")
# Output to this file, using file format 6
--file-version 6
-o "${OUTPUT_FILENAME}"
)
# Start trace
sudo trace-cmd reset
sudo trace-cmd snapshot -f
nohup sudo trace-cmd record "${TRACE_CMD_ARGS[@]}" &
TRACE_CMD_PID="$!"
# If we're running this over SSH, if our connection drops, sigint ourselves
cleanup() {
echo "cleanup $1"
trap - "$1"
ls -la "${OUTPUT_FILENAME}"
kill -SIGINT "${TRACE_CMD_PID}"
}
trap "cleanup SIGHUP" SIGHUP
trap "cleanup SIGINT" SIGINT
wait "${TRACE_CMD_PID}"
ls -la "${OUTPUT_FILENAME}"
#sudo chown $(id -u):$(id -g) "${OUTPUT_FILENAME}"