Yocto

Yocto 병렬 빌드 옵션 최적화

chbae 2024. 6. 10. 00:14
728x90

Yocto 프로젝트에서 병렬 빌드 옵션을 설정하면 빌드 속도를 크게 향상시킬 수 있다. 일반적으로 Yocto 프로젝트는 OpenEmbedded 빌드 시스템을 사용하며, 병렬 빌드 옵션을 설정할 때 다음 두 가지 주요 변수를 설정해야 한다.

  • BB_NUMBER_THREADS: BitBake가 병렬로 실행할 수 있는 스레드의 수를 지정한다.
  • PARALLEL_MAKE: make가 병렬로 실행할 수 있는 작업의 수를 지정한다.

이 변수의 기본 값은 빌드하는 호스트의 CPU 개수 값으로 meta/conf/bitbake.conf 파일에 설정 되어 있다.

 

작은 프로젝트나 Yocto 프로젝트의 레퍼런스인 Poky를 빌드할 때 기본 옵션을 사용해도 크게 상관은 없지만 이 옵션들은 빌드 호스트 머신의 성능과 프로젝트에 맞게 커스터마이즈 해서 설정하면 훨씬 더 좋은 이득을 얻을 수 있다.

 

다음은 필자가 AWS Instance (type: c6i.x16large - 64 Core, 128GB Memory)를 사용하여 진행중인 프로젝트의 빌드 피크치를 캡쳐한 화면이다. 병렬 옵션 설정은 BB_NUMBER_THREADS와 PARALLEL_MAKE 각각 24로 설정하였다.

 

htop으로 모니터링한 화면이고 64개 CPU가 거의 100% 차있고 메모리도 100기가 이상 사용하고 있는 것을 볼 수 있다. 이정도면 오히려 빌드 성능이 역으로 저하될 수도 있다. 물론 자세한건 더 들여다봐야한다. 이럴 때 AWS Instance 타입을 더 높은 것으로 변경할 것이냐, 아니면 병렬 빌드 개수를 줄일 것인가를 잘 생각해서 판단해야한다. 그리고 여러번의 실험을 통해 최적화를 하면 된다.

 

물론 shared state cache를 쓰고 있기 때문에 항상 저렇게 full로 차지 않을 수도 있다. 많이들 50%로 설정한다고도 하고.. 그래도 필자는 우선 24로 설정하도록 프로젝트에 가이드 하는 중이다. CI에서도 m7i.8xlarge와 m7i.16xlarge 두가지를 기본적으로 사용한다. 위의 사용률 추세를 지켜보고 상황에 따라 더 올려보려고도 하고 있다.

 

c6i.8xlarge도 설정해봤지만 메모리 부족으로 인해 컴파일 시 internal error가 가끔 나와서 사용하지 않기로 결정했고 위의 두개 인스턴스 타입도 가끔 메모리 부족 문제가 나와서 큰 변경사항이 있을 때는 기본으로 설정하지 않고 24로 설정하여 사용하도록 가이드 하고 있다.

 

조금 더 로컬에서 테스트 해보고 최적의 AWS Instance Type과 병렬 빌드 옵션을 결정할 예정이다. 한가지 확실 한 것은 Intel 기준으로 5세대, 6세대, 7세대 계속 진화하고 있는데 최신것이 제일 빌드 속도가 빠르다는 이야기이다. 그래서 7세대를 현재 기본으로 사용중에 있다.

 

참고로 아래는 ChatGPT 4o에게 물어봐서 나온 답변이다.