동일한 Amazon VPC에 있는 Amazon EC2 Linux 인스턴스 간의 네트워크 처리량을 벤치마크하려면 어떻게 해야 하나요?

7분 분량
0

동일한 Amazon Virtual Private Cloud(Amazon VPC)에 있는 Amazon Elastic Compute Cloud(Amazon EC2) Linux 인스턴스 간의 네트워크 대역폭을 측정하고 싶습니다.

간략한 설명

인스턴스가 동일한 Amazon VPC에 있을 때 Amazon EC2 네트워크 성능에 영향을 미칠 수 있는 몇 가지 요인은 다음과 같습니다.

  • EC2 인스턴스의 물리적 근접성: 동일한 가용 영역의 인스턴스는 지리적으로 서로 가장 가깝습니다. 다음 시나리오에서는 인스턴스가 서로 점점 멀어집니다.
    동일한 AWS 리전의 서로 다른 가용 영역에 있는 인스턴스
    같은 대륙의 여러 리전에 있는 인스턴스
    다른 대륙의 여러 리전에 있는 인스턴스
  • EC2 인스턴스 최대 전송 단위(MTU) 네트워크 연결의 MTU는 연결이 전달할 수 있는 최대 허용 패킷 크기(바이트)입니다. 모든 EC2 인스턴스 유형은 1,500MTU를 지원합니다. 현재 세대의 모든 Amazon EC2 인스턴스는 점보 프레임을 지원합니다. 이전 세대 인스턴스인 C3, G2, I2, M3, R3도 점보 프레임을 사용합니다. 점보 프레임은 1,500MTU 이상을 허용합니다. 하지만 점보 프레임을 사용하더라도 인스턴스가 1,500MTU로 제한되는 시나리오가 있습니다. 자세한 내용은 점보 프레임(9001MTU)을 참조하세요.
  • EC2 인스턴스의 크기: 인스턴스 유형에서 큰 인스턴스 크기는 일반적으로 같은 유형이지만 크기가 더 작은 인스턴스보다 더 나은 네트워크 성능을 제공합니다. 자세한 내용은 Amazon EC2 인스턴스 유형을 참조하세요.
  • Amazon EC2의 Linux를 위한 향상된 네트워킹 지원: 향상된 네트워킹 지원은 T2 및 M3 인스턴스 유형 이외의 인스턴스 성능에 영향을 미칠 수 있습니다. 자세한 내용은 Linux에서 향상된 네트워킹을 참조하세요. 인스턴스에서 향상된 네트워킹을 사용하는 것에 대한 자세한 내용은 EC2 인스턴스에서 향상된 네트워킹을 켜고 구성하려면 어떻게 해야 하나요?를 참조하세요.
  • 배치 그룹을 사용하는 Amazon EC2 고성능 컴퓨팅(HPC) 지원: HPC는 완전한 이분 대역폭과 짧은 지연 시간을 제공합니다. HPC는 인스턴스 유형에 따라 최대 100기가비트의 네트워크 속도를 지원합니다. 각 인스턴스 유형의 네트워크 성능을 검토하려면 Amazon Linux AMI 인스턴스 유형 매트릭스를 참조하세요. 자세한 내용은 배치 그룹으로 인스턴스 시작을 참조하세요.
  • 인스턴스는 네트워크 I/O 크레딧 메커니즘을 사용하여 네트워크 대역폭을 할당합니다. 범용 인스턴스 - 네트워크 성능네트워크 성능 열에 기호로 지정된 인스턴스는 지정된 최대 네트워크 성능에 도달할 수 있습니다. 하지만 이러한 인스턴스는 네트워크 I/O 크레딧 메커니즘을 사용하여 평균 대역폭 사용률에 따라 인스턴스에 대역폭을 할당합니다. 따라서 네트워크 성능은 이러한 인스턴스마다 다릅니다.

이러한 요인으로 인해 서로 다른 클라우드 환경 간에 상당한 네트워크 성능 차이가 발생할 수 있습니다. 환경의 네트워크 성능을 정기적으로 평가하고 기준을 정하여 애플리케이션 성능을 개선하는 것이 가장 좋습니다. 네트워크 성능 테스트는 필요에 가장 적합한 EC2 인스턴스 유형, 크기 및 구성을 결정하는 데 유용한 인사이트를 제공합니다. 선택한 모든 인스턴스 조합에서 네트워크 성능 테스트를 진행할 수 있습니다.

자세한 내용은 AWS Support 사례를 열어 관심 있는 특정 인스턴스 유형에 대한 추가 네트워크 성능 사양을 요청하세요.

해결 방법

벤치마크 테스트를 시작하기 전에 EC2 Linux 인스턴스를 시작하고 구성하세요.

  1. 네트워크 성능 테스트를 진행할 수 있는 Linux 인스턴스 2개를 시작합니다.
  2. 인스턴스가 Linux를 위한 향상된 네트워킹을 지원하고 동일한 Amazon VPC에 있는지 확인하세요.
  3. (선택 사항) 점보 프레임을 지원하지 않는 인스턴스 간에 네트워크 테스트를 진행하는 경우, EC2 인스턴스의 네트워크 최대 전송 단위(MTU)의 단계에 따라 인스턴스의 MTU를 확인하고 설정합니다.
  4. 인스턴스에 연결하여 인스턴스에 액세스할 수 있는지 확인합니다.

두 인스턴스에 iperf 네트워크 벤치마크 도구 설치

Amazon Linux와 같은 일부 배포판에서 iperf는 Extra Packages for Enterprise Linux(EPEL) 리포지토리의 일부입니다. EPEL 리포지토리를 켜려면 CentOS, RHEL 또는 Amazon Linux를 실행하는 Amazon EC2 인스턴스에 대해 EPEL 리포지토리를 활성화하려면 어떻게 해야 하나요?를 참조하세요.

참고: iperf 명령은 버전 2.x를 참조합니다. iperf3 명령은 버전 3.x를 참조합니다. 버전 2.x는 멀티스레드 지원을 제공하므로 처리량이 높은 EC2 인스턴스를 벤치마크할 때는 버전 2.x를 사용하세요. 버전 3.x는 -P 플래그가 있는 병렬 스트림도 지원하지만 버전 3.x는 단일 스레드이며 단일 CPU로 제한됩니다. 따라서 대규모 EC2 인스턴스에서 필요한 처리량을 제공하기 위해 버전 3.x는 여러 프로세스를 병렬로 실행해야 합니다. 자세한 내용은 ESnet 웹사이트의 iperf2/iperf3을 참조하세요.

Linux 인스턴스에 연결하고 다음 명령을 실행하여 iperf를 설치합니다.

RHEL 6 Linux 호스트에 iperf를 설치하려면 다음 명령을 실행합니다.

# yum -y install  https://dl.fedoraproject.org/pub/archive/epel/6/x86_64/epel-release-6-8.noarch.rpm  && yum -y install iperf

RHEL 7 Linux 호스트에 iperf를 설치하려면 다음 명령을 실행합니다.

# yum -y install  https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm  && yum -y install iperf

Debian/Ubuntu 호스트에 iperf를 설치하려면 다음 명령을 실행합니다.

# apt-get install -y iperf

CentOS 6/7 호스트에 iperf를 설치하려면 다음 명령을 실행합니다.

# yum -y install epel-release && yum -y install iperf

Amazon Linux 2023

Amazon Linux 2023(AL2023)은 EPEL을 지원하지 않기 때문에 EPEL 리포지토리를 통해 iperf 유틸리티를 다운로드할 수 없습니다. 자세한 내용은 Extra Packages for Enterprise Linux(EPEL)를 참조하세요.

하지만 AL2023을 위해 iperf를 수동으로 다운로드하여 설치할 수 있습니다.

  1. 개발 도구 및 git 설치:

    sudo yum groupinstall "Development Tools"sudo yum install git
  2. iperf 코드 복제:

    cd /usr/local/sudo git clone https://git.code.sf.net/p/iperf2/code iperf2-code
  3. 패키지 빌드 및 설치:

    cd /usr/local/iperf2-codesudo ./configure
    sudo make
    sudo make install

인스턴스 간 TCP 네트워크 성능 테스트

기본적으로 iperf는 TCP 성능을 테스트할 때 포트 5001을 통해 통신합니다. 하지만 -p 스위치로 해당 포트를 구성할 수 있습니다. iperf가 사용하는 포트를 통한 통신을 허용하도록 보안 그룹을 구성해야 합니다.

  1. 하나의 인스턴스를 기본 포트에서 수신 대기하는 서버로 구성하거나 -p 스위치를 사용하여 대체 리스너 포트를 지정합니다. 5001을 사용자의 포트로 대체합니다(다른 경우).

    $ sudo iperf -s \[-p 5001\]
  2. 두 번째 인스턴스를 클라이언트로 구성하고 원하는 파라미터를 사용하여 서버를 대상으로 테스트를 실행합니다. 예를 들어, 다음 명령은 40개의 병렬 연결이 포함된 지정된 서버 인스턴스를 대상으로 TCP 테스트를 시작합니다.

    $ iperf -c 172.31.30.41 --parallel 40 -i 1 -t 2

    참고: iperf(버전 2)를 사용한 양방향 테스트의 경우, 클라이언트 측에서 -r 옵션을 사용하세요.

출력은 이러한 파라미터를 사용하여 클라이언트 스트림당 간격, 클라이언트 스트림당 전송된 데이터, 각 클라이언트 스트림이 사용하는 대역폭을 나타냅니다. 다음 iperf 출력은 클러스터 배치 그룹에서 시작하는 c5n.18xlarge EC2 Linux 인스턴스 2개에 대한 테스트 결과를 보여줍니다. 모든 연결에서 전송되는 총 대역폭은 97.6Gbit/s입니다.

------------------------------------------------------------------------------------
Client connecting to 172.31.30.41, TCP port 5001
TCP window size:  975 KByte (default)
------------------------------------------------------------------------------------
[  8] local 172.31.20.27 port 49498 connected with 172.31.30.41 port 5001
[ 38] local 172.31.20.27 port 49560 connected with 172.31.30.41 port 5001
[ 33] local 172.31.20.27 port 49548 connected with 172.31.30.41 port 5001
[ 40] local 172.31.20.27 port 49558 connected with 172.31.30.41 port 5001
[ 36] local 172.31.20.27 port 49554 connected with 172.31.30.41 port 5001
[ 39] local 172.31.20.27 port 49562 connected with 172.31.30.41 port 5001
...
[SUM]  0.0- 2.0 sec  22.8 GBytes  97.6 Gbits/sec

인스턴스 간 UDP 네트워크 성능 테스트

기본적으로 iperf는 UDP 성능을 테스트할 때 포트 5001을 통해 통신합니다. 하지만 -p 스위치를 사용하여 포트를 구성할 수 있습니다. iperf가 사용하는 포트를 통한 통신을 허용하도록 보안 그룹을 구성해야 합니다.

참고: 다른 대역폭을 지정하지 않는 한 UDP의 기본값은 1Mbit/s입니다.

  1. 하나의 인스턴스를 기본 UDP 포트에서 수신 대기하는 서버로 구성하거나 -p 스위치를 사용하여 대체 리스너 포트를 지정합니다. 5001을 사용자의 포트로 대체합니다(다른 경우).

    $ sudo iperf -s -u \[-p 5001\]
  2. 두 번째 인스턴스를 클라이언트로 구성한 다음 원하는 파라미터를 사용하여 서버를 대상으로 테스트를 실행합니다. 다음 예에서는 -b 파라미터를 5g로 설정하여 지정된 서버 인스턴스를 대상으로 UDP 테스트를 시작합니다. -b 파라미터는 대역폭을 UDP 기본값인 1Mbit/s에서 5g로 변경합니다. 5g는 c5n18xlarge 인스턴스가 VPC 내 단일 트래픽 흐름에 제공할 수 있는 최대 네트워크 성능입니다.
    참고: UDP는 연결이 필요 없으며 TCP에 포함된 혼잡 제어 알고리즘이 없습니다. iperf로 테스트할 때 UDP로 얻은 대역폭이 TCIP로 얻은 대역폭보다 낮을 수 있습니다.

    \# iperf -c 172.31.1.152 -u -b 5g

다음은 UDP 테스트의 출력 예입니다.

$ iperf -c 172.31.30.41 -u -b 5g
------------------------------------------------------------------------------------
Client connecting to 172.31.30.41, UDP port 5001
Sending 1470 byte datagrams, IPG target: 2.35 us (kalman adjust)
UDP buffer size:  208 KByte (default)
------------------------------------------------------------------------------------
[  3] local 172.31.20.27 port 39022 connected with 172.31.30.41 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3] 0.0-10.0 sec  5.82 GBytes  5.00 Gbits/sec
[  3] Sent 4251700 datagrams
[  3] Server Report:
[  3] 0.0-10.0 sec  5.82 GBytes  5.00 Gbits/sec   0.003 ms 1911/4251700 (0.045%)
[  3] 0.00-10.00 sec  1 datagrams received out-of-order

이 출력에는 다음 값이 표시됩니다.

  • 간격(시간)
  • 전송된 데이터 양
  • 달성한 대역폭
  • 지터(데이터그램의 주기적 도달 시간 편차)
  • UDP 데이터그램 손실 및 합계

관련 정보

ESnet 웹사이트에서 iperf3을 사용한 디스크 테스트

ESNet 웹사이트의 네트워크 튜닝

ESNet 웹사이트의 처리량 도구 비교

SourceForge 웹사이트의 iperf2

AWS 공식
AWS 공식업데이트됨 2년 전