이 튜토리얼에서는 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
기본 요건 테스트 실행
- VLAN 연결 크기가 올바르게 구성되었는지 확인합니다. 자세한 내용은 VLAN 연결 수정을 참고하세요.
- 연결의 양단(각 터미널)에서
top
또는htop
명령어를 실행하여 CPU 사용량을 모니터링합니다. 테스트를 실행하기 전에
netstat
명령어를 사용하여 네트워크 통계를 수집합니다.netstat -s >> netstat.log
다른 터미널에서 캡처하기 전에
snaplen
매개변수 값이128
인tcpdump
명령어를 실행합니다.두 엔드포인트 모두에서 이 명령어를 실행합니다.
sudo /usr/sbin/tcpdump -s 128 -i [DEVICE_INTERFACE] host [IP_ADDRESS of remote side] -w mycap.pcap
소스 및 대상 호스트의 읽기 및 쓰기 메모리 크기를 가져옵니다.
$ 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개의 테스트를 실행하는 것이 좋습니다.
다른 터미널에서 연결의 한쪽(VM 또는 온프레미스 머신)에서
iperf3
서버를 실행합니다. 스트림이 여러 개인 경우 여러iperf3
서버가 필요합니다.Cloud Interconnect 테스트를 위해
udp
플래그를 사용하여 iPerf3 도구를 실행합니다. UDP로 원하는 처리량을 달성한 경우 추가 문제 해결 단계를 수행해야 합니다.명령줄에서 여러 개의
iperf3
서버를 실행하려면 다음 명령어를 실행합니다.$ iperf3 -s -p 5101&; iperf3 -s -t 30 -p 5102&; iperf3 -s -p 5103 &
다음 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 서버와 클라이언트를 서로 다른 터미널과 서로 다른 포트에서 동시에 시작할 수 있습니다.
테스트 결과 분석
다음 단계를 수행합니다.
iperf3
클라이언트 결과에서 대역폭 및 패킷 손실을 확인합니다.iperf3
서버 결과에 순서가 잘못된 패킷이 있는지 확인합니다.패킷 캡처 분석을 수행합니다. 다음 명령어를 실행하여 pcap 파일을 텍스트 파일로 변환합니다.
tcpdump -A -[PCAP-FILENAME].pcap > [TXT-FILENAME].txt
다음 명령어를 실행하여 패킷의 총개수와 순서가 잘못된 패킷을 가져옵니다.
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
기기 페이지에 액세스하여 포트 처리량을 확인합니다.
netstat
출력에 읽기/쓰기 오류가 표시되면 TCP/UDP 일괄 흐름 조정이 필요할 수 있습니다.순서가 잘못된 패킷이 있으면 추가 분석을 위해 VPN 게이트웨이에서 패킷 캡처를 수행해야 합니다. VPN 게이트웨이에서 패킷 캡처를 수행하는 방법에 대한 자세한 내용은 지원 케이스를 생성하세요.
iperf3
UDP 테스트에서 원하는 처리량을 달성한 경우 다른 곳에서 문제가 발생하는 경우이며 TCP 조정이 필요할 수 있습니다.