Yocto 환경에서 병렬 빌드로 icecc (icecream)을 사용할 수 있고, 회사 내에 workstation farm을 만들어서 사용하려고 테스트 중에 있다. 아직 완벽하게 테스트가 끝난 것은 아니기 때문에 현재 상태와 문제점 및 개선점을 중간에 정리해보려고 적어 놓았다. icecc 설정 방법에 대해서는 나중에 블로그 글 하나로 쓸 예정이니 기다려주거나 구글링을 해서 직접 설정해보기 바란다.
icecc (icream란)?
IceCC (Icecream)은 컴파일 작업을 여러 대의 컴퓨터에 분산시켜 컴파일 속도를 높이는 오픈소스 툴이다. 주로 리눅스 환경에서 대규모 소프트웨어 빌드에 사용되며, GNU make나 CMake와 같은 빌드 시스템과 함께 사용될 수 있다.
주요 특징:
- 분산 컴파일: 네트워크에 연결된 여러 컴퓨터에서 컴파일 작업을 동시에 수행하여 빌드 시간을 단축시킨다.
- 스케줄러 역할: icecc-scheduler가 분산할 작업을 할당하고 관리하여, 컴파일 요청을 효율적으로 배분한다.
- 크로스 컴파일 지원: 다른 컴파일러와 호환되어, 크로스 컴파일 환경에서도 사용할 수 있다.
- 오토 스케일링: 네트워크 내에서 가용한 시스템 리소스를 동적으로 할당해 최적의 속도로 빌드를 수행한다.
- 모니터링: icecc monitor 명령으로 분산 빌드 진행 상태와 노드 활동을 실시간으로 확인할 수 있다.
Icecream은 특히 Yocto와 같은 대규모 프로젝트에서 빌드 시간을 줄이는 데 유용하며, 기존 distcc와 유사하지만 더 많은 자동화 기능과 유연성을 제공한다.
현재 상황 / 중간 결과 / 보완할 점
4대의 workstation으로 설정하여 사용하고 있다. poky kirkstone branch에서 core-image-minimal을 빌드하는데는 정상적으로 icecc가 동작했고 빌드를 성공했다.
하지만 실제 제품 개발하는 yocto 기반 코드를 빌드할 때는 clang관련 컴포넌트를 빌드할 때 -fno-diagnostics-show-caret 옵션으로 인해 configure에서 에러가 발생했다. 현재 yocto에서 사용하는 icecc에서 clang 빌드는 지원하지 않는다. clang 관련 컴포넌트는 ICECC_RECIPE_DISABLE 목록에 추가해주거나 ICECC_CARET_WORKAROUND 변수를 1로 설정해 gcc를 포함한 전체적 컴포넌트에서 -fno-diagnostics-show-caret 옵션을 사용하지 않도록 해줄 수 있다. 필자는 앞의 방법을 추천한다.
물론 이것은 yocto에서 icecc를 지원하도록 meta/classes/icecc.bbclass를 구현한 친구가 clang같은 좀 더 많은 코너 케이스를 생각하지 않았던 것 같다. yocto의 icecc에서 clang을 공식적으로 지원하기 전까지는 위의 옵션을 clang 빌드면 자동으로 추가하지 않도록 구현을 바꾸면 된다. 추후 시간이 되면 간단히 만들어서 upstream을 할 예정이다.
추가적으로 clang을 지원하도록 구현을 바꿔볼까도 생각하고 있다. 간단한 1,2개 수정으로 clang을 테스트 해봤을 때 잘 동작하지 않는 것 같아서 조금 더 시간이 필요하다.
결과적으로 위 두변수 사용해서 모두 빌드에 성공했고, 이제 빌드시간을 비교해보고 데이터를 가지고 유용성에 대해서 판단 후 회사 전체적으로 workstation을 모아 설정해볼 생각이다.
CI 구성에 적용해 보는 것은 많은 이득이 있는 것 같지 않다고 개인적으로 판단해 유보할 생각이다. 그 이유 중에 하나는 cloud 환경을 비용을 내면서 사용하고 있는데 항상 켜 있어야 하고, 여러개를 어떻게 설정하고 관리하며 성능 좋은 instance type에 비해 큰 장점이 과연 있을까 아직 확신하지 못하기 때문이다.
참고자료
- https://www.youtube.com/watch?v=VpK27pI64jQ:5년 전 자료이지만 Yocto에서 icecc를 사용하는 방법에 대해서 소개한다.
- https://github.com/JPEWdev/icecream-sundae: 위에 그림에도 나왔듯이 icecc가 잘 돌아가는지 각 workstation의 상황을 UI로 보여주는 도구이다.
'Yocto' 카테고리의 다른 글
Yocto 회원 가입 (MBition) (0) | 2024.09.25 |
---|---|
Yocto 소스 코드 MIRROR를에 AWS S3와 연결 (0) | 2024.08.15 |
Yocto 소스 코드 MIRROR를에 대한 이해 및 AWS Storage Service (0) | 2024.08.14 |
Yocto Shared State Cache 디버깅 하기 (0) | 2024.07.31 |
AWS에서 Yocto Shared State Cache 설정 (CI 환경) (0) | 2024.06.25 |