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

최종 업데이트 날짜: 2020년 9월 18일

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

​해결 방법

네트워크 성능 벤치마크 테스트를 통해 요구 사항에 가장 적합한 Amazon EC2 인스턴스 유형, 크기 및 구성을 결정할 수 있습니다. 각 인스턴스 유형의 네트워크 성능에 대한 자세한 내용은 Amazon EC2 인스턴스 유형을 참조하십시오.

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

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

1.    두 개의 EC2 Windows 인스턴스를 시작하여 네트워크 성능 테스트를 실행합니다.

2.    인스턴스가 Windows용으로 향상된 네트워킹을 지원하는지 확인합니다.

3.    동일한 배치 그룹에 공존하지 않거나 점보 프레임을 지원하지 않는 인스턴스 간에 네트워크 테스트를 실행하려면 최대 전송 단위(MTU)를 확인하고 설정합니다.

4.    인스턴스에 연결할 수 있는지 확인합니다.

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

두 Windows 인스턴스 각각에 연결한 다음 이 단계를 따르십시오.

1.    Microsoft TechNet 웹 사이트에서 NTttcp를 다운로드합니다.

2.    폴더에 파일의 압축을 해제합니다.

3.    관리자 권한으로 명령 프롬프트를 연 다음 디렉터리를 압축을 해제한 NTttcp 네트워크 벤치마크 도구가 있는 폴더로 변경합니다.

4.    NTttcp를 실행하기 전에 EC2 Windows 인스턴스의 아키텍처와 일치하는 이름을 가진 폴더로 디렉터리를 변경합니다.

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

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

중요:

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

TCP 네트워크 성능 테스트

1.    기본 포트 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: 첫 번째 스레드가 데이터 수신에 사용하는 포트. 포트 번호는 수신기 스레드가 1개 추가될 때마다 증가합니다.
  • -a 6: 스레드당 수신 중첩 버퍼 6을 포스트하는 비동기식 데이터 전송
  • -t 60: 테스트 시간(초)
  • -cd 5: 테스트 휴지 시간(5초)
  • -wu 5: 테스트 워밍업 시간(5초)
  • -v: 상세한 테스트 결과 지정
  • -xml: 지정된 파일에 테스트 결과 저장(xml.txt에 기본으로 저장)
  • -m: 세션당 3개의 매핑 파라미터(스레드 수, CPUID, 수신기 IP 주소)를 지정합니다. 여러 세션은 공백으로 구분됩니다.

2.    두 번째 인스턴스를 송신기/클라이언트로 구성한 다음 선택한 파라미터로 수신기에 대해 테스트를 실행합니다.

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

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: 첫 번째 스레드가 데이터 전송에 사용하는 포트. 포트 번호는 송신기 스레드가 1개 추가될 때마다 증가합니다.
  • -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 네트워크 성능 테스트

1.    기본 포트 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: 첫 번째 스레드가 데이터 수신에 사용하는 포트. 포트 번호는 수신기 스레드가 1개 추가될 때마다 증가합니다.
  • -t 60: 테스트 시간(초)
  • -cd 5: 테스트 휴지 시간(5초)
  • -wu 5: 테스트 워밍업 시간(5초)
  • -v: 상세한 테스트 결과 지정
  • -xml: 지정된 파일에 테스트 결과 저장(xml.txt에 기본으로 저장)
  • -m: 세션당 3개의 매핑 파라미터(스레드 수, CPUID, 수신기 IP 주소)를 지정합니다. 여러 세션은 공백으로 구분됩니다.

2.    두 번째 인스턴스를 송신기/클라이언트로 구성한 다음 원하는 파라미터로 수신기에 대해 테스트를 실행합니다.

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

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: 첫 번째 스레드가 데이터 전송에 사용하는 포트. 포트 번호는 송신기 스레드가 1개 추가될 때마다 증가합니다.
  • -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와 함께 사용할 수 있는 모든 스위치를 보려면 명령 프롬프트를 열고 다음 명령을 실행합니다.

ntttcp