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

> Clean Markdown view of GeekNews topic #19683. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=19683](https://news.hada.io/topic?id=19683)
- GeekNews Markdown: [https://news.hada.io/topic/19683.md](https://news.hada.io/topic/19683.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-03-11T10:11:45+09:00
- Updated: 2025-03-11T10:11:45+09:00
- Original source: [engineering.fb.com](https://engineering.fb.com/2025/01/21/production-engineering/strobelight-a-profiling-service-built-on-open-source-technology/)
- Points: 8
- Comments: 1

## Summary

Strobelight는 Meta의 프로파일링 오케스트레이터로, 여러 오픈 소스 기술을 결합하여 엔지니어들이 성능과 리소스 활용을 개선할 수 있도록 지원합니다. 이 시스템은 42개의 다양한 프로파일러를 포함하고 있으며, 자동 프로파일링 및 동적 샘플링을 통해 성능 병목 현상과 리소스 낭비 문제를 파악하여 코드 최적화를 가능하게 합니다. 또한, Strobelight는 프로파일러 간 자원 충돌 방지 시스템을 내장하고 있어, 효율적인 리소스 관리와 성능 최적화를 통해 연간 약 15,000대의 서버 용량 절감 효과를 달성했습니다.

## Topic Body

- 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대 서버 절감** 효과 발생  
  
### 오픈소스  
- Strobelight의 프로파일러 및 라이브러리 오픈 소스 : https://github.com/facebookincubator/strobelight

## Comments



### Comment 35702

- Author: neo
- Created: 2025-03-11T10:11:45+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=43290555) 
- Grafana의 Pyroscope를 지속적인 프로파일링을 위해 추천함, Go에서 사용 중이며 잘 작동함
  - 여러 언어를 지원하며 eBPF 기반임
- Meta/FB의 C++ 코드는 다른 오래된 대형 기술 기업의 코드보다 읽기 쉬움
- Strobelight는 특히 높은 qps 서비스에서 최적화할 가치가 있는 부분을 쉽게 볼 수 있게 해주는 생명선임
- Meta의 사용자 공간 바이너리에 프레임 포인터가 포함되어 있어 스택을 걷는 것이 가능해짐
  - 그렇지 않으면 복잡하고 비효율적인 방법을 사용해야 했을 것임
- 비네이티브 언어를 위한 이벤트 프로파일러가 있다고 주장함 (예: 파이썬)
  - 파이썬 상태를 읽는 방법이 명확하지 않음
- Strobelight의 GitHub 저장소는 아직 기본적인 수준임, 업데이트 시기를 궁금해함
- 이름이 고속 주기 운동을 검사하는 스트로브 사용을 참조하는 것 같음
- 오픈 소스 프로젝트가 이렇게 통합되었으면 좋겠음
  - Facebook의 내부 UI가 괜찮아 보임
- 계산 비용 모델링은 어려움
  - 유체 역학을 계산 요구 사항에 적용하면 재미있을 것임
- AWS/Azure/GCP의 주요 경쟁자들이 이런 도구의 부족으로 인해 어려움을 겪고 있다고 생각함
  - Microsoft에서 네트워크 트래픽을 추적하는 도구를 만들었고 디버깅에 매우 유용했음
  - Meta의 모든 것에 대해 의심을 가지고 접근함
- 성능 프로파일링임
  - 제목과 도메인을 보고 사용자 프로파일링인 줄 알았음
- Strobelight를 Parca와 Polar Signals를 통해 모두에게 제공하려고 노력 중임
  - 일부는 이미 존재하며 올해 더 많은 것이 나올 예정임
