콘텐츠로 이동

Tracy 프로파일러 - 실시간 프레임 프로파일러 치트시트

Tracy 프로파일러 - 실시간 프레임 프로파일러 치트시트

Tracy는 실시간, 나노초 해상도 하이브리드 프레임 및 샘플링 프로파일러로, 게임 및 저지연시간 C++과 Rust에서 널리 사용됩니다. 코드에 가벼운 영역 매크로를 추가하고, Tracy는 데스크톱 UI로 타이밍 데이터를 실시간으로 스트리밍하는데, 모든 프레임, 모든 영역, GPU 타이밍, 메모리 할당, 그리고 프로그램이 실행되는 동안 락 경쟁을 볼 수 있습니다. 수동 도구화와 자동 샘플링의 조합은 정밀 의미 영역과 기여할 수 없는 핫스팟을 모두 제공합니다.

설치

컴포넌트방법
서버 (UI)repo에서 profiler/를 빌드하거나 릴리스 다운로드
클라이언트 (라이브러리)빌드에 TracyClient.cpp + 헤더 추가
Rustcargo add tracy-client (또는 tracing-tracy)
활성화TRACY_ENABLE 정의로 컴파일
확인UI 시작; 클라이언트 연결을 기다림

C++ 도구화

#include "tracy/Tracy.hpp"

void update() {
    ZoneScoped;                    // zone named after the function
    physics();
}

void render() {
    ZoneScopedN("Render Pass");    // explicit name
    ZoneColor(0x00FF00);
    draw();
}

int main() {
    while (running) {
        update();
        render();
        FrameMark;                 // marks a frame boundary
    }
}
매크로목적
ZoneScoped인클로징 범위 시간
ZoneScopedN("name")명명된 영역
ZoneText(str, len)영역에 텍스트 첨부
FrameMark프레임 경계 분할
TracyPlot("fps", v)시간에 따른 수치 값 플롯
TracyMessage(...)메시지를 타임라인에 로깅
TracyLockable(...)뮤텍스의 경쟁 추적

Rust 도구화

use tracy_client::{Client, span};

fn main() {
    let _client = Client::start();
    loop {
        {
            let _s = span!("update");
            update();
        }
        tracy_client::frame_mark();
    }
}

또는 tracing-tracy 크레이트로 tracing에 연결하면 기존 범위가 Tracy에 자동으로 표시됩니다.

메모리 및 GPU

기능방법
할당 추적TracyAlloc(ptr, size) / TracyFree(ptr)
맞춤형 할당자할당/해제를 매크로로 래핑
GPU 영역 (Vulkan/D3D/OpenGL)TracyVkZone, TracyD3D12Zone
GPU 컨텍스트한 번 생성, 그러면 영역이 연결

UI

보기표시
Timeline스레드당 영역, 프레임별
Statistics영역당 총 시간
Find zone한 영역의 기간 히스토그램
Compare두 캡처 비교 (변경 전/후)
Memory할당 타임라인 및 누수
Locks스레드 간 경쟁
Flame graph통합 호출 구조

워크플로: 프레임 스파이크 추적

단계동작
1클라이언트가 연결된 상태로 실행; 히치 재현
2타임라인에서 긴 프레임 찾기
3확대 — 어느 영역이 지배하는가?
4해당 영역에 대해 “Find Zone” 열기 → 기간 히스토그램
5아웃라이어의 컨텍스트 확인 (락, 할당, GPU 대기)
6수정, 다시 캡처, Compare를 사용하여 개선을 증명

그 두 캡처 비교 워크플로는 Tracy의 가장 실용적인 기능 중 하나입니다 — “더 빠른 것 같아”를 측정된 델타로 변환합니다.

샘플링 모드

수동 영역을 넘어서, Tracy는 자동으로 호출 스택을 샘플할 수 있습니다 (Linux/Windows), 도구화하지 않은 코드에서 시간을 잡습니다. 둘 다 결합하세요: 영역은 의미 구조를 주고, 샘플링은 간격을 채웁니다.

Tracy vs 관련 프로파일러

측면TracyperfPerfetto
모델도구화된 영역 + 샘플링샘플링시스템 전체 추적
해상도나노초샘플 간격이벤트 레벨
실시간 보기예 (실시간)아니오사후
GPU 지원기본 제공아니오부분
최고의 용도게임, 프레임 기반, 저지연 C++/RustCPU 핫 경로전체 시스템 타임라인

perfPerfetto를 보완합니다; Tracy의 장점은 라이브, 프레임 지향, 도구화된 프로파일링입니다.

리소스