EC2 Nitro 기반 인스턴스에 호스팅된 EBS 볼륨에서 최대 I/O 성능을 얻으려면 어떻게 해야 하나요?

3분 분량
0

Amazon Elastic Compute Cloud(Amazon EC2) Nitro 기반 인스턴스에서 워크로드를 실행하고 있습니다. 인스턴스에서 호스팅되는 Amazon Elastic Block Store(Amazon EBS) 볼륨에서 최대 I/O 성능을 얻고자 합니다.

해결 방법

1.     EBS 볼륨이 IOPS 할당량에 도달했는지 확인하세요. 볼륨이 IOPS 할당량에 도달하면 지연 시간이 증가할 수 있으며, 지연 시간이 증가하면 성능에 영향을 미칠 수 있습니다. 자세한 내용을 보려면 Amazon EBS 프로비저닝된 IOPS 볼륨의 성능을 최적화하려면 어떻게 해야 하나요?를 참조하세요.
참고: GP2 볼륨을 사용하는 경우 해당 볼륨이 버스트 크레딧을 소진하지 않았는지 확인합니다.

2.    NVMe 스토리지를 사용하려면 이러한 운영 체제(OS) 중 하나를 실행해야 합니다.

  • Amazon Linux Amazon Machine Image(AMI) 이상 및 커널 4.12 이상
  • CentOS - 7.0 이상 및 커널 3.10 이상
  • Red Hat - 7.0 이상 및 커널 3.10 이상
  • 커널 5.0이 포함된 Ubuntu 19.10 또는 커널 5.0 이상이 포함된 Ubuntu 18.04.03
    **참고:**이러한 Ubuntu 버전에서는 기본적으로 다중 대기열이 켜져 있습니다.
  • Ubuntu - 16.04 또는 16.10
    참고: 이러한 Ubuntu 버전의 경우 다중 대기열 스케줄러가 커널 컴파일되지 않으며 별도의 모듈 로딩이 필요합니다.
  • SUSE 12 또는 SUSE 11(SP3 이상 포함)
  • Windows Server 2008 R2, 2012 R2 및 2016 이상

또는 커널 버전이 다중 대기열 기능이 있는 I/O 스케줄러를 지원하는지 확인하세요. 가장 일반적인 다중 대기열 I/O 스케줄러는 kyber, mq-deadline 및 BFQ(Budget Fair Queueing)입니다.

**참고:**Oracle, Linux 또는 Debian과 같은 OS의 경우 다중 대기열 I/O 스케줄러를 포함하거나 지원하는 커널 버전을 사용하세요. CentOS 및 해당 커널 버전은 다중 대기열 I/O 스케줄러를 지원합니다.

이전 버전의 OS를 사용하는 경우 Nitro 기반 인스턴스가 호스트 수준에서 다중 대기열 처리를 수행하므로 I/O 성능이 저하될 수 있습니다. 이로 인해 OS 및 호스트 수준에서 스케줄러 간에 비호환성이 발생합니다.

EBS 볼륨에 제출된 I/O 읽기 또는 쓰기 요청을 볼륨이 가로채기 전에 요청은 여러 계층을 거칩니다. Nitro 기반 인스턴스에서 다중 대기열 스케줄러가 아닌 이전 커널 버전의 경우, I/O 스케줄러(I2D) 계층에서 지연이 발생하는 경우가 있습니다. 이 지연은 blktrace, blkparsebtt 도구를 사용하는 테스트 및 벤치 마크 결과에서 발생합니다. 이러한 도구에 대한 자세한 내용을 보려면 die.net 웹사이트에서 blktrace, blkparsebtt를 참조하세요.

Nitro 기반 인스턴스의 I/O 성능을 개선하기 위해 CentOS 7에는 디바이스 드라이버가 I/O 요청을 여러 하드웨어 또는 소프트웨어 대기열에 매핑할 수 있는 다중 대기열 블록 I/O 대기열 메커니즘(blk-mq)이 있습니다. Nitro 기반 시스템에서 성능을 극대화하려면 최신 커널이 설치된 최신 OS를 사용하는 것이 좋습니다.

CentOS 6의 I/O 스케줄러

$cat /sys/block/xvdf/queue/scheduler noop anticipatory deadline \[cfq\]$cat config-2.6.32-754.30.2.el6.x86\_64 | grep -i blk\_mq

참고: CentOS 6 커널의 구성 파일의 경우, noop 스케줄러를 사용하기 때문에 blk_mq를 반환하지 않습니다.

Redhat 9 및 커널 5.14 이상의 I/O 스케줄러

cat /sys/block/<EBS device name>/queue/scheduler \[none\] mq-deadline kyber bfq

스케줄러를 선택하기 전에 각 스케줄러의 세부 정보를 검토하세요. 자세한 내용을 보려면 Red Hat 웹 사이트에서 사용 가능한 디스크 스케줄러를 참조하세요.

EC2 인스턴스의 실행 시간 동안 OS 수준에서 스케줄러를 업데이트하려면 다음 명령을 실행합니다.

#sudo echo 'kyber'> /sys/block/<EBS device name>/queue/scheduler

I/O 스케줄러를 영구적으로 변경하려면 grub 구성을 수정하고 elevator 매개변수를 업데이트하세요. 다음 단계는 CentOS 및 Red Hat Enterprise Linux(RHEL)에 해당하는 내용입니다.

1.    다음 명령을 실행합니다.

#sudo vim /etc/default/grubGRUB\_CMDLINE\_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet elevator=kyber"

2.    다음 명령을 실행합니다.

#sudo grub2-mkconfig -o /boot/grub2/grub.cfg

인스턴스가 재부팅되더라도 I/O 스케줄러는 설정된 상태로 유지됩니다.

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