내 SC1 또는 ST1 EBS 볼륨이 정격 처리량 성능을 달성하지 못하는 이유는 무엇인가요?

2분 분량
0

내 ST1 또는 SC1 Amazon Elastic Block Store(Amazon EBS) 볼륨이 AWS 설명서에 나열된 처리량 성능에 도달하지 않습니다.

간략한 설명

SC1 및 ST1과 같은 HDD Amazon EBS 볼륨을 사용하는 경우 다음 사항을 검토합니다.

  • 이러한 볼륨은 인스턴스의 워크로드에서 사용되는 실제 I/O 크기에 관계없이 항상 1024KiB I/O 토큰을 사용합니다. 애플리케이션 워크로드의 실제 I/O 크기가 16KiB로 설정된 경우 볼륨은 여전히 I/O 토큰의 전체 1024KiB 크기를 사용합니다. 이렇게 하면 토큰 공간 대부분이 낭비됩니다. 효율성을 극대화하려면 전체 1024KiB를 채웁니다.
  • 순차 워크로드의 I/O 크기가 32KiB보다 큰 경우 Amazon EBS는 항상 I/O를 1024KiB의 단일 I/O 작업으로 병합합니다. 이 병합은 전체 토큰 크기를 채웁니다.
  • I/O 크기가 32KiB보다 작거나 워크로드가 무작위인 경우 Amazon EBS는 I/O를 1024KiB로 병합하지 않습니다. 그러나 Amazon EBS는 여전히 전체 1024KiB 토큰 크기를 사용합니다. 이렇게 하면 토큰 내부 공간의 대부분이 비어 있게 됩니다. I/O가 병합되지 않기 때문에 인스턴스는 동일한 양의 데이터를 볼륨에 전송하기 위해 더 많은 IOPS를 사용합니다. 이렇게 하면 처리량이 기준 값보다 적더라도 버스트 밸런스가 줄어듭니다.

해결 방법

ST1 및 SC1 EBS 볼륨이 최대 정격 처리량에 도달하도록 허용하려면 다음 단계를 따릅니다.

  • 32KiB보다 큰 I/O 크기를 사용하도록 애플리케이션을 설정합니다.
  • 애플리케이션이 순차적 워크로드를 사용하는지 확인합니다.

예시

처리량을 계산할 때 다음 공식을 사용합니다.

처리량 = I/O 크기 * IOPS

I/O 크기가 32KiB보다 작으면 볼륨이 IOPS 한도에 도달하고 처리량을 제한합니다. 이 경우 볼륨은 정격 처리량 성능을 달성하지 못합니다.

예를 들어 I/O 크기를 16KiB로 설정하고 3MiB/s의 데이터를 전송한다고 가정해 보겠습니다.

3MiB/s/16KiB = 192IOPS

순차/연속 워크로드에서 I/O 크기를 32KiB로 설정하면 Amazon EBS는 최대 1024KiB까지 병합합니다. 이 경우 Amazon은 다음 계산에 표시된 것처럼 IOPS를 3개만 전송합니다.

3MiB/s/1024KiB = 3IOPS

그러나 ST1 볼륨의 0.5TiB(500GiB)를 사용한다고 가정해 보겠습니다. 이 경우 볼륨은 20MiB/s의 기본 처리량 성능을 제공하는 것이 이상적이며 최대 125MiB/s까지 버스트할 수 있습니다.

볼륨이 125MiB/s로 버스트되고 애플리케이션 I/O 크기가 1024KiB인 경우 이론상 최대 IOPS는 125IOPS와 같습니다.

처리량 / I/O 크기 = 125MiB/s / 1024KiB = 125IOPS.

그러나 애플리케이션이 16KiB의 I/O 크기를 사용하는 경우 3MiB의 데이터를 전송하면 192IOPS가 사용됩니다. 볼륨은 이론상 최대 125IOPS만 달성하므로 애플리케이션은 192IOPS를 푸시할 수 없습니다. 이 경우 볼륨은 IOPS를 125로 제한합니다.

실제 처리량 = 16KiB * 125 = 1.95MiB/s

이전 계산에서 볼 수 있듯이 IOPS는 125IOPS로 제한되고 Amazon EBS는 처리량을 1.95MiB/s로 제한합니다. 애플리케이션이 1024KiB I/O 크기를 사용한 경우 볼륨에 대한 버스트 가능한 이론적 처리량이 125IOPS인 경우에도 이러한 제한이 발생합니다.

관련 정보

I/O 특성 및 모니터링

Amazon EBS 볼륨 유형

AWS 공식
AWS 공식업데이트됨 7달 전