I got IT

AWS EBS 성능테스트 본문

AWS

AWS EBS 성능테스트

joshhoxy 2023. 8. 14. 16:49

AWS EBS 볼륨의 성능테스트는 리눅스의 dd 및 hdparm 명령어를 통해 간단하게 테스트 가능합니다.

 

dd 명령어

dd는 "데이터 덮어쓰기"를 의미하는 '디스크 덤프' 명령어로 사용되며, 데이터를 블록 단위로 복사하거나 변환하는데 사용됩니다. 다음은 dd 명령어의 주요 옵션과 사용 예제입니다:


주요 옵션:
- if: 입력 파일 (input file)의 경로를 지정합니다.
- of: 출력 파일 (output file)의 경로를 지정합니다.
- bs: 블록 크기 (block size)를 설정합니다.
- count: 블록 수를 설정하여 복사할 데이터 양을 제어합니다.

 

 

쓰기 성능 테스트

dd if=/dev/zero bs=1024 count=100 of=/data1/test_file oflag=direct

 

해당 명령어는 다음과 같은 뜻을 가집니다.

 

▪️ if=/dev/zero: 입력 소스로 /dev/zero 디바이스를 지정합니다.
   * /dev/zero는 무한한 0 바이트 데이터를 생성하는 가상 디바이스입니다.
▪️ bs=1024: 블록 크기를 1024 바이트로 설정합니다. dd가 한 번의 입출력 작업에서 읽거나 쓰는 데이터의 크기입니다.
▪️ count=100: 블록을 몇 번 복사할 것인지를 나타냅니다. 여기서는 100번 복사하므로 총 100KB의 데이터가 생성됩니다.
▪️ of=/data/test_file: 출력 파일의 경로를 /data/test_file로 지정합니다. 새로운 파일이 생성됩니다.
▪️ oflag=direct: 출력 작업을 디렉트 I/O 모드로 수행합니다. 이 모드는 파일 시스템 캐시를 우회하고 직접 디스크에 입출력을 수행하는 것을 의미합니다.
결과적으로, 위 명령어는 /dev/zero로부터 100KB 크기의 무한한 0 바이트 데이터를 읽어와 /data/test_file에 저장합니다. 이 과정에서 파일 시스템 캐시를 사용하지 않고 바로 디스크에 데이터를 기록합니다(oflag=direct). 이렇게 생성된 파일은 전부 0으로 채워진 파일입니다.

 

읽기 성능 테스트

읽기 성능 테스트는 반대로 if 에 기존 파일을 지정하고 of 에 /dev/null을 지정하여 읽기 연산을 수행하도록 합니다.

dd if=/data/test_file of=/dev/null bs=1024

해당 명령어는 dd 명령어를 사용하여 /data/test_file 파일의 내용을 읽어와 /dev/null로 출력하는 작업을 수행합니다. 여기서 /dev/null은 모든 데이터가 소멸되는 가상의 디바이스 파일입니다. 이를 통해 파일 내용을 표시하지 않고 데이터를 버릴 수 있습니다.

 ▪️ if=/data/test_file: test_file 파일의 내용을 읽어옵니다.

 ▪️ of=/dev/null: /dev/null은 휴지통처럼 동작하여 데이터를 버리는 가상의 디바이스입니다. 파일 내용은 출력되지 않습니다.
▪️ bs=1024: bs는 블록 크기(block size)를 나타냅니다. 여기서는 1024바이트(1KB) 블록 크기를 사용하여 데이터를 읽어옵니다.

따라서, 위 명령어는 /data/test_file의 데이터를 1KB 블록 단위로 읽어와서 출력하지 않고(/dev/null로 보냄) 버리는 작업을 수행합니다. 주로 데이터 읽기 성능을 테스트할 때 of 를 /dev/null로 지정합니다.

 

 

hdparm

hdparm은 리눅스와 유닉스 기반 시스템에서 하드 디스크의 설정과 성능을 변경하고 테스트하는 데 사용되는 명령어입니다. 주로 t와 T 옵션을 붙여 디스크의 캐시 성능을 테스트할 때 자주 사용됩니다.

hdparm -Tt /dev/xvdb

▪️ -T: 디스크에 대한 캐시 읽기 속도를 의미합니다.

▪️ -t: 디스크에 대한 일반 읽기 속도를 의미합니다.

캐시를 이용한 읽기속도가 훨씬 빠른 것을 확인할 수 있습니다.

 

EBS 성능테스트

AWS에서의 EBS 성능을 테스트 하는 것은 온프레미스(IDC)에서의 성능을 테스트 하는 것과는 달리 몇가지 유의할 점이 있습니다.

일반적인 개인 사용자 혹은 온프레미스 환경과 다르게 EBS는 실질적으로 EC2와 1대1로 직렬연결된 스토리지 유형이 아니기 때문입니다. 

 

블록사이즈 지정

위와 같이 bs 블록사이즈를 1KB로 지정한 것과 16KB로 지정한 것의 성능이 대폭 차이나는 것을 확인할 수 있습니다.

보통 bs=1024를 지정하여 테스트한 사례가 많아서 해당크기의 블록사이즈를 지정하면 기대한 것 보다 훨씬 떨어지는 성능을 보고 의아할 수 있습니다. AWS EBS의 경우 EC2가 하이퍼바이저 SW 디바이스 인터페이스를 거치기 때문에 입출력 스트림 뎁스를 크게 사용해야 온프레미스의 물리장비와 정확한 비교가 됩니다

또한 AWS EBS 공식 사양표에 기재된 스펙은 16KB 의 블록사이즈를 기준으로 측정한 것이므로 EBS 디스크 성능테스트를 할 때 기본 bs=16K 을 권고하고 혹은 그 이상을 사용해야 원활한 성능테스트가 가능합니다.

 

EBS 볼륨 타입

EBS는 기본적으로 네트워크를 통해 EC2 간 연결되고, EBS는 AWS의 거대한 스토리지를 사용자가 논리적으로 쪼개서 쓰는 가상 볼륨이다 보니 PC와 직렬로 연결한 스토리지처럼 정확한 성능을 표현할 수 없는 한계가 있습니다. 

따라서 이에 dedicated한 옵션인 Provisioned IOPS 타입의 io1 io2 등의 유형과 범용의 gp2, gp3 등의 볼륨 타입이 나뉘는 것입니다. 범용타입인 gp 볼륨의 경우 기재된 스펙이 애초에 최대 ~~ 라는 식으로 구간으로 지정되어 있습니다. 

볼륨 유형 gp3 gp2
볼륨 크기 1GiB - 16TiB 1GiB - 16TiB
기본/기준 IOPS 3000 GiB당 3 IOPS (최소 100 IOPS) 에서 최대 16,000 IOPS까지 지원합니다. 1TiB보다 작은 볼륨도 최대 3,000IOPS까지 버스트할 수 있습니다.
최대 IOPS/볼륨 16,000 16,000
최대 처리량/볼륨 1,000MiB/s 250MiB/s
가격 월 3,000IOPS는 무료 0.08 달러/GB, 프로비저닝된 IOPS는 월 3,000달러 이상, 프로비저닝된 IOPS는 0.005달러/초, 125MiB/s 이상은 무료, 프로비저닝된 MIB/월 0.04달러는 125MiB/s를 초과하면 월 0.04달러/초 월 0.10 달러/기가바이트

 

아래의 경우 gp3 타입 볼륨이며 Throughput이 순간적으로 800M 와 1G로 변동되는 것을 확인할 수 있습니다.