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

최종 업데이트 날짜: 2020년 6월 24일

동일한 Amazon VPC(Amazon Virtual Private Cloud)에서 Amazon EC2(Amazon Elastic Compute Cloud) Linux 인스턴스 간의 네트워크 대역폭을 측정하고자 합니다. 어떻게 해야 합니까?

간략한 설명

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

  • EC2 인스턴스의 물리적 근접성. 동일한 가용 영역에 있는 인스턴스는 서로 지리적으로 가장 가까운 반면, 동일한 리전의 다른 가용 영역에 있는 인스턴스, 동일한 대륙의 다른 리전에 있는 인스턴스, 다른 대륙의 다른 리전에 있는 인스턴스는 나열된 순서대로 서로 더 멀리 떨어져 있습니다.
  • EC2 인스턴스 MTU(최대 전송 단위). 네트워크 연결의 MTU는 연결을 통해 전달할 수 있는 최대 허용 패킷 크기(바이트)입니다. 모든 EC2 인스턴스 유형은 1,500 MTU를 지원합니다. 모든 최신 세대 Amazon EC2 인스턴스는 점보 프레임을 지원합니다. 또한 이전 세대 인스턴스인 C3, G2, I2, M3 및 R3에서도 점보 프레임을 사용합니다. 점보 프레임은 1,500 MTU를 초과할 수 있습니다. 하지만 점보 프레임을 사용하는 경우에도 인스턴스가 1,500 MTU로 제한되는 시나리오가 있습니다. 자세한 내용은 점보 프레임(9001 MTU)을 참조하십시오.
  • EC2 인스턴스의 크기. 특정 인스턴스 유형의 인스턴스 크기가 더 크면 일반적으로 유형이 동일하고 인스턴스 크기가 더 작을 때보다 더 좋은 네트워크 성능을 제공합니다. 자세한 내용은 Amazon EC2 인스턴스 유형을 참조하십시오.
  • Linux에 대한 Amazon EC2 확장 네트워킹 지원(T2 및 M3 인스턴스 유형 제외). 자세한 내용은 Linux에서의 향상된 네트워킹을 참조하십시오. 인스턴스에서 향상된 네트워킹을 활성화하는 방법에 대한 자세한 내용은 EC2 인스턴스에서 향상된 네트워킹을 활성화하고 구성하려면 어떻게 해야 합니까?를 참조하십시오.
  • 배치 그룹을 사용한 Amazon EC2 HPC(고성능 컴퓨팅) 지원. HPC는 전체 바이섹션 대역폭과 낮은 지연 시간을 제공하며 인스턴스 유형에 따라 최대 100기가비트의 네트워크 속도를 지원합니다. 각 인스턴스 유형의 네트워크 성능을 확인하려면 Amazon Linux AMI 인스턴스 유형 표를 참조하십시오. 자세한 내용은 배치 그룹으로 인스턴스 시작을 참조하십시오.
  • 인스턴스는 성능 버스트 가능 인스턴스(T3, T3a 및 T2 인스턴스)입니다. 버스트 가능 인스턴스의 성능이 네트워크 처리량 성능 기준보다 낮으면 CPU 크레딧이 적립됩니다. 이러한 크레딧을 사용하면 성능 버스트 가능 인스턴스가 네트워크 처리량 기준 이상으로 일시적으로 버스트할 수 있습니다. 자세한 내용은 성능 버스트 가능 인스턴스를 참조하십시오.

앞서 설명한 요인들로 인해 서로 다른 클라우드 환경 간에 상당한 네트워크 성능 차이가 나타날 수 있습니다. 모범 사례로서, 환경의 네트워크 성능을 정기적으로 평가하고 기준선을 설정하여 애플리케이션 성능을 개선하는 것이 좋습니다 네트워크 성능 테스트를 통해 요구 사항에 가장 적합한 EC2 인스턴스 유형, 크기 및 구성을 결정하는 데 유용한 분석 정보를 얻을 수 있습니다. 선택한 인스턴스 조합에 대해 네트워크 성능 테스트를 실행할 수 있습니다.

자세한 정보를 얻으려면 지원 사례를 열고 관심 있는 특정 인스턴스 유형에 대한 추가 네트워크 성능 사양을 문의하십시오.

해결 방법

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

1.    네트워크 성능 테스트를 실행할 수 있는 2개의 Linux 인스턴스를 시작합니다.

2.    인스턴스가 Linux에서 향상된 네트워킹을 지원하는지, 그리고 동일한 Amazon VPC에 있는지 확인합니다.

3.    (선택 사항) 점보 프레임을 지원하지 않는 인스턴스 간에 네트워크 테스트를 수행하는 경우 EC2 인스턴스에 대한 네트워크 MTU(최대 전송 단위)의 단계에 따라 인스턴스의 MTU를 확인하고 설정합니다.

4.    인스턴스에 연결하여 해당 인스턴스에 액세스할 수 있는지 확인합니다.

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

Amazon Linux와 같은 일부 배포판에서는 iperf가 EPEL(Extra Packages for Enterprise Linux) 리포지토리의 일부로 포함되어 있습니다. EPEL 리포지토리를 활성화하려면 CentOS, RHEL 또는 Amazon Linux를 실행 중인 Amazon EC2 인스턴스에 대해 EPEL 리포지토리를 활성화하려면 어떻게 해야 합니까?를 참조하십시오.

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

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

# yum -y install  https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.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

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

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

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

$ sudo iperf -s [-p 5001]

2.    두 번째 인스턴스를 클라이언트로 구성하고 원하는 파라미터를 사용하여 서버에 대한 테스트를 실행합니다. 예를 들어 다음 명령은 2개의 병렬 연결을 사용하여 지정된 서버 인스턴스에 대한 TCP 테스트를 시작합니다.

#iperf -c 172.31.1.152 --parallel 2 -i 1 -t 2

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

이러한 지정된 iperf 파라미터를 사용하면 클라이언트 스트림당 간격, 클라이언트 스트림당 전송된 데이터 및 각 클라이언트 스트림에 사용된 대역폭이 출력에 표시됩니다. 다음 iperf 출력은 c5n.18xlarge EC2 Linux 인스턴스 2개에 대한 테스트 결과를 보여 줍니다. 모든 연결을 통해 전송된 총 대역폭은 9.6Gbit/s였습니다.

------------------------------------------------------------
Client connecting to 172.31.1.152, TCP port 5001
TCP window size: 4.00 MByte (default)
------------------------------------------------------------
[ 3] local 172.31.8.116 port 43582 connected with 172.31.1.152 port 5001
[ 4] local 172.31.8.116 port 43584 connected with 172.31.1.152 port 5001
[ ID] Interval Transfer Bandwidth
[ 4] 0.0- 1.0 sec 597 MBytes 5.01 Gbits/sec
[ 3] 0.0- 1.0 sec 598 MBytes 5.02 Gbits/sec
[SUM] 0.0- 1.0 sec 1.17 GBytes 10.0 Gbits/sec
[ 3] 1.0- 2.0 sec 597 MBytes 5.01 Gbits/sec
[ 3] 0.0- 2.0 sec 1.17 GBytes 5.01 Gbits/sec
[ 4] 1.0- 2.0 sec 596 MBytes 5.00 Gbits/sec
[SUM] 1.0- 2.0 sec 1.16 GBytes 10.0 Gbits/sec
[ 4] 0.0- 2.0 sec 1.17 GBytes 5.00 Gbits/sec
[SUM] 0.0- 2.0 sec 2.33 GBytes 10.0 Gbits/sec

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

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

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

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

$ sudo iperf -s -u [-p 5001]

2.    두 번째 인스턴스를 클라이언트로 구성한 후 원하는 파라미터를 사용하여 서버에 대한 테스트를 실행합니다. 예를 들어 다음 명령은 -b 파라미터가 5g로 설정된 특정 서버 인스턴스에 대해 UDP 테스트를 시작합니다. 5g는 c5n18xlarge 인스턴스가 제공할 수 있는 최대 네트워크 성능입니다.

#iperf -c 172.31.1.152 -u -b 5g

출력에는 간격(시간), 전송된 데이터의 양, 달성된 대역폭, 지터(데이터그램의 주기적 도착에 대한 시간 편차) 및 UDP 데이터그램의 손실/합계가 표시됩니다.

Output:
------------------------------------------------------------
Client connecting to 172.31.1.152, UDP port 5001
Sending 1470 byte datagrams, IPG target: 2.35 us (kalman adjust)
UDP buffer size: 208 KByte (default)
------------------------------------------------------------
[ 3] local 172.31.8.116 port 38942 connected with 172.31.1.152 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 5.70 GBytes 4.90 Gbits/sec
[ 3] Sent 4163756 datagrams
[ 3] Server Report:
[ 3] 0.0-10.0 sec 5.68 GBytes 4.88 Gbits/sec 0.002 ms 14124/4163756 (0.34%)