-
What the Fork은 실시간으로 C/C++/Rust 등 다양한 빌드 과정을 시각화하는 크로스플랫폼 도구임
- 기존 빌드 시스템의 병렬 처리 부족, 비효율적 프로세스 등 구조적 문제를 쉽게 파악할 수 있음
- 모든 빌드 시스템 및 프로그래밍 언어에서 동작하며, make, ninja, gradle, zig, cargo 등 다양한 빌드 툴 지원 가능함
-
시스템 호출 모니터링을 통해 각 프로세스의 실행 시간, 명령어, 종속 관계를 박스 형태로 시각화함
- 빌드 최적화, 병목 현상 분석, CI 성능 개선 등에 매우 유용한 도구임
소개 및 배경
-
What the Fork은 빌드가 느려지는 원인을 시각적으로 진단하기 위해 개발된 실시간 빌드 시각화 도구임
- LLVM 프로젝트처럼 코드량 자체가 많아서 컴파일 속도가 느릴 수 있으나, 대부분의 빌드는 비효율적인 설정 탓에 불필요하게 오래 걸리는 경우가 많음
- 기존에는 빌드의 문제점을 직접 확인하거나 구조적 문제를 한눈에 보기 어려웠기 때문에 이런 도구가 필요했음
- 이 도구는 크로스플랫폼으로 설계되었고, 모든 빌드 시스템과 언어에 적용 가능함
주요 기능 및 사용법
-
What the Fork은 단순한 시스템 프로파일러가 아닌, 빌드 특화 문제를 진단하는 도구임
- 예시로는 make 사용 시 -j 플래그 미사용, 특정 파일 혹은 컴파일 단계에서의 시간 쏠림, 병렬 처리가 가능한데도 순차적으로 실행되는 명령어 탐지 등이 있음
- 특히 CI 환경의 clean build 성능 분석 및 최적화에 효과적임
- 사용 방법은 wtf 명령어를 빌드 명령 앞에 붙여 실행 (예: wtf make, wtf cargo build, wtf npm run build 등)
- 빌드가 시작되면 UI가 실행되어 각 프로세스의 진행 상황을 실시간으로 갱신함
UI 및 시각화 방식
- 각 빌드 프로세스는 박스 형태로 타임라인 상에 표시되며, 색상으로 유형 구분
- 프로세스의 부모-자식 관계는 중첩 구조로 표현
- 하단 패널에서는 선택된 프로세스의 실행 시간, 작업 디렉토리, 전체 명령어 인자 정보를 표시
작동 원리
- 빌드는 여러 프로세스(예: bash, clang, ld)의 조합임
- 대규모 빌드는 cargo, make, bazel, gradle, xcodebuild 등 다양한 빌드 도구를 사용하며, 이들은 실제로 많은 명령어와 종속성, 캐시, 스케줄링 작업을 수행함
- 터미널 출력만으로는 중첩된 프로세스(예: clang이 내부적으로 호출하는 ld 등)와 세부 타이밍 구조를 파악 불가
- 이를 위해 OS별 프로세스 시작, 종료를 감지하는 시스템 호출(macOS: Endpoint Security API, Linux: ptrace(), Windows: Event Tracing for Windows 등)을 활용함
- 이런 방식으로 빌드 전 과정 및 타임라인 복원, 각 단계의 실행 경로와 시간 식별 가능함
- 빌드 외에도 다양한 서브프로세스 트래킹에 활용할 수 있음
실제 사례 및 관찰 결과
- 여러 엔지니어(Delta, Mozilla, Apple 소속)가 실제로 프로젝트에 적용 후 예상치 못한 이슈를 발견함
- 예시 1: Cargo를 사용하는 오픈소스 프로젝트에서 파일들이 순차적으로 컴파일되어 병렬성 부족 확인 (10코어 CPU에서 10배 이상 속도 개선 가능성 확인)
- 예시 2: Ninja를 활용한 LLVM 빌드에서는 모든 CPU 코어가 효율적으로 병렬 작업을 수행, 이상적인 빌드 효율 달성
- 예시 3: CMake 기반 프로젝트에서 cmake/make/clang의 중첩 실행 및 Xcode/OS 버전 재확인이 85회 반복되는 비효율적 구조 발견(실제 작업은 극히 일부)
- 예시 4: xcodebuild를 이용한 대형 Objective-C 프로젝트에서 빌드 후반부 병렬 처리 부족 및 빌드 시작 전 6초간 비활성 상태 존재(비교적 ninja는 0.4초 후 바로 컴파일 시작)
- 예시 5: Zig가 Orca Project를 컴파일할 때 종속성 빌드 순서가 무작위로 정해져, 운에 따라 병렬 처리 효율이 바뀜. 일부 종속성이 마지막에 실행되어 병렬성 저하되는 현상 관찰
- 예시 6: make/go를 활용한 GitHub CLI 프로젝트에서 종속성 다운로드 시간이 큼. 종속성 축소 시 빌드 속도 개선 기대
활용 효과 및 한계
- 시각적 타임라인 분석을 통해 예상치 못한 병목 구간, 불필요한 의존성 반복, 병렬성이 부족한 영역 확인 가능
- 종속성 문제, 불필요한 재작업, 특정 툴의 비효율 등 구조적 개선점을 빠르게 파악하여 빌드 성능 최적화에 직접적 활용 가능
- 프로세스의 전체 명령어 확인으로 더 세밀한 분석 가능
베타 프로그램
-
What the Fork은 Windows, Linux, macOS에서 동작
- 피드백을 원하는 개인 및 팀은 프라이빗 베타 신청 가능 (구글 폼 링크 제공)