Interconnect를 통한 네트워크 처리량 계산

이 튜토리얼에서는 Google Cloud 내에서 그리고 Cloud Interconnect를 사용하여 연결된 온프레미스 또는 타사 클라우드 위치 모두에서 네트워크 처리량을 계산하는 방법을 설명합니다. 이 문서에서는 결과를 분석하는 방법, 네트워크 성능에 영향을 미칠 수 있는 변수를 나열하고 몇 가지 문제 해결 팁을 제공합니다.

제한사항 및 고려사항

  • Cloud Interconnect 제한사항이 적용됩니다. 자세한 내용은 Cloud Interconnect 할당량을 참조하세요.
  • NIC 한도: Google Cloud는 각 네트워크 인터페이스(NIC) 또는 IP 주소가 아닌 각 가상 머신(VM) 인스턴스의 대역폭을 고려합니다. VM 머신 유형은 최대 이그레스 속도를 정의합니다. 하지만 특정 상황에서만 이 속도를 달성할 수 있습니다. 머신 유형별 vCPU 수는 이 를 참조하세요.
  • 경로의 다른 기기 (방화벽, 작은 버퍼가 있는 스위치, 다른 공급업체의 기기) 및 제한사항이 적용됩니다. 이러한 제한사항을 완화하려면 다음 태스크를 수행합니다.

    • 방화벽 및 경로의 스위치에 대한 네트워크 통계를 수집합니다.
    • Cloud Interconnect 테스트의 경우 온프레미스 호스트와 Google Edge 기기 간에 최대한 많은 기기를 우회합니다.
    • 온프레미스 네트워크와 Google Cloud VM 사이의 경로에 있는 모든 기기를 식별하고 처리량 문제의 원인이 될 수 있는지 확인합니다.

네트워크 처리량 측정 도구 개요

이 튜토리얼에서는 네트워크 처리량 계산을 위해 다음 도구를 사용하는 방법을 보여줍니다.

  • iPerf3: TCP/UDP 데이터 스트림(단일 스레드 또는 멀티 스레드)을 만들고 이를 전달하는 네트워크의 처리량을 측정할 수 있는 네트워크 테스트 도구입니다.

    참고: iPerf3는 단일 CPU 머신에만 권장됩니다.

  • Netperf: iPerf3와 비슷하지만 단일 CPU에서 CPU의 제한을 받는 멀티 CPU 인스턴스의 처리량 테스트에 적합한 도구입니다.

  • tcpdump: 고급 문제 해결을 위해 패킷 세부정보 및 TCP/IP 통신을 캡처하는 명령줄 패킷 분석기입니다. tcpdump 도구는 Wireshark와 같은 다른 도구와 호환됩니다.

  • Netstat: 전송 제어 프로토콜(수신 및 발신), 라우팅 테이블, 여러 네트워크 인터페이스(네트워크 인터페이스 컨트롤러 또는 소프트웨어 정의 네트워크 인터페이스), 네트워크 프로토콜 통계의 네트워크 연결을 표시하는 명령줄 네트워크 유틸리티입니다.

  • mtr: traceroute 및 ping 함수를 모두 수행하는 네트워크 진단 도구입니다. 개별 패킷이 통과할 수 있는 홉 수를 제한하여 라우팅 경로에서 라우터를 프로브하고 만료 응답을 리슨합니다.

iPerf3으로 처리량 측정

단일 VM 인스턴스에서 처리량을 측정하려면 이 절차를 따르세요.

대형 머신 유형 선택

처리량 테스트를 수행하려면 n1-standard-8과 같은 대형 머신 유형을 사용합니다. 이 머신 유형은 최대 이그레스 처리량 한도를 16Gbps로 제공하므로 VM당 이그레스 처리량이 테스트를 방해하지 않습니다.

도구 설치

Linux VM 인스턴스에 iPerf3, mtr, netstat, tcpdump 설치

Debian 기반 배포판의 경우 다음 명령어를 실행합니다.

    sudo apt-get update
    sudo apt-get install iperf3 tcpdump mtr netstat

Redhat 기반 배포판의 경우 다음 명령어를 실행합니다.

    yum update
    yum install iperf3 tcpdump mtr netstat

netperf 설치

Debian 기반 배포판의 경우 다음 명령어를 실행합니다.

    sudo apt-get install git build-essential autoconf texinfo -y
    git clone https://github.com/HewlettPackard/netperf.git
    cd netperf
    ./autogen.sh
    ./configure --enable-histogram --enable-demo=yes
    make
    cp src/netserver ~/.local/bin
    cp src/netperf ~/.local/bin

Redhat 기반 배포판의 경우 다음 명령어를 실행합니다.

    sudo yum install git build-essential autoconf texinfo -y
    git clone https://github.com/HewlettPackard/netperf.git
    cd netperf
    ./autogen.sh
    ./configure --enable-histogram --enable-demo=yes
    make
    cp src/netserver ~/.local/bin
    cp src/netperf ~/.local/bin

기본 요건 테스트 실행

  1. VLAN 연결 크기가 올바르게 구성되어 있는지 확인합니다. 자세한 내용은 VLAN 연결 수정을 참조하세요.
  2. 연결의 양단(각 터미널)에서 top 또는 htop 명령어를 실행하여 CPU 사용량을 모니터링합니다.
  3. 테스트를 실행하기 전에 netstat 명령어를 사용하여 네트워크 통계를 수집합니다.

    netstat -s >> netstat.log
    
  4. 다른 터미널에서 snaplen 매개변수 값이 128인 캡처 전에 tcpdump 명령어를 실행합니다.

    두 엔드포인트 모두에서 이 명령어를 실행합니다.

    sudo /usr/sbin/tcpdump -s 128 -i [DEVICE_INTERFACE] host [IP_ADDRESS of remote side] -w mycap.pcap
    
  5. 소스 및 대상 호스트에서 읽기 및 쓰기 메모리 크기를 가져옵니다.

    $ sysctl net.ipv4.tcp_rmem
    $ sysctl net.ipv4.tcp_wmem
    $ sysctl net.core.rmem_max
    $ sysctl net.core.rmem_default
    $ net.core.wmem_max
    $ net.core.wmem_default
    $ uname -r
    $ cat /etc/os-release
    

iperf3 테스트 실행

각 흐름별 3Gbps 제한으로 인해 iperf3 테스트의 동시 스트림을 여러 개 실행하는 것이 좋습니다. 대역폭 제한을 보완하고 유용한 결과를 얻으려면 최소 4개에서 최대 10개의 테스트를 실행하는 것이 좋습니다.

  1. 다른 터미널에서 연결의 한쪽(VM 또는 온프레미스 머신)에서 iperf3 서버를 실행합니다. 여러 스트림에는 iperf3 서버가 여러 개 필요합니다.

  2. Cloud Interconnect 테스트를 위해 udp 플래그로 iPerf3 도구를 실행합니다. UDP를 사용하여 원하는 처리량을 달성하면 추가 문제 해결 단계를 수행해야 합니다.

  3. 명령줄에서 여러 iperf3 서버를 실행하려면 다음 명령어를 실행합니다.

    $ iperf3 -s -p 5101&; iperf3 -s -t 30 -p 5102&; iperf3 -s  -p 5103 &
    
  4. 다음 bash 스크립트를 사용하여 여러 iperf3 서버를 실행합니다.

    #!/bin/bash
    #start iperf3 server running in background
    
    for i in `seq 0 9`;
    do
            iperf3 -s  -B 10.0.100.35 -t 30 -u -p 521$i &
    done
    

iperf3 client는 기본적으로 10초 동안 실행되지만 TCP가 최대 처리량에 도달하기에 충분하지 않을 수 있습니다. 더 안정적인 결과를 얻으려면 DURATION 값을 최소 30초로 설정하세요.

    iperf3 -c [server IP address] -P [THREADS] -t [DURATION]

여러 iperf3 UDP 스트림을 실행하는 bash 스크립트

echo "UDP iperf test - 10 streams"
for i in `seq 0 9`;
do
       iperf3 -B 10.0.100.35 -c 192.168.50.3 --logfile ~/gcpvm_client-521$i.log -u -b 1G  -l 1390 -t10 -p 521$i    &

done

여러 iperf3 TCP 스트림을 실행하는 bash 스크립트

echo "UDP iperf test - 10 streams"
for i in `seq 0 9`;
do
       iperf3 -B 10.0.100.35 -c 192.168.50.3 --logfile ~/gcpvm_client-521$i.log -b 1G  -l 1390 -t10 -p 521$i    &

done

iperf3 테스트가 실행되는 동안 두 기기의 CPU 부하를 모니터링합니다. CPU 부하가 100%에 근접하면 CPU가 하나의 iperf3 스레드에 대한 병목 현상의 원인이 됩니다. 이 경우 다중 CPU를 지원하는 Netperf 도구를 사용합니다.

Netperf를 실행할 수 없는 경우 여러 iPerf3 서버와 클라이언트를 서로 다른 터미널과 다른 포트에서 동시에 시작할 수 있습니다.

테스트 결과 분석

다음 단계를 수행합니다.

  1. iperf3 클라이언트 결과에서 대역폭 및 패킷 손실을 확인합니다.
  2. iperf3 서버 결과에 순서가 잘못된 패킷이 있는지 확인합니다.
  3. 패킷 캡처 분석을 수행합니다. 다음 명령어를 실행하여 pcap 파일을 텍스트 파일로 변환합니다.

    tcpdump -A -[PCAP-FILENAME].pcap > [TXT-FILENAME].txt
    
  4. 다음 명령어를 실행하여 패킷의 총개수와 순서가 잘못된 패킷을 가져옵니다.

    grep -e "Total" -A1 pcap [TXT-FILENAME]
    

    출력은 다음과 같습니다.

    gcpvm-send-5210.txt:Total UDP packets: 874032
    gcpvm-send-5210.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5211.txt:Total UDP packets: 791218
    gcpvm-send-5211.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5212.txt:Total UDP packets: 961510
    gcpvm-send-5212.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5213.txt:Total UDP packets: 961517
    gcpvm-send-5213.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5214.txt:Total UDP packets: 961501
    gcpvm-send-5214.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5215.txt:Total UDP packets: 961521
    gcpvm-send-5215.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5216.txt:Total UDP packets: 889932
    gcpvm-send-5216.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5217.txt:Total UDP packets: 961483
    gcpvm-send-5217.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5218.txt:Total UDP packets: 961479
    gcpvm-send-5218.txt:Total out-of-order packets: 0, missing packets: 0
    gcpvm-send-5219.txt:Total UDP packets: 961518
    gcpvm-send-5219.txt:Total out-of-order packets: 0, missing packets: 0
    

    다음 분석은 성능 테스트 중의 패킷 손실을 보여줍니다.

    $ grep -e "Total" -A1 onPrem-send-*.txt
    

    출력은 다음과 같습니다.

    "Total" -A1 onPrem-send-*.txt
    onPrem-send-5210.txt:Total UDP packets: 858698
    onPrem-send-5210.txt:Total out-of-order packets: 0, missing packets: 5408
    --
    onPrem-send-5211.txt:Total UDP packets: 857667
    onPrem-send-5211.txt:Total out-of-order packets: 0, missing packets: 4929
    --
    onPrem-send-5212.txt:Total UDP packets: 857126
    onPrem-send-5212.txt:Total out-of-order packets: 0, missing packets: 5349
    --
    onPrem-send-5213.txt:Total UDP packets: 857424
    onPrem-send-5213.txt:Total out-of-order packets: 0, missing packets: 5495
    --
    onPrem-send-5214.txt:Total UDP packets: 857139
    onPrem-send-5214.txt:Total out-of-order packets: 0, missing packets: 4692
    --
    onPrem-send-5215.txt:Total UDP packets: 857175
    onPrem-send-5215.txt:Total out-of-order packets: 0, missing packets: 4789
    --
    onPrem-send-5216.txt:Total UDP packets: 857104
    onPrem-send-5216.txt:Total out-of-order packets: 0, missing packets: 5196
    --
    onPrem-send-5217.txt:Total UDP packets: 857122
    onPrem-send-5217.txt:Total out-of-order packets: 0, missing packets: 5423
    --
    onPrem-send-5218.txt:Total UDP packets: 857383
    onPrem-send-5218.txt:Total out-of-order packets: 0, missing packets: 5283
    --
    onPrem-send-5219.txt:Total UDP packets: 857313
    onPrem-send-5219.txt:Total out-of-order packets: 0, missing packets: 4934
    
  5. 기기 페이지에 액세스하여 포트 처리량을 확인합니다.

  6. netstat 출력에 읽기/쓰기 오류가 표시되면 TCP/UDP 일괄 흐름 조정이 필요할 수 있습니다.

  7. 순서가 잘못된 패킷이 있으면 추가 분석을 위해 VPN 게이트웨이에서 패킷 캡처를 수행해야 합니다. VPN 게이트웨이에서 패킷 캡처를 수행하는 방법에 대한 자세한 내용은 지원 케이스를 생성하세요.

  8. iperf3 UDP 테스트에서 원하는 처리량을 달성하면 문제가 다른 곳에 있어야 하며 TCP 조정이 필요할 수 있습니다.