콘텐츠로 이동

sccache - 공유 컴파일 캐시 치트시트

sccache - 공유 컴파일 캐시 치트시트

sccache는 Mozilla의 (ccache 정신에서) 컴파일러 캐시로 Rust, C/C++, NVCC를 지원합니다. 컴파일러를 래핑하고, 입력을 해싱하고, 동일한 컴파일을 본 적이 있을 때 캐시된 객체를 반환합니다. 그 특징 기능은 공유 저장소 백엔드입니다 — S3, GCS, Redis, Azure — 따라서 전체 팀과 CI 플릿이 하나의 캐시를 공유합니다. 이는 “CI는 모든 스크래치에서 재컴파일”을 “CI는 이미 구축한 것을 다운로드”로 전환합니다.

설치

방법명령
Cargocargo install sccache --locked
macOS (Homebrew)brew install sccache
바이너리GitHub Releases에서 다운로드
확인sccache --version

Rust로 사용

# 일회성
RUSTC_WRAPPER=sccache cargo build

# 지속가능 (~/.cargo/config.toml)
[build]
rustc-wrapper = "sccache"
변수목적
RUSTC_WRAPPER=sccachesccache를 통해 rustc 라우팅
SCCACHE_DIR로컬 캐시 디렉토리
SCCACHE_CACHE_SIZE최대 로컬 캐시 크기 (예: 20G)

C/C++로 사용

# CMake
cmake -DCMAKE_C_COMPILER_LAUNCHER=sccache \
      -DCMAKE_CXX_COMPILER_LAUNCHER=sccache ..

# Make
make CC="sccache gcc" CXX="sccache g++"

효과성 확인

명령표시
sccache --show-stats히트, 미스, 캐시 크기, 오류
sccache --zero-stats테스트 빌드 전 카운터 리셋
sccache --stop-server백그라운드 서버 중지
sccache --start-server명시적으로 시작
# 콜드 vs 따뜻한 빌드 측정
sccache --zero-stats
cargo build --release
sccache --show-stats     # misses 예상
cargo clean && cargo build --release
sccache --show-stats     # hits 예상

핵심 숫자는 캐시 히트율입니다. 낮은 속도는 보통 입력에서 뭔가 변경되고 있음을 의미합니다 (플래그, 환경 변수, 절대 경로).

공유 클라우드 백엔드

# S3
export SCCACHE_BUCKET=my-build-cache
export SCCACHE_REGION=us-east-1
export AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=...

# Redis
export SCCACHE_REDIS=redis://cache.internal:6379

# GCS
export SCCACHE_GCS_BUCKET=my-build-cache
export SCCACHE_GCS_KEY_PATH=/path/to/key.json
백엔드환경 접두사
로컬 디스크SCCACHE_DIR
S3 / S3 호환SCCACHE_BUCKET, SCCACHE_ENDPOINT
RedisSCCACHE_REDIS
GCSSCCACHE_GCS_*
AzureSCCACHE_AZURE_*
GitHub ActionsSCCACHE_GHA_ENABLED=true

CI 패턴

# GitHub Actions
env:
  SCCACHE_GHA_ENABLED: "true"
  RUSTC_WRAPPER: "sccache"
steps:
  - uses: mozilla-actions/sccache-action@v0.0.5
  - run: cargo build --release
  - run: sccache --show-stats

캐싱을 깨뜨리는 것

원인수정
출력의 절대 경로--remap-path-prefix 사용
변경 RUSTFLAGS실행 간 플래그 안정 유지
증분 컴파일캐시 사용을 위해 비활성화 (CARGO_INCREMENTAL=0)
Proc 매크로 / 빌드 스크립트항상 캐시 가능하지는 않음
다른 컴파일러 버전캐시 키에 컴파일러 포함

sccache vs 대안

측면sccacheccacheBazel/Buck
언어Rust, C/C++, CUDAC/C++많음 (전체 빌드 시스템)
공유 캐시클라우드 백엔드 기본 제공주로 로컬원격 캐시/실행
설치래퍼 환경 변수래퍼새로운 빌드 시스템 채택
최고의 용도기존 빌드 속도 향상C/C++ 로컬 캐싱대형 모노레포

mold와 잘 어울립니다 — sccache는 컴파일 시간을 줄이고, mold는 링크 시간을 줄입니다.

리소스