필자의 회사는 Yocto를 사용하여 Embedded Linux 빌드를 하고 있다. CI는 Jenkins를 사용하고 있으며 Jenkins Slave는 Docker환경을 AWS EC2 Instance에서 사용하고 있다.
제품을 빌드시간이 엄청나게 오래 걸려 여러가지 방안으로 줄이려는 노력을 하고 있다.
- AWS EC2 Instance Type 조정
- Incredibuild 솔루션 도입 검토 (PoC 진행 완료)
- 빌드 시간 오래 걸리는 컴포넌트 아키텍처 수정 및 내부 코드 최적화
- 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
- AWS instance cost: https://aws.amazon.com/ec2/pricing/on-demand/
'Development' 카테고리의 다른 글
AGL AMM (All Member Meeting) Berlin 2023 후기 (0) | 2023.04.28 |
---|---|
"find" command의 대안 "fd"/"fd-find" (0) | 2023.04.26 |
ELCE (Embedded Linux Conference Europe) 2022 후기 (0) | 2023.04.23 |
ext4 파일을 local machine 에서 loopback mount 하여 내용 확인하기 (0) | 2023.04.23 |
LG webOS Platform & Production and Mercedes-Benz Infotainment Platform 개발 (0) | 2023.04.22 |