do{학습}while

YOCTO) 빌드 시간을 단축 시간을 방법 본문

YOCTO

YOCTO) 빌드 시간을 단축 시간을 방법

하이오야이 2025. 3. 23. 18:43

✅ Yocto 빌드 시간 단축 방법 총정리


1️⃣ DL_DIR 공유 (소스 다운로드 캐시)

  • 모든 패키지의 소스 코드(.tar.gz, git 등)를 저장하는 디렉토리
  • 한 번 다운로드한 파일은 다시 다운받지 않음
 
DL_DIR ?= "/shared/yocto/downloads"

🟢 효과: do_fetch 속도 향상
🟡 대상: 모든 개발자 공유 가능


2️⃣ SSTATE_DIR 공유 (컴파일 결과 캐시)

  • 빌드된 결과물(오브젝트, 바이너리)을 재사용
  • 동일한 버전/설정이면 다시 빌드하지 않음
SSTATE_DIR ?= "/shared/yocto/sstate-cache"

🟢 효과: do_compile, do_install 등의 중복 제거
🟡 대상: 협업/CI 환경에서 엄청 유용


3️⃣ TMPDIR 백업 및 재활용 (개인용 속도 개선)

  • TMPDIR는 전체 중간 빌드 결과가 저장됨 (한 번 빌드한 이미지를 빠르게 다시 만들 때 유용)
  • 다만 팀 공유는 ❌ 위험
 
TMPDIR ?= "${TOPDIR}/tmp"

🟢 효과: 동일한 이미지 반복 빌드에 좋음
🔴 대상: 개인 전용


4️⃣ INHERIT += "rm_work"로 빌드 후 불필요 파일 제거

  • 소스와 중간 산출물 삭제 → 디스크 절약, 재빌드 강제 방지
 
INHERIT += "rm_work"

🟡 효과: 디스크 사용량 절감, 간접적 속도 향상
🔴 주의: 디버깅 시 불편할 수 있음


5️⃣ 패러렐 빌드 (병렬 처리)

conf/local.conf에서 다음 두 항목 설정:

BB_NUMBER_THREADS = "8" PARALLEL_MAKE = "-j8"

보통 CPU 코어 수 기준으로 설정 (예: 8코어 → 8)

🟢 효과: 전체 빌드 속도 체감 급상승
🟡 대상: 로컬 컴퓨터 성능에 따라 다름


6️⃣ bitbake -k로 멈추지 않고 계속 빌드

bitbake -k core-image-minimal
  • 하나가 실패해도 다음 패키지 계속 시도
  • CI에서 전체 캐시를 빨리 채우고 싶을 때 유용

7️⃣ BB_NO_NETWORK = "1" → 오프라인 빌드 (네트워크 차단)

BB_NO_NETWORK = "1"
  • fetch 단계가 느려지는 걸 방지 (DL_DIR로 대체)
  • 재현 가능한 빌드 환경 테스트에 좋음

8️⃣ icecc(distcc) 사용 → 분산 컴파일

  • 여러 개발/빌드 서버로 컴파일을 분산
 
INHERIT += "icecc"
  • icecc-create-env, icecc-scheduler로 환경 구성 필요

🟢 효과: 컴파일 시간 대폭 단축
🔴 단점: 사전 구성 필요


9️⃣ caches 및 bitbake -S 활용

  • bitbake -S none 등으로 캐시만 미리 만들어두고 빌드하지 않기
  • 또는 bitbake -g로 의존성 그래프 추출 → 빌드 병목 분석 가능

10️⃣ 이미지 경량화 (불필요한 패키지 제거)

  • 빌드 시간이 이미지 크기에 비례하므로, 기능을 최소화하면 속도도 빨라짐
 
IMAGE_INSTALL:remove = "package-you-dont-need"

✅ 최종 요약 표

방법대상효과
DL_DIR 공유 fetch 캐시 빠른 소스 재사용
SSTATE_DIR 공유 컴파일 캐시 컴파일 재사용
TMPDIR 재활용 개인 빌드 반복 빌드 속도 ↑
rm_work 디스크 절약 간접적 속도 개선
병렬 빌드 전체 빌드 속도 급상승
icecc/distcc 네트워크 병렬화 컴파일 시간 절감
오프라인 빌드 재현성 ↑ fetch 생략
의존성 최적화 빌드 최소화 병목 제거