Development

Yocto에 최적화된 AWS EC2 Instance 사양

chbae 2023. 4. 23. 15:53
728x90

필자의 회사는 Yocto를 사용하여 Embedded Linux 빌드를 하고 있다. CI는 Jenkins를 사용하고 있으며  Jenkins Slave는 Docker환경을 AWS EC2 Instance에서 사용하고 있다.

 

제품을 빌드시간이 엄청나게 오래 걸려 여러가지 방안으로 줄이려는 노력을 하고 있다.

  1. AWS EC2 Instance Type 조정
  2. Incredibuild 솔루션 도입 검토 (PoC 진행 완료)
  3. 빌드 시간 오래 걸리는 컴포넌트 아키텍처 수정 및 내부 코드 최적화
  4. ccache 적용 검토

이 글에서는 1. AWS EC2 Instance Type 테스트 한 결과를 바탕으로 필자 회사의 환경에 최적화 된 EC2 Instance를 이야기해 보려고 한다.

 

현재 사용하고 있는 EC2 Instance Type은 r5.12xlarge (vCPU: 48 Cores, Mem: 384 GiB) 이다. Yocto 빌드의 특성상 Memory 보다 CPU 사양에 영향을 더 많은 영향을 받기 때문에 CPU를 늘리면서 Memory를 줄어는 것을 생각하여 테스트를 진행했다. 물론 AWS 환경이기 때문에 가격도 고려 요소 중 하나이다.

AWS EC2 Instance Type

Type AWS Instance Spec Cost (On-demand)
Compute Optimized c6i.24xlarge CPU: 96Cores,Mem: 192GiB $4.08
Compute Optimized c6i.16xlarge CPU: 64Cores,Mem: 128GiB $2.72
General Purpose m6i.16xlarge CPU: 64Cores,Mem: 256GiB $3.072
General Purpose m6i.12xlarge CPU: 48Cores,Mem: 192GiB $2.8472
Memory Optimized r5.12xlarge CPU: 48Cores,Mem: 384GiB $3.024
General Purpose (AMD) m6a.16xlarge CPU: 64Cores,Mem:256GiB $2.765

Test Result (with premirror and without shared state cache)

Instance Build time Etc
r5n.12xlarge (현재) 기준점  
m6i.12xlarge 27% 향상  
m6i.16xlarge 29.5% 향상  
c6i.xlarge timeout (12h) Out of memory
c6i.24xlarge 18.7% 향상  
m6a.16xlarge 10-20% 향상 (m6i.16xlarge 대비)  

Conclusion

테스트 전까지 c6.xlarge가 성능과 비용 면에서 최적이라고 생각했으나 필자의 환경에서 128GiB의 메모리는 64 Core를 감당하지 못한것 같다. 테스트 시 메모리 사용량을 관찰했을 때는 50GiB정도 였는데 솔직히 정확한 이유는 모르겠지만 결론적으로 메모리가 충분하지 않은것으로 판단된다. 또한 SSD가 추가된 d 타입도 같이 테스트 해봤으나 성능면에서 특별한 개선점을 찾지 못했다.

 

결론적으로 m6i.12xlarge (48 Cores, 192GiB), m6i.16xlarge (64 Cores, 256GiB) 가 필자 개발 환경에서 최적의 Type으로 생각되었지만 최근 AMD CPU로 테스트 한 결과 m6x.16xlarge 가 성능면에서는 더 좋은 것 같다. 하지만 아직 AMD에 대한 신뢰가 부족하여 Intel을 기본으로 설정하고 Instance가 모자른 경우 백업으로 선택될 수 있게 설정하였다.

Reference