들어가며 “우리 서비스에 어떤 EC2 인스턴스 타입을 써야 할까?” 클라우드 인프라를 운영하는 엔지니어라면 누구나 한 번쯤 마주치는 질문입니다. Amazon EC2는 700개가 넘는 인스턴스 타입을 제공하며, 각각 CPU 아키텍처와 세대, 메모리/네트워크 구성이 다릅니다. 스펙 시트에 적힌 vCPU 수와 메모리 용량만으로는 실제 워크로드에서의 성능을 예측하기 어렵습니다. 같은 8 vCPU라도 아키텍처(x86 vs ARM), 세대(5세대 vs 8세대), 워크로드 특성에 […] || 들어가며
“우리 서비스에 어떤 EC2 인스턴스 타입을 써야 할까?” 클라우드 인프라를 운영하는 엔지니어라면 누구나 한 번쯤 마주치는 질문입니다. Amazon EC2는 700개가 넘는 인스턴스 타입을 제공하며, 각각 CPU 아키텍처와 세대, 메모리/네트워크 구성이 다릅니다. 스펙 시트에 적힌 vCPU 수와 메모리 용량만으로는 실제 워크로드에서의 성능을 예측하기 어렵습니다. 같은 8 vCPU라도 아키텍처(x86 vs ARM), 세대(5세대 vs 8세대), 워크로드 특성에 따라 실제 성능이 크게 달라지기 때문입니다.
가장 확실한 방법은 실제 워크로드와 유사한 부하를 걸어 직접 측정하는 것입니다. 다만 무엇을 어떻게 측정할지 정하는 것도, 테스트 환경을 준비하는 것도 만만치 않습니다. 본 글에서는 CPU 집약적 워크로드의 성능을 간편하게 벤치마킹하는 방법을 다룰 예정입니다. 테스트 워크로드로는 몬테카를로 시뮬레이션을, 부하 생성 도구로는 Grafana k6를 사용하며, Amazon EC2 인스턴스 7종에 실제로 적용한 결과까지 함께 제시합니다.
EC2 인스턴스 타입 이해
인스턴스 시리즈 (C/M/R)는 워크로드 성격에 따라 C(Compute, CPU 집약), M(General Purpose, 범용), R(Memory, 메모리 집약)으로 나뉩니다. 본 블로그에서는 CPU 성능 비교가 목적이므로 C 패밀리를 사용합니다.
인스턴스 세대 숫자가 클수록 최신 세대이며, 가격 대비 성능이 개선되므로 특별한 이유가 없다면 최신 세대 사용을 권장합니다. 뒤에 붙는 large / xlarge / 2xlarge는 vCPU와 메모리 용량을 결정합니다(2xlarge = 8 vCPU).
프로세서 옵션 (g vs i): g는 AWS Graviton(ARM64), i는 Intel(x86_64)을 의미합니다. Graviton은 ARM64 기반의 AWS 가 자체 제작한 클라우드 워크로드에 최적화된 인스턴스로, 동급 x86 대비 최대 20% 저렴한 가격으로 제공되고 있습니다.
몬테카를로 시뮬레이션
몬테카를로 시뮬레이션은 난수(랜덤 넘버)를 생성하여 수백, 수천 번의 시나리오를 실행하고 그 결과를 분석해 확률적 분포를 파악하는 수학적/통계적 기법입니다. 이름은 모나코의 유명한 카지노 도시 몬테카를로에서 유래했으며, 주사위를 반복적으로 던져 확률을 추정하는 것과 비슷한 원리입니다.
본 블로그에서는 원의 넓이를 이용한 원주율(π) 추정 방식을 사용합니다. 1×1 정사각형 안에 무작위로 50만 개의 점을 찍고, 반지름 1인 원 안에 들어간 점의 비율로 π 값을 추정하는 방식입니다. 정사각형 넓이 대비 원 넓이의 비율이 π/4이므로, (원 안에 들어간 점 수 / 전체 점 수) × 4를 계산하면 π의 근사값을 얻을 수 있습니다.
대규모 난수를 생성하고 반복 계산으로 결과를 도출하는 것으로, 몬테카를로 시뮬레이션은 CPU의 순수 연산 능력을 측정하기에 이상적인 워크로드입니다.
병렬 처리 효율성: 각 샘플링 연산이 서로 독립적이어서 여러 CPU 코어에 작업을 분산하기 쉬워, 최신 멀티코어 CPU의 처리량을 테스트하기에 최적입니다.
부동 소수점 연산 집약적: 확률 분포 계산과 적분 과정에서 대량의 부동 소수점 연산이 발생하므로, CPU의 산술 논리 장치(ALU) 부하를 효과적으로 측정할 수 있습니다.
확장성: 샘플링 횟수만 조절하면 연산 강도를 자유롭게 설정할 수 있어, 가벼운 검증부터 극한 부하 테스트까지 폭넓게 활용할 수 있습니다.
테스트 아키텍처
성능 테