3P by neo 7달전 | favorite | 댓글 1개

트레이싱 도구 소개

  • 트레이싱에 대한 열정과 경험을 바탕으로 다양한 트레이싱 방법 소개
  • 새롭고 흥미로운 트레이싱 도구 2개 포함
  • 트레이싱의 핵심: 시스템에서 발생한 타임스탬프 데이터 수집 및 타임라인 UI 시각화

데이터를 타임라인 UI에 쉽게 시각화하기

  • Chromium Event JSON Format을 이용한 간단한 JSON 형식의 이벤트 데이터 시각화
  • Google의 Perfetto 또는 Catapult 뷰어를 통한 트레이싱 파일 확인
  • Python 유틸리티를 활용하여 트레이스 파일을 클릭 가능한 링크로 변환 및 공유

고급 포맷: Fuchsia Trace Format과 Perfetto Protobuf

  • Fuchsia Trace Format (FTF): 크기가 큰 트레이스 파일을 위한 간단하고 컴팩트한 바이너리 포맷
  • Perfetto Protobuf: 더 많은 기능을 지원하는 컴팩트 포맷, Protobuf 라이브러리를 통한 생성 가능

다양한 트레이싱 도구

  • Speedscope, pprof, Rerun 등 다양한 트레이스 시각화 도구 소개
  • Trace Compass, Firefox Profiler 등의 프로파일러 뷰어 언급

트레이싱 방법

  • 하드웨어 브레이크포인트, perf, GDB 스크립팅 등 저수준 트레이싱 방법 소개
  • Intel Processor Trace를 활용한 프로그램 실행 추적
  • magic-trace: 함수 호출을 시각화하는 트레이스 파일 생성 도구

계측 기반 트레이싱 프로파일러

  • Tracy, Optick, Perfetto 등의 계측 기반 트레이싱 프로파일러 비교
  • 추가 정보를 포함하는 이벤트 데이터의 중요성 강조

eBPF

  • 리눅스 커널을 이용한 트레이싱을 위한 eBPF 서브시스템 소개
  • BCC, bpftrace, ply 등의 eBPF 트레이싱 도구 소개

eBPF 예시: Anthropic의 Perfetto 기반 패킷 및 사용자 이벤트 트레이싱

  • 네트워킹 코드의 꼬리 지연 분석을 위해 BCC와 Perfetto 시각화 결합
  • eBPF를 이용한 사용자 공간 이벤트 트레이싱 및 C 헬퍼를 통한 이벤트 처리 최적화

바이너리 계측

  • 소스 코드 접근이 불가능할 때 사용되는 바이너리 계측 방법 소개
  • bpftime, E9Patch, Frida 등의 도구 설명

분산 트레이싱

  • 서비스 간 트레이싱을 위한 OpenTelemetry, Zipkin, Odigos 등의 솔루션 언급

샘플링 프로파일러

  • 주기적으로 프로그램의 전체 호출 스택 샘플링하는 프로파일러 소개
  • Speedscope, Samply 등의 시간 축을 포함하는 UI 사용

QEMU 계측

  • 모든 트레이싱 도구가 실패할 때 사용되는 QEMU의 전체 에뮬레이션 및 훅킹
  • Cannoli, QEMU TCG Plugins, usercorn 등의 도구 소개

GN⁺의 의견

이 글에서 가장 중요한 것은 다양한 유형의 문제를 해결하기 위해 사용할 수 있는 트레이싱 방법의 폭넓은 카탈로그를 제공한다는 점이다. 초급 소프트웨어 엔지니어에게도 이해하기 쉬운 수준으로 다양한 트레이싱 도구와 방법을 소개하고 있어, 트레이싱에 관심이 있는 사람들에게 매우 유익하고 흥미로운 내용을 담고 있다. 특히, 실제 사례를 통해 eBPF 트레이싱과 Perfetto 시각화를 결합한 예시는 실무에서의 적용 가능성을 보여주며, 독자들에게 새로운 인사이트를 제공할 수 있을 것이다.

Hacker News 의견
  • Spall 개발자의 의견:

    • Spall은 글에서 언급된 경량 프로파일러 중 하나임.
    • 저자의 '암시적 순서 트리'에 대한 블로그 포스트가 인상적이었으며, 큰 트레이스를 위한 트리에 대한 다른 사람의 관점을 볼 수 있어 좋았음.
    • eytzinger-ordered 4-ary 트리가 165fps 이상에서도 30억 개 이상의 함수를 처리하는 데 문제가 없음.
    • 현재 타임스탬프 델타 압축을 작업 중이며, 이를 통해 이벤트를 더 작은 공간에 담아내려고 함.
    • Spall의 네이티브 빌드에서 128GB RAM으로 100억 개의 이벤트를 처리할 수 있기를 희망함.
  • Windows 애플리케이션 작업자에게 ETW 추천:

    • Windows 애플리케이션을 작업하는 사람들에게 Event Tracing for Windows(ETW)를 추천함.
    • Bruce Dawson의 블로그가 ETW에 대한 최고의 시작점임.
  • 오픈 소스 솔루션에 대한 개요:

    • 공간 내 오픈 소스 솔루션에 대한 상당히 좋은 개요임.
    • 시간 여행 디버깅이라는 중요한 트레이싱 영역이 누락되었음.
    • 하드웨어 트레이스, 계측, 결정적 재생을 활용하는 흥미로운 솔루션이 있음.
    • 프로그램의 특정 시점으로 돌아가 메모리를 전체적으로 재구성하여 디버깅할 수 있는 시각화 통합이 있으면 더 좋음.
  • Anthropic에서의 채용 방식:

    • Anthropic에서 Tristan과 함께 일할 기회에 대한 마지막 제안이 매우 매력적임.
    • Tristan이 작업할 내용에 대해 잘 설명함.
    • 블로그 포스트에 트레이스의 스크린샷이 더 있으면 좋을 것 같음.
  • Python 프로그램과 패킷 상관관계 기술:

    • 특정 인자를 가진 시스템 호출을 추적하여 Python 프로그램의 사용자 공간 이벤트와 패킷 간 상관관계를 찾는 기술에 대한 감탄.
  • IDE 플러그인 개발 팀의 경험:

    • 생산 중인 앱에 전통적인 디버거의 기능을 추가하는 IDE 플러그인을 개발 중임.
    • 사용자가 런타임 중 임의의 변수를 분석하여 코드 내에서 무슨 일이 일어나는지 이해할 수 있게 함.
    • 이 플러그인은 무료임.
  • JavaScript 실행 비용 프로파일링에 대한 업계의 필요:

    • JavaScript의 실행 비용을 결정적으로 프로파일링하는 더 나은 방법이 필요함.
    • Chromium에서 Linux perf를 이용한 시도가 있었지만, 해당 변경 사항은 제거됨.
    • CI에서 JavaScript의 비용을 결정적으로 측정하는 방법에 대한 팁이 궁금함.
  • dtrace 언급 및 bcantrill의 란트:

    • 저자가 dtrace를 간단히 언급함.
    • bcantrill이 bpftrace가 이벤트를 조용히 잃어버리는 문제와 dtrace가 그렇지 않은 이유에 대해 최근에 한 란트를 확인할 것을 추천함.
  • 유용한 도구들에 대한 감사:

    • 글에서 언급된 유용한 도구들에 대한 감사의 표현.