Amazon EC2 Windows 인스턴스에서 네트워크 처리량을 벤치마크하려면 어떻게 해야 하나요?

6분 분량
0

Amazon Elastic Compute Cloud(Amazon EC2) Windows 인스턴스 간의 네트워크 대역폭을 측정해야 합니다.

해결 방법

네트워크 성능 벤치마크 테스트는 필요에 가장 적합한 Amazon EC2 인스턴스의 유형, 크기 및 구성을 결정하는 데 도움이 될 수 있습니다. 각 인스턴스 유형의 네트워크 성능에 대한 자세한 내용은 Amazon EC2 인스턴스 유형을 참조하세요.

Amazon EC2 Windows 인스턴스 시작 및 구성

벤치마크 테스트를 실행하기 전에 다음 단계를 따르세요.

  1. 두 개의 EC2 Windows 인스턴스를 시작하여 네트워크 성능 테스트를 실행합니다.
  2. 인스턴스가 Windows의 향상된 네트워킹을 지원하는지 확인합니다.
  3. 동일한 배치 그룹에 있지 않거나 점보 프레임을 지원하지 않는 인스턴스 간에 네트워크 테스트를 실행합니다. 이를 위해서는 최대 전송 단위(MTU)를 확인하고 설정해야 합니다.
  4. 인스턴스에 연결할 수 있는지 확인합니다.

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

두 Windows 인스턴스에 각각 연결한 후 다음 단계를 따르세요.

  1. GitHub 웹사이트에서 Microsoft NTttcp의 최신 릴리스를 다운로드합니다.
  2. 파일 내용을 폴더에 압축 해제합니다.
  3. 관리자 권한으로 명령 프롬프트를 연 다음, NTttcp 네트워크 벤치마크 도구의 압축을 푼 폴더로 디렉터리를 변경합니다.
  4. NTttcp를 실행하기 전에 디렉터리를 EC2 Windows 인스턴스의 아키텍처와 일치하는 이름의 폴더로 변경합니다.

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

NTttcp를 사용하여 TCP 및 UDP 성능을 테스트하는 경우 기본적으로 포트 5001을 통해 통신합니다. 하지만 -p 스위치를 사용하여 포트를 구성할 수 있습니다.

중요:

  • NTttcp가 사용하는 포트를 통한 통신을 허용하도록 보안 그룹을 구성해야 합니다.
  • 수신자와 발신자 모두에 NTttcp.exe 연결을 허용하는 인바운드 및 아웃바운드 Windows 방화벽 규칙을 추가합니다.

TCP 네트워크 성능 테스트

먼저 하나의 인스턴스를 수신자/서버로 구성하여 리스너를 초기화합니다. 기본 포트 5001부터 시작합니다. 또는 -p 스위치를 사용하여 대체 초기 리스너 포트를 지정합니다.

예를 들어, 다음 명령은 지정된 IP 주소의 포트 80-81에서 수신하는 2스레드 수신자를 초기화합니다. 첫 번째 스레드는 CPU 0에서 실행되고 두 번째 스레드는 CPU 1에서 실행됩니다.

ntttcp -r -p 80 -a 6 -t 60 -cd 5 -wu 5 -v -xml c:\bench.xml -m 1,0,192.168.1.4 1,1,192.168.1.4

이 예제에서 ntttcp.exe 수신자 파라미터는 다음 작업을 설명합니다.

  • -r: 수신
  • -p 80: 첫 번째 스레드가 데이터를 수신하는 데 사용하는 포트, 포트 번호는 각 추가 수신자 스레드에 대해 증가
  • -a 6: 스레드당 6개의 수신 중첩 버퍼를 게시하는 비동기 데이터 전송
  • -t 60: 테스트 기간(초 단위)
  • -cd 5: 테스트 휴지 시간 5초
  • -wu 5: 테스트 워밍업 시간 5초
  • -v: 상세한 테스트 출력 지정
  • -xml: 테스트 출력을 지정된 파일(기본값은 xml.txt)에 저장
  • -m: 세션당 3개의 매핑 파라미터(스레드 수, CPUID, 수신기 IP 주소) 지정, 여러 세션은 공백으로 구분

그리고 두 번째 인스턴스를 발신자/클라이언트로 구성한 다음 선택한 파라미터를 사용하여 수신자에 대해 테스트를 실행합니다.

예를 들어, 다음 명령은 2스레드 TCP 발신자를 지정된 IP 주소의 포트 80-81로 초기화합니다. 첫 번째 스레드는 CPU 0에서 실행되고 두 번째 스레드는 CPU 1에서 실행됩니다.

참고: 다음 명령은 1단계의 명령과 동일한 IP 주소를 가집니다. 두 명령 모두에 수신자 IP 주소를 입력합니다.

ntttcp -s -p 80 -a -t 60 -cd 5 -wu 5 -m 1,0,192.168.1.4 1,1,192.168.1.4

이 예제에서 ntttcp.exe 발신자 파라미터는 다음 작업을 설명합니다.

  • -s: 발신
  • -p 80: 첫 번째 스레드가 데이터를 보내는 데 사용하는 포트, 포트 번호는 각 추가 발신자 스레드에 대해 증가
  • -a: 스레드당 비동기 전송 중첩 버퍼의 기본값은 2, 필요한 경우 기본값이 아닌 값을 지정
  • -t 60: 테스트 기간(초 단위)
  • -cd 5: 테스트 휴지 시간 5초
  • -wu 5: 테스트 워밍업 시간 5초
  • -m: 세션당 3개의 매핑 파라미터(스레드 수, CPUID, 수신기 IP 주소) 지정, 여러 세션은 공백으로 구분

다음 예제와 같이 수신기에 XML 출력이 생성됩니다. 이 테스트에서 사용된 총 대역폭은 약 9.02GBps입니다.

<ntttcpr computername="Win_EC2_Recv" version="5.31">
  <parameters>
    <send_socket_buff>0</send_socket_buff>
    <recv_socket_buff>-1</recv_socket_buff>
    <port>82</port>
    <sync_port>False</sync_port>
    <async>True</async>
    <verbose>True</verbose>
    <wsa>False</wsa>
    <use_ipv6>False</use_ipv6>
    <udp>False</udp>
    <verify_data>False</verify_data>
    <wait_all>False</wait_all>
    <run_time>60000</run_time>
    <warmup_time>5000</warmup_time>
    <cooldown_time>5000</cooldown_time>
    <dash_n_timeout>10800000</dash_n_timeout>
    <bind_sender>False</bind_sender>
    <sender_name></sender_name>
    <max_active_threads>2</max_active_threads>
  </parameters>
  <thread index="0">
    <realtime metric="s">60.012</realtime>
    <throughput metric="KB/s">542199.263</throughput>
    <throughput metric="MB/s">529.491</throughput>
    <throughput metric="mbps">4441.696</throughput>
    <avg_bytes_per_compl metric="B">65091.350</avg_bytes_per_compl>
  </thread>
  <thread index="1">
    <realtime metric="s">60.012</realtime>
    <throughput metric="KB/s">559260.669</throughput>
    <throughput metric="MB/s">546.153</throughput>
    <throughput metric="mbps">4581.463</throughput>
    <avg_bytes_per_compl metric="B">65535.750</avg_bytes_per_compl>
  </thread>
  <total_bytes metric="MB">64550.500000</total_bytes>
  <realtime metric="s">60.011000</realtime>
  <avg_bytes_per_compl metric="B">65316.236</avg_bytes_per_compl>
  <threads_avg_bytes_per_compl metric="B">65313.550</threads_avg_bytes_per_compl>
  <avg_frame_size metric="B">8194.809</avg_frame_size>
  <throughput metric="MB/s">1075.644</throughput>
  <throughput metric="mbps">9023.160</throughput>
  <total_buffers>1032808.000</total_buffers>
  <throughput metric="buffers/s">17210.311</throughput>
  <avg_packets_per_interrupt metric="packets/interrupt">5.749
    </avg_packets_per_interrupt>
  <interrupts metric="count/sec">23942.694</interrupts>
  <dpcs metric="count/sec">9546.816</dpcs>
  <avg_packets_per_dpc metric="packets/dpc">14.417
    </avg_packets_per_dpc>
  <cycles metric="cycles/byte">2.826</cycles>
  <packets_sent>730596</packets_sent>
  <packets_received>8259632</packets_received>
  <packets_retransmitted>0</packets_retransmitted>
  <errors>0</errors>
  <cpu metric="%">7.813</cpu>
  <bufferCount>9223372036854775807</bufferCount>
  <bufferLen>65536</bufferLen>
  <io>6</io>
</ntttcpr>

UDP 네트워크 성능 테스트

먼저 하나의 인스턴스를 수신자/서버로 구성하여 리스너를 초기화합니다. 기본 포트 5001부터 시작합니다. 또는 -p 스위치를 사용하여 대체 초기 리스너 포트를 지정합니다.

예를 들어, 다음 명령은 지정된 IP 주소의 포트 80-81에서 수신하는 2스레드 수신자를 초기화합니다. 첫 번째 스레드는 CPU 0에서 실행되고 두 번째 스레드는 CPU 1에서 실행됩니다.

ntttcp –r –u -p 80 –t 60 –cd 5 –wu 5 –v –xml c:\\bench.xml –m 1,0,192.168.1.4 1,1,192.168.1.4

이 예제에서 ntttcp.exe 수신자 파라미터는 다음 작업을 설명합니다.

  • -r: 수신
  • -u: UDP를 테스트
  • -p 80: 첫 번째 스레드가 데이터를 수신하는 데 사용하는 포트, 포트 번호는 각 추가 수신자 스레드에 대해 증가
  • -t 60: 테스트 기간(초 단위)
  • -cd 5: 테스트 휴지 시간 5초
  • -wu 5: 테스트 워밍업 시간 5초
  • -v: 상세한 테스트 출력 지정
  • -xml: 테스트 출력을 지정된 파일(기본값은 xml.txt)에 저장
  • -m: 세션당 3개의 매핑 파라미터(스레드 수, CPUID, 수신기 IP 주소) 지정, 여러 세션은 공백으로 구분

그리고 두 번째 인스턴스를 발신자/클라이언트로 구성한 다음 원하는 파라미터를 사용하여 수신자에 대해 테스트를 실행합니다.

예를 들어, 다음 명령은 2스레드 UDP 발신자를 지정된 IP 주소의 포트 80-81로 초기화합니다. 첫 번째 스레드는 CPU 0에서 실행되고 두 번째 스레드는 CPU 1에서 실행됩니다.

참고: 다음 명령은 1단계의 명령과 동일한 IP 주소를 가집니다. 두 명령 모두에 수신자 IP 주소를 입력합니다.

ntttcp -s –u -p 80 -t 60 -cd 5 -wu 5 -m 1,0,192.168.1.4 1,1,192.168.1.4

이 예제에서 ntttcp.exe 발신자 파라미터는 다음 작업을 설명합니다.

  • -s: 발신
  • -u: UDP를 테스트(기본값은 TCP를 테스트)
  • -p 80: 첫 번째 스레드에서 데이터를 보내는 데 사용하는 포트, 포트 번호는 각 추가 발신자 스레드에 대해 증가
  • -t 60: 테스트 기간(초 단위)
  • -cd 5: 테스트 휴지 시간 5초
  • -wu 5: 테스트 워밍업 시간 5초
  • -m: 세션당 3개의 매핑 파라미터(스레드 수, CPUID, 수신기 IP 주소) 지정, 여러 세션은 공백으로 구분

수신기에 XML 출력이 생성됩니다.

<ntttcpr computername="Win_UDP_Test" version="5.31">
  <parameters>
    <send_socket_buff>8192</send_socket_buff>
    <recv_socket_buff>-1</recv_socket_buff>
    <port>82</port>
    <sync_port>False</sync_port>
    <async>False</async>
    <verbose>True</verbose>
    <wsa>False</wsa>
    <use_ipv6>False</use_ipv6>
    <udp>True</udp>
    <verify_data>False</verify_data>
    <wait_all>False</wait_all>
    <run_time>60000</run_time>
    <warmup_time>5000</warmup_time>
    <cooldown_time>5000</cooldown_time>
    <dash_n_timeout>10800000</dash_n_timeout>
    <bind_sender>False</bind_sender>
    <sender_name></sender_name>
    <max_active_threads>2</max_active_threads>
  </parameters>
  <thread index="0">
    <realtime metric="s">60.016</realtime>
    <throughput metric="KB/s">6463.886</throughput>
    <throughput metric="MB/s">6.312</throughput>
    <throughput metric="mbps">52.952</throughput>
    <avg_bytes_per_compl metric="B">128.000</avg_bytes_per_compl>
  </thread>
  <thread index="1">
    <realtime metric="s">60.016</realtime>
    <throughput metric="KB/s">7712.922</throughput>
    <throughput metric="MB/s">7.532</throughput>
    <throughput metric="mbps">63.184</throughput>
    <avg_bytes_per_compl metric="B">128.000</avg_bytes_per_compl>
  </thread>
  <total_bytes metric="MB">830.880005</total_bytes>
  <realtime metric="s">60.015000</realtime>
  <avg_bytes_per_compl metric="B">128.000</avg_bytes_per_compl>
  <threads_avg_bytes_per_compl metric="B">128.000<</threads_avg_bytes_per_compl>
  <avg_frame_size metric="B">127.780</avg_frame_size>
  <throughput metric="MB/s">13.845</throughput>
  <throughput metric="mbps">116.136</throughput>
  <total_buffers>6806569.000</total_buffers>
  <throughput metric="buffers/s">113414.463</throughput>
  <avg_packets_per_interrupt metric="packets/interrupt">1.968
  </avg_packets_per_interrupt>
  <interrupts metric="count/sec">57715.621</interrupts>
  <dpcs metric="count/sec">11576.306</dpcs>
  <avg_packets_per_dpc metric="packets/dpc">9.814</avg_packets_per_dpc>
  <cycles metric="cycles/byte">210.673</cycles>
  <packets_sent>2</packets_sent>
  <packets_received>6818294</packets_received>
  <packets_retransmitted>0</packets_retransmitted>
  <errors>1</errors>
  <cpu metric="%">44.976</cpu>
  <bufferCount>9223372036854775807</bufferCount>
  <bufferLen>128</bufferLen>
  <io>2</io>
</ntttcpr>

NTttcp에서 사용할 수 있는 모든 스위치를 보려면 명령 프롬프트를 열고 다음 명령을 실행하세요.

ntttcp

관련 정보

EC2 인스턴스의 네트워크 최대 전송 단위(MTU)

배치 그룹

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

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