vkgs-sim / scripts /profile.sh
kimjunhan's picture
Add files using upload-large-folder tool
4c75661 verified
Raw History Blame Contribute Delete
2.14 kB
#!/usr/bin/env bash
# 시뮬레이터 하드웨어 프로파일링 (Tracy). 뷰어는 TRACY_ON_DEMAND 로 빌드돼 있어 캡처가 붙을 때만 기록한다.
#
# bash scripts/profile.sh OUT.tracy -- <vkgs_viewer 또는 nusim 명령...>
# 캡처를 띄우고 명령을 돌린 뒤 .tracy 저장 + 구간 통계 출력 (창 없이도 된다: --offscreen)
# build/tracy-profiler/tracy-profiler OUT.tracy 저장한 캡처를 GUI 로 (CPU·GPU 타임라인, 패스별 GPU 구간)
# build/tracy-profiler/tracy-profiler 실행 중인 시뮬레이터(nusim render view)에 실시간으로 붙기
#
# 기록되는 것: CPU 구간 (render·record·gpu wait·pass·png queue/encode), GPU 구간 (렌더 그래프 패스·그리기 항목,
# Vulkan 타임스탬프), 프레임 경계, 그래프 (보이는 가우시안 수, 속도).
set -eo pipefail
: "${1:?사용: bash scripts/profile.sh OUT.tracy -- <명령...>}"
out=$(realpath -m "$1"); shift # 저장소 루트로 옮기기 전에 절대 경로로
[ "${1:-}" = "--" ] && shift
[ $# -gt 0 ] || { echo "명령이 없습니다: bash scripts/profile.sh OUT.tracy -- <명령...>" >&2; exit 2; }
cd "$(dirname "$0")/.."
source scripts/local_env.sh >/dev/null
[ -x build/tracy-capture/tracy-capture ] || bash scripts/build_tracy.sh
build/tracy-capture/tracy-capture -o "$out" -f > "${out%.tracy}.capture.log" 2>&1 &
cap=$!
trap 'kill $cap 2>/dev/null || true' EXIT # 명령이 실패해도 캡처를 남기지 않는다
sleep 1
rc=0
"$@" || rc=$?
# 캡처는 클라이언트가 끊기면 끝난다. 명령이 캡처가 붙기 전에 끝났으면 기다리지 않는다 (최대 30초)
for _ in $(seq 60); do kill -0 $cap 2>/dev/null || break; sleep 0.5; done
kill -0 $cap 2>/dev/null && { echo "캡처가 연결되지 않았습니다 (명령이 너무 빨리 끝남?)" >&2; kill $cap; exit 1; }
trap - EXIT
[ $rc -eq 0 ] || { echo "명령 실패 (종료 코드 $rc)" >&2; exit $rc; }
echo "캡처 → $out"
build/tracy-csvexport/tracy-csvexport "$out" |
awk -F, 'NR > 1 { printf " %-14s 횟수 %6d 평균 %9.3f ms 합 %9.1f ms\n", $1, $6, $7 / 1e6, $4 / 1e6 }'