메뉴
Amazon Elastic Compute Cloud
User Guide for Linux Instances

EBS 볼륨 벤치마크

이 섹션에서는 I/O 워크로드를 시뮬레이트하여 Amazon EBS 볼륨의 성능을 테스트하는 방법을 보여줍니다. 프로세스는 다음과 같습니다.

  1. EBS에 최적화된 인스턴스 시작.

  2. 새 EBS 볼륨을 생성합니다.

  3. EBS에 최적화된 인스턴스에 볼륨 추가.

  4. 블록 디바이스를 구성하고 마운트합니다.

  5. I/O 성능 벤치마크를 위한 도구 설치.

  6. 볼륨의 I/O 성능 벤치마크.

  7. 요금이 계속 발생하지 않도록 볼륨 삭제 및 인스턴스 종료.

중요

이 항목에 설명되어 있는 일부 절차를 수행할 경우 자신이 벤치마크하는 EBS 볼륨에 있는 기존 데이터가 소멸되는 결과를 낳게 됩니다. 벤치마킹 절차는 프로덕션 볼륨이 아니라 테스트 목적으로 특별히 생성된 볼륨에 적용하기 위한 것입니다.

인스턴스 설정

EBS 볼륨에서 최적의 성능을 얻으려면 EBS에 최적화된 인스턴스를 사용하는 것이 좋습니다. EBS에 최적화된 인스턴스는 인스턴스와 함께 Amazon EC2와 Amazon EBS 사이의 전용 처리량을 제공합니다. EBS에 최적화된 인스턴스는 Amazon EC2와 Amazon EBS 간에 전용 대역폭을 제공하며, 인스턴스 유형에 따라 500~12,000Mbps 범위에서 선택할 수 있습니다.

EBS에 최적화된 인스턴스를 생성하려면 Amazon EC2 콘솔을 사용하여 인스턴스를 시작할 때 [Launch as an EBS-Optimized instance]를 선택하거나 명령줄을 사용할 때 --ebs-optimized를 지정합니다. 이 옵션을 지원하는 현재 세대 인스턴스를 시작해야 합니다. 이 주제에 있는 예제 테스트의 경우 c3.4xlarge 인스턴스를 시작하는 것이 좋습니다. 자세한 내용은 Amazon EBS 최적화 인스턴스 단원을 참조하십시오.

프로비저닝된 IOPS SSD(io1) 볼륨 설정

io1 볼륨을 생성하려면, Amazon EC2 콘솔을 사용하여 볼륨 생성 시 [프로비저닝된 IOPS SSD]를 선택하거나 명령줄에서 --type io1 --iops n을 지정합니다. 여기서 n은 100~20,000 범위의 정수입니다. EBS 볼륨 생성에 대한 자세한 내용은 Amazon EBS 볼륨 생성 단원을 참조하십시오. 인스턴스에 이러한 볼륨 연결에 대한 자세한 내용은 Amazon EBS 볼륨을 인스턴스에 연결 단원을 참조하십시오.

예제 테스트의 경우 6개의 볼륨이 있는 RAID 어레이를 생성하는 것이 좋습니다. 이 어레이는 높은 수준의 성능을 제공합니다. 볼륨 수가 아닌 프로비저닝된 기가바이트와 io1 볼륨에 대해 프로비저닝된 IOPS 수를 기준으로 요금이 부과되므로, 여러 개의 작은 볼륨을 생성하고 볼륨을 사용하여 스트라이프 세트를 생성하는 데 드는 추가 비용은 없습니다. Oracle Orion을 사용하여 볼륨을 벤치마크하는 경우 Oracle ASM과 동일한 방법으로 스트라이프를 시뮬레이트할 수 있으므로 Orion을 사용하여 스트라이프를 수행하는 것이 좋습니다. 다른 벤치마크 도구를 사용하는 경우 볼륨을 직접 스트라이프해야 합니다.

Amazon Linux에서 6개 볼륨 스트라이프 세트를 생성하려면 다음과 같은 명령을 사용합니다.

Copy
[ec2-user ~]$ sudo mdadm --create /dev/md0 --level=0 --chunk=64 --raid-devices=6 /dev/sdf /dev/sdg /dev/sdh /dev/sdi /dev/sdj /dev/sdk

이 예제의 경우 파일 시스템은 XFS입니다. 각자 요구 사항에 맞는 파일 시스템을 사용합니다. 다음 명령을 사용하여 XFS 파일 시스템 지원을 설치합니다.

Copy
[ec2-user ~]$ sudo yum install -y xfsprogs

그 다음에는 이 명령들을 사용하여 다음과 같이 XFS 파일 시스템을 생성 및 마운트하고 그 시스템에 대한 소유권을 할당합니다.

Copy
[ec2-user ~]$ sudo mkdir -p /mnt/p_iops_vol0 && sudo mkfs.xfs /dev/md0 [ec2-user ~]$ sudo mount -t xfs /dev/md0 /mnt/p_iops_vol0 [ec2-user ~]$ sudo chown ec2-user:ec2-user /mnt/p_iops_vol0/

처리량에 최적화된 HDD(st1) 또는 Cold HDD(sc1) 볼륨 설정

st1 볼륨을 생성하려면 Amazon EC2 콘솔을 사용하여 볼륨을 생성할 때 [처리량에 최적화된 HDD]을 선택하거나 명령줄을 사용할 때 --type st1을 지정합니다. sc1 볼륨을 생성하려면 Amazon EC2 콘솔을 사용하여 볼륨을 생성할 때 Cold HDD를 선택하거나 명령줄을 사용할 때 --type sc1을 지정합니다. EBS 볼륨 생성에 대한 자세한 내용은 Amazon EBS 볼륨 생성 단원을 참조하십시오. 인스턴스에 이러한 볼륨 연결에 대한 자세한 내용은 Amazon EBS 볼륨을 인스턴스에 연결 단원을 참조하십시오.

AWS는 AWS CloudFormation에 사용할 JSON 템플릿을 제공하여 이 설정 절차를 간소화합니다. template에 액세스하고 이를 JSON 파일로 저장합니다. AWS CloudFormation에서는 사용자의 고유 SSH 키를 구성하고, 손쉽게 성능 테스트 환경을 설정하여 st1 볼륨을 평가할 수 있습니다. 템플릿은 현재 세대 인스턴스와 2TiB st1 볼륨을 생성하고, /dev/xvdf에서 볼륨을 인스턴스에 연결합니다.

템플릿을 사용하여 HDD 볼륨을 생성하려면

  1. https://console.aws.amazon.com/cloudformation에서 AWS CloudFormation 콘솔을 엽니다.

  2. [Create Stack]을 선택합니다.

  3. [Upload a Template to Amazon S3]를 선택하고 이전에 얻은 JSON 템플릿을 선택합니다.

  4. 스택에 "ebs-perf-testing" 같은 이름을 붙이고 인스턴스 유형(기본은 r3.8xlarge)과 SSH 키를 선택합니다.

  5. [Next]를 두 번 선택한 다음, [Create Stack]을 선택합니다.

  6. 새로운 스택의 상태가 [CREATE_IN_PROGRESS]에서 [COMPLETE]로 바뀐 후에 [Outputs]를 선택하여 새 인스턴스의 퍼블릭 DNS 항목을 얻습니다. 그러면 2TiB st1 볼륨이 연결됩니다.

  7. 이전 단계의 DNS 항목에서 얻은 호스트 이름을 통해 SSH를 사용하여 ec2-user라는 사용자로 새로운 스택에 연결합니다.

  8. 벤치마크 도구 설치 항목으로 이동합니다.

벤치마크 도구 설치

다음 표에는 EBS 볼륨의 성능을 벤치마크하기 위해 사용할 수 있는 도구 중 일부가 나열되어 있습니다.

도구 설명

fio

I/O 성능을 벤치마크합니다. fiolibaio-devel에 대해 종속성이 있습니다.

Amazon Linux에 fio를 설치하려면 다음 명령을 실행합니다.

Copy
[ec2-user ~]$ sudo yum install -y fio

Ubuntu에 fio를 설치하려면 다음 명령을 실행합니다.

Copy
sudo apt-get install -y fio

Oracle Orion 보정 도구

Oracle 데이터베이스와 함께 사용할 스토리지 시스템의 I/O 성능을 보정합니다.

이러한 벤치마크 도구는 다양한 테스트 파라미터를 지원합니다. 볼륨이 지원하는 작업에 근접하는 명령을 사용해야 합니다. 아래 제공된 명령은 사용자가 시작하는 데 도움이 되는 예시용입니다.

볼륨 대기열 길이 선택

워크로드와 볼륨 유형에 따라 최적의 볼륨 대기열 길이를 선택합니다

SSD 지원 볼륨에서 대기열 길이

SSD 지원 볼륨의 워크로드에 대한 최적의 대기열 길이를 확인하려면 사용 가능한 모든 500 IOPS에 대해 대기열 길이를 1로 지정하는 것이 좋습니다(gp2 볼륨의 경우 기준 및 io1 볼륨의 경우 프로비저닝된 양). 그러면 애플리케이션 성능을 모니터링하고 애플리케이션 요구 사항을 기준으로 해당 값을 조정할 수 있습니다.

대기열 길이를 길게 하면 프로비저닝된 IOPS, 처리량 또는 최적 시스템 대기열 길이 값(현재 32로 설정)을 얻을 때까지 유용합니다. 예를 들어 프로비저닝된 IOPS가 1,000인 볼륨은 대기열 길이 2를 목표로 해야 합니다. 이 값을 높이거나 낮추면서 튜닝을 시도하여 애플리케이션에 가장 적합한 설정을 찾아야 합니다.

HDD 지원 볼륨에서 대기열 길이

HDD 지원 볼륨에서 워크로드에 가장 적합한 대기열 길이를 알아내려면 1MiB 순차 I/O를 수행하는 동시에 최소 4 이상의 대기열 길이를 목표로 하는 것이 좋습니다. 그러면 애플리케이션 성능을 모니터링하고 애플리케이션 요구 사항을 기준으로 해당 값을 조정할 수 있습니다. 예를 들어 버스트 처리량은 500MiB/s, IOPS는 500인 2TiB st1 볼륨의 경우 1,024KiB, 512KiB 또는 256KiB 순차 I/O를 수행하는 동시에 각각 4, 8 또는 16 대기열 길이를 목표로 해야 합니다. 이 값을 높이거나 낮추면서 튜닝을 시도하여 애플리케이션에 가장 적합한 설정을 찾아야 합니다.

벤치마킹 수행

다음 절차에서는 다양한 EBS 볼륨 유형에 대한 벤치마킹 명령을 설명합니다.

연결된 EBS 볼륨이 있는 EBS에 최적화된 인스턴스에서 다음 명령을 실행합니다. 스냅샷에서 EBS 볼륨을 복원한 경우, 반드시 벤치마킹 전에 초기화합니다. 자세한 내용은 Amazon EBS 볼륨 초기화 단원을 참조하십시오.

볼륨 테스트를 마치면 정리에 도움이 되는 Amazon EBS 볼륨 삭제인스턴스 종료 주제를 참조하십시오.

io1 볼륨 벤치마킹

생성한 스트라이프 세트에서 fio를 실행합니다.

다음 명령은 16KB 임의 쓰기 작업을 수행합니다.

Copy
[ec2-user ~]$ sudo fio --directory=/mnt/p_iops_vol0 \ --name fio_test_file --direct=1 --rw=randwrite --bs=16k --size=1G \ --numjobs=16 --time_based --runtime=180 --group_reporting --norandommap

다음 명령은 16KB 임의 읽기 작업을 수행합니다.

Copy
[ec2-user ~]$ sudo fio --directory=/mnt/p_iops_vol0 \ --name fio_test_file --direct=1 --rw=randread --bs=16k --size=1G \ --numjobs=16 --time_based --runtime=180 --group_reporting --norandommap

결과를 해석하는 방법에 대한 자세한 내용은 Inspecting disk IO performance with fio 자습서를 참조하십시오.

st1sc1 볼륨 벤치마킹

st1 또는 sc1 볼륨에서 fio를 실행합니다.

참고

이러한 테스트를 실행하기 전, st1sc1에서 처리량이 높은 읽기 중심 워크로드의 미리 읽기 향상에 설명된 대로 인스턴스에 버퍼 I/O를 설정합니다.

다음 명령은 연결된 st1 블록 디바이스(예: /dev/xvdf)에 대해 1MiB 순차 읽기 작업을 수행합니다.

Copy
[ec2-user ~]$ sudo fio --filename=/dev/<device> --direct=1 --rw=read --randrepeat=0 --ioengine=libaio --bs=1024k --iodepth=8 --time_based=1 --runtime=180 --name=fio_direct_read_test

다음 명령은 연결된 st1 블록 디바이스에 대해 1MiB 순차 쓰기 작업을 수행합니다.

Copy
[ec2-user ~]$ sudo fio --filename=/dev/<device> --direct=1 --rw=write --randrepeat=0 --ioengine=libaio --bs=1024k --iodepth=8 --time_based=1 --runtime=180 --name=fio_direct_write_test

일부 워크로드는 블록 디바이스의 다양한 부분에 순차 읽기와 순차 쓰기를 혼합하여 수행합니다. 이러한 워크로드를 벤치마크하려면 읽기와 쓰기에 별도의 fio 작업을 동시에 사용하고, 각 작업에 대해 서로 다른 블록 디바이스 위치를 목표로 하기 위해 fio offset_increment 옵션을 사용하는 것이 좋습니다.

이 워크로드 실행은 순차 쓰기나 순차 읽기 워크로드보다 다소 복잡합니다. 텍스트 편집기를 사용하여 다음을 포함한 fio 작업 파일(이 예에서는 fio_rw_mix.cfg)을 만듭니다.

Copy
[global] clocksource=clock_gettime randrepeat=0 runtime=180 offset_increment=100g [sequential-write] bs=1M ioengine=libaio direct=1 iodepth=8 filename=/dev/<device> do_verify=0 rw=write rwmixread=0 rwmixwrite=100 [sequential-read] bs=1M ioengine=libaio direct=1 iodepth=8 filename=/dev/<device> do_verify=0 rw=read rwmixread=100 rwmixwrite=0

그런 다음, 다음 명령을 실행합니다.

Copy
[ec2-user ~]$ sudo fio fio_rw_mix.cfg

결과를 해석하는 방법에 대한 자세한 내용은 Inspecting disk I/O performance with fio 자습서를 참조하십시오.

순차 읽기나 쓰기 작업을 사용하는 경우라 하더라도 직접 I/O에 대한 다수의 fio 작업은 st1sc1 볼륨에 기대했던 처리량보다 낮은 수준을 나타낼 수 있습니다. 하나의 직접 I/O 작업을 사용하고 iodepth 파라미터를 사용해 동시 I/O 작업의 개수를 제어하는 것이 좋습니다.