빌드 캐시 활용

빌드 캐시는 Yocto 프로젝트에서 효율적으로 빌드를 최적화하고 시간과 자원을 절약하기 위해 매우 중요한 개념이다. Yocto 빌드 시스템은 빌드 아티팩트를 재사용하여 동일한 코드 변경에 대해 중복된 빌드를 피할 수 있도록 다양한 캐시 메커니즘을 제공한다. 이를 통해 빌드 시간을 단축하고 개발 주기를 가속화할 수 있다.

sstate 캐시

Yocto는 sstate 캐시(shared state 캐시)를 사용하여 이전에 빌드된 결과물을 재사용한다. 이 캐시는 빌드된 구성 요소들의 상태를 저장하여 동일한 구성 요소가 다시 빌드될 때 캐시된 결과물을 재활용할 수 있게 한다.

sstate 캐시의 주요 이점

sstate 캐시 설정

sstate 캐시는 conf/local.conf 파일 내에서 설정된다.

SSTATE_DIR ?= "/path/to/sstate-cache"

이 디렉토리는 Yocto 빌드 시스템의 데이터나 빌드된 아티팩트를 사용할 수 있는 성능 최적화된 공유 상태 디렉터리(sstate)를 포함한다.

ccache

ccache는 C/C++ 컴파일러를 위한 캐싱 시스템으로, 동일한 컴파일 명령을 요청받을 때 이전 컴파일 결과를 재사용함으로써 컴파일 시간을 단축한다.

ccache 설정

ccache를 사용하기 위해서는 Yocto의 설정 파일(conf/local.conf)에 다음과 같이 설정할 수 있다:

INHERIT += "ccache"
CCACHE_DIR = "/path/to/ccache"

디스크 I/O 최적화

디스크 I/O는 빌드 시간에 큰 영향을 미칠 수 있는 요인 중 하나이다. Yocto는 데이터를 많이 읽고 쓰기 때문에 빠른 디스크나 로컬 SSD를 사용하는 것이 좋다.

tmpfs 사용

임시 파일 시스템(tmpfs)을 빌드 디렉토리로 사용하면 디스크 I/O 병목을 줄일 수 있다.

TMPDIR = "/path/to/tmpfs"

이렇게 설정하면 빌드 중 생성되는 임시 파일이 RAM 디스크에 저장되어 빠른 접근이 가능한다.

Parallelism

병렬 빌드를 통해 빌드 시간을 더욱 단축할 수 있다. Yocto는 기본적으로 병렬 빌드를 지원하며, CPU 코어 수에 따라 병렬 작업을 수행할 수 있다.

병렬 빌드 설정

conf/local.conf 파일에서 다음과 같은 설정을 통해 병렬 빌드의 수준을 조절할 수 있다:

BB_NUMBER_THREADS ?= "number_of_cores"
PARALLEL_MAKE ?= "-j number_of_cores"

이 설정은 Yocto 빌드 시스템과 Makefile이 병렬로 작업을 수행하도록 한다.

네트워크 캐시 활용

Yocto 프로젝트에서 네트워크를 통해 추가적인 캐시 옵션을 활용할 수도 있다. 예를 들어, PREMIRRORSMIRRORS 옵션을 사용하여 소스 파일을 다운로드할 때 네트워크 캐시를 이용할 수 있다.

PREMIRRORS 설정

PREMIRRORS는 소스 파일을 다운로드하기 전에 검토할 미러 목록을 정의한다. 이를 통해 원격 서버에서 소스를 다운로드하기 전에 보다 가까운 미러에서 소스를 다운로드할 수 있다.

PREMIRRORS = "\
    git://.*/.* file:///path/to/local/mirror/ \n \
"

MIRRORS 설정

MIRRORS 옵션은 소스를 가져오지 못했을 때 대체할 미러 목록을 정의하는 데 사용된다. 이는 소스가 지정된 원본 위치에서 사용할 수 없을 때 유용하다.

MIRRORS = "\
    git://.*/.* http://backupmirror.org/sources/ \n \
"

기타 최적화 기법

PACKAGE_CLASSES 설정

Yocto 프로젝트에서 생성하는 패키지 유형을 조정하여 빌드 시간을 줄일 수 있다. 예를 들어, deb 대신 ipk 패키지를 사용하면 보다 빠른 패키지 빌드가 가능한다.

PACKAGE_CLASSES ?= "package_ipk"

빌드 타입 지정

빌드 유형을 지정하는 것도 중요한 최적화 요소이다. 개발 중 빠른 빌드를 위해 디버그 정보를 포함하지 않는 -O2 최적화를 사용할 수 있다.

DEBUG_BUILD = "0"

INHERIT 옵션

기본적으로 Yocto는 특정 기능을 추가하는 많은 클래스 파일을 inherit한다. 필요 없는 기능을 제거하면 빌드가 최적화될 수 있다.

INHERIT_remove = "rm_work"

BitBake 캐시

BitBake는 메타데이터를 캐시한다. 이 캐시는 파일 시스템의 $HOME/.bitbake 디렉토리에 저장된다. 캐시가 없거나 오래된 경우, BitBake는 재구성을 시도하므로 최신 상황을 유지하는 것이 중요하다.

TUNE_FEATURES 설정

프로세서 아키텍처에 맞춘 최적화도 매우 중요하다. TUNE_FEATURES 변수를 사용하여 특정 하드웨어 최적화를 설정할 수 있다.

TUNE_FEATURES = "arm armv7a"

외장 스크립트 사용

외장 빌드 스크립트를 사용하면 빌드 프로세스를 더 세밀하게 제어하고 특정 작업을 병렬 처리할 수 있다.

bitbake -c clean myimage
bitbake myimage

스크립트를 실행하여 전체 빌드 프로세스를 최적화할 수 있다.


Yocto 프로젝트의 성능을 최적화하기 위해서는 다양한 캐시 메커니즘(sstate, ccache 등)을 활용하고, 디스크 I/O와 네트워크 설정을 최적화하며, 병렬 빌드 옵션을 적절히 조정하는 것이 중요하다. 이를 통해 빌드 시간을 줄이고, 자원을 효율적으로 활용할 수 있다. Yocto의 설정 파일인 local.conf 파일을 적절하게 구성하여 이러한 최적화 옵션을 적용하면 개발의 생산성을 크게 향상시킬 수 있다.