Strobelight - 오픈소스 기반의 프로파일링 서비스

4 days ago 4

  • Strobelight은 Meta의 프로파일링 오케스트레이터로, 여러 오픈 소스 기술을 결합해 엔지니어들이 성능과 리소스 활용을 개선하도록 지원함
    • 도입 후 약 15,000대의 서버에 해당하는 연간 용량 절감 효과 달성

Strobelight의 동작 방식

  • Strobelight은 단일 프로파일러가 아니라 여러 프로파일러를 조정하는 오케스트레이터임
  • 모든 Meta의 프로덕션 호스트에서 실행되며, 다음과 같은 성능 지표를 수집함
    • CPU 사용량
    • 메모리 할당
    • 기타 성능 메트릭
  • 엔지니어가 이를 통해 성능 병목 현상 및 리소스 낭비 문제를 파악하고 코드 최적화 가능

프로파일러의 역할 및 필요성

  • 프로파일러는 샘플링 기반의 통계 분석 도구임
  • 예: CPU 사이클 이벤트에서 함수 호출 스택과 CPU에서 함수가 실행되는 시간을 분석 가능
  • 코드 실행 상태를 상세히 파악하여 성능 개선에 기여함

Strobelight의 다양한 프로파일러

  • Strobelight에는 총 42개의 프로파일러 포함됨
    • jemalloc 기반 메모리 프로파일러
    • 함수 호출 수 프로파일러
    • Python, Java, Erlang 등 언어별 이벤트 기반 프로파일러
    • AI/GPU 프로파일러
    • 오프-CPU 시간 추적 프로파일러
    • 서비스 요청 지연 시간 추적 프로파일러
  • 프로파일링 도구는 명령줄 도구나 웹 UI에서 실행 가능
  • 연속 프로파일링 및 특정 조건 발생 시 트리거 기반 프로파일링 설정 가능

Ad-hoc 프로파일러 지원

  • 엔지니어가 새 프로파일러를 추가하려면 여러 코드 수정 및 배포 필요
  • bpftrace 스크립트를 작성해 빠르게 프로파일러 추가 가능
  • 엔지니어가 특정 함수의 성능 문제를 신속히 추적 및 분석 가능

프로파일러 간 충돌 방지

  • Strobelight은 프로파일러 간 자원 충돌 방지 시스템 내장
  • CPU 사이클 추적 중 다른 PMU 카운터 사용 금지 등 규칙 적용
  • 동시 실행 및 대기열 관리 시스템 통해 리소스 충돌 최소화

자동 프로파일링 및 동적 샘플링

  • Strobelight는 모든 Meta 서비스에서 자동으로 프로파일링 실행
  • 각 서비스별 작업 부하에 따라 샘플링 빈도 및 기간 자동 조정
  • 샘플링 확률 및 수집 빈도 자동 보정하여 일관된 데이터 제공

성능 최적화 및 용량 절감 사례

LBR 프로파일러

  • Intel의 하드웨어 기능인 Last Branch Record (LBR) 샘플링 지원
  • FDO (Feedback Directed Optimization) 에서 사용되어 바이너리 성능 향상
  • Meta의 상위 200개 서비스에서 CPU 사이클 사용량 최대 20% 절감 효과

이벤트 프로파일러

  • Linux의 perf 도구와 유사한 기능 수행
  • 성능 이벤트 (CPU 사이클, L3 캐시 미스 등) 샘플링 및 시각화
  • 코드 경로에서 발생하는 문제를 사전에 감지 및 수정 가능

Stack Schemas 및 Strobemeta

Stack Schemas

  • 함수 호출 스택에 태그 추가해 가시성 향상
  • 필터링 및 시각화에서 불필요한 함수 제거 가능

Strobemeta

  • 런타임에서 동적 메타데이터를 호출 스택에 추가
  • 서비스 엔드포인트, 지연 시간 등과 관련된 세부 정보 제공

심볼화 처리 (Symbolization)

  • 바이너리의 가상 주소를 함수 이름 및 소스 코드 정보로 변환
  • DWARF, ELF, gsym, blazesym 등 오픈 소스 기술 기반
  • 심볼화 작업은 프로파일링 후 진행해 성능 저하 방지

Strobelight 데이터 시각화 도구

Scuba

  • SQL 기반 쿼리 및 시각화 도구
  • 프로파일링 데이터에 대해 시계열, 분포, 플레임 그래프 등 제공

Tracery

  • 시간 기반의 복합 프로파일링 데이터 시각화 도구
  • 서비스 요청 스팬, CPU 사이클, 오프-CPU 데이터 통합 시각화 가능

"Biggest Ampersand" 사례

  • 엔지니어가 Strobelight 데이터를 통해 std::vector 복사 문제 발견
  • auto 키워드 뒤에 & 추가 → 불필요한 복사 방지
  • 결과적으로 연간 약 15,000대 서버 절감 효과 발생

오픈소스

Read Entire Article