VM 인스턴스의 더 높은 네트워크 대역폭 벤치마킹


이 문서에서는 2개의 VM을 만들고 네트워크 성능 관측을 위해 트래픽을 앞뒤로 스트리밍하여 VM당 Tier_1 네트워킹 성능을 테스트하는 방법을 설명합니다. 이 기능을 사용하려면 Google Virtual NIC(gVNIC)를 지원하는 운영체제로 VM을 만들어야 합니다. VM당 Tier_1 네트워킹 성능에는 더 큰 VM이 필요하므로 VM을 만들기에 CPU 할당량이 충분한지 확인합니다.

시작하기 전에

  • gVNIC를 지원하는 공개 이미지를 사용하거나 프로젝트에 커스텀 이미지를 만들어야 합니다.
  • iperf 성능 테스트를 허용하기 위해 TCP:5001 포트 또는 다른 선택한 포트로 인그레스를 허용하도록 VPC 방화벽을 만들었는지 확인합니다.
  • 버전 3이 아닌 iPerf 버전 2를 사용하여 벤치마킹을 수행합니다.
  • 아직 인증을 설정하지 않았다면 설정합니다. 인증은 Google Cloud 서비스 및 API에 액세스하기 위해 ID를 확인하는 프로세스입니다. 로컬 개발 환경에서 코드 또는 샘플을 실행하려면 다음과 같이 Compute Engine에 인증하면 됩니다.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

      gcloud init
    2. Set a default region and zone.
    3. REST

      로컬 개발 환경에서 이 페이지의 REST API 샘플을 사용하려면 gcloud CLI에 제공하는 사용자 인증 정보를 사용합니다.

        Google Cloud CLI를 설치한 후 다음 명령어를 실행하여 초기화합니다.

        gcloud init

      자세한 내용은 Google Cloud 인증 문서의 REST 사용 인증을 참조하세요.

벤치마킹을 위한 VM 설정

사용 설정된 VM당 Tier_1 네트워킹 성능 및 최고 최대 전송 단위 (MTU)를 사용하여 2개의 n2-standard-64 vCPU 머신을 만듭니다. 이렇게 하면 최대 75Gbps 이그레스 대역폭(내부 IP 사용)이 VM에 부여됩니다.

gcloud

  1. 이미지를 만들려면 gcloud compute images create 명령어를 사용합니다.

      gcloud compute images create IMAGE_NAME \
       --project=PROJECT_ID \
       --source-image-family=SOURCE_IMAGE_FAMILY \
       --source-image-project=SOURCE_IMAGE_PROJECT \
       --guest-os-features=GVNIC
    

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트의 이름입니다.
    • IMAGE_NAME: 만들려는 이미지의 이름입니다.
    • SOURCE_IMAGE_FAMILY: 공개 이미지의 필수 버전입니다. 이 테스트에는 ubuntu-2004-lts를 사용합니다.
    • SOURCE_IMAGE_PROJECT: 소스 이미지가 포함된 프로젝트의 이름입니다. 이 테스트에는 ubuntu-os-cloud를 사용합니다.

    예시

    gcloud compute images create benchmark-image-test \
      --project=my-project \
      --source-image-family=ubuntu-2004-lts \
      --source-image-project=ubuntu-os-cloud \
      --guest-os-features=GVNIC
    
  2. 최대 MTU 설정을 사용하는 자동 모드 VPC 네트워크를 만듭니다.

      gcloud compute networks create NETWORK_NAME \
      --project=PROJECT_ID \
      --subnet-mode=AUTO --mtu=8896
    

    다음을 바꿉니다.

    • PROJECT_ID: 프로젝트의 이름입니다.
    • NETWORK_NAME: 네트워크 이름입니다.
  3. 동일한 인스턴스를 2개 만듭니다.

      gcloud compute instances create \
          VM_NAME_1 VM_NAME_2 \
          --project=PROJECT_ID \
          --zone=ZONE \
          --machine-type=n2-standard-64 \
          --image=projects/PROJECT_NAME/global/images/IMAGE_NAME \
          --network=NETWORK_NAME \
          --network-interface=nic-type=GVNIC \
          --network-performance-configs=total-egress-bandwidth-tier=TIER_1
    

    다음을 바꿉니다.

    • VM_NAME_1, VM_NAME_2: 만들려는 VM 인스턴스의 이름입니다.
    • PROJECT_ID: 프로젝트 이름입니다.
    • ZONE: VM의 영역입니다. 두 VM 모두 같은 영역에 있어야 합니다.
    • PROJECT_NAME/global/images/IMAGE_NAME: 프로젝트 이름과 이미지 이름입니다.
    • NETWORK_NAME: 최대 MTU 설정으로 구성한 네트워크의 이름입니다.

벤치마크 수행

두 VM이 동일한 영역 및 동일한 VPC 네트워크에 있어야 합니다. 벤치마크 중 두 VM이 VPC 네트워크 경로에 대해 양방향 테스트를 수행합니다.

MTU 설정 확인

Virtual Private Cloud(VPC) 네트워크에 VM 중 하나의 게스트 OS에서 ifconfig를 사용하여 구성된 최대 MTU 설정이 있는지 확인합니다.

  1. VM 중 하나에 연결

  2. 터미널 창에서 다음 명령어를 실행합니다.

     /sbin/ifconfig | grep mtu
    

    보고된 MTU가 8896이어야 합니다.

     ens4: flags=4163  mtu 8896
     lo: flags=73  mtu 65536
    

VM 구성 확인

가상 머신 속성을 검사하여 가상 머신의 Tier_1 네트워킹이 사용 설정되었는지 확인하세요.

gcloud

인스턴스를 보려면 gcloud compute instances describe 명령어를 사용합니다.

gcloud compute instances describe VM_NAME_1 \
    --project=PROJECT_ID \
    --zone=ZONE \
    --format="text(networkPerformanceConfig)"
gcloud compute instances describe VM_NAME_2 \
    --project=PROJECT_ID \
    --zone=ZONE \
    --format="text(networkPerformanceConfig)"

다음을 바꿉니다.

  • VM_NAME_1: 보려는 VM 인스턴스의 이름입니다.
  • VM_NAME_2: 보려는 VM 인스턴스의 이름입니다.
  • PROJECT_ID: 프로젝트 이름입니다.
  • ZONE: VM의 영역입니다. 두 VM 모두 같은 영역에 있어야 합니다.

응답에 다음이 표시되어야 합니다.

networkPerformanceConfig.totalEgressBandwidthTier: TIER_1

iPerf를 사용하여 Debian 기반 시스템에서 벤치마크를 수행합니다.

gcloud

  1. 아직 수행하지 않았으면 벤치마킹을 위한 VM 설정의 단계를 수행합니다.

  2. 두 VM이 모두 실행되면 SSH를 사용하여 VM 중 하나에 연결합니다.

    gcloud compute ssh VM_NAME_1 \
      --project=PROJECT_ID
    

    다음을 바꿉니다.

    • VM_NAME_1: 첫 번째 VM의 이름입니다.
    • PROJECT_ID: 프로젝트 이름입니다.
  3. 첫 번째 VM에서 다음 단계를 완료하세요.

    1. iperf를 설치합니다.

      sudo apt-get update && sudo apt-get install iperf
      
    2. 이 VM의 내부 IP 주소를 가져옵니다. 나중에 사용할 수 있도록 내부 IP 주소를 기록해 둡니다.

      ip a
      
    3. iPerf 서버를 시작합니다.

      iperf -s
      

      그러면 벤치마크를 수행하기 위해 연결을 수신 대기하는 서버가 시작됩니다. 테스트 기간 동안 iPerf 서버가 계속 실행되게 둡니다.

  4. 별도의 클라이언트 터미널에서 SSH를 사용하여 두 번째 VM에 연결합니다.

    gcloud compute ssh VM_NAME_2 \
       --project=PROJECT_ID
    

    다음을 바꿉니다.

    • VM_NAME_2: 두 번째 VM의 이름입니다.
    • PROJECT_ID: 프로젝트 이름입니다.
  5. 두 번째 VM에서 다음 단계를 완료하세요.

    1. iPerf를 설치합니다.

      sudo apt-get update && sudo apt-get install iperf
      
    2. iperf 테스트를 실행하고 첫 번째 VM의 IP 주소를 대상으로 지정합니다.

      iperf -t 30 -c internal_ip_of_instance_1 -P 16
      

      그러면 30초 테스트가 수행됩니다. iPerf가 다른 VM에 연결할 수 없으면 VM 또는 Google Cloud 콘솔에서 네트워크나 방화벽 설정을 조정해야 할 수 있습니다.

      다음 예시와 같은 결과가 표시됩니다. Tier_1 네트워킹이 사용 설정된 n2-standard-64의 75Gbps 이그레스 대역폭 한도를 나타내며 기본 32Gbps 이그레스 대역폭 한도를 초과합니다.

      ------------------------------------------------------------
      Client connecting to 10.128.0.10, TCP port 5001
      TCP window size: 1.59 MByte (default)
      ------------------------------------------------------------
      [ 12] local 10.128.0.11 port 57722 connected with 10.128.0.10 port 5001
      [ 11] local 10.128.0.11 port 57720 connected with 10.128.0.10 port 5001
      [ 16] local 10.128.0.11 port 57730 connected with 10.128.0.10 port 5001
      [  6] local 10.128.0.11 port 57710 connected with 10.128.0.10 port 5001
      [ 13] local 10.128.0.11 port 57724 connected with 10.128.0.10 port 5001
      [  8] local 10.128.0.11 port 57712 connected with 10.128.0.10 port 5001
      [  9] local 10.128.0.11 port 57716 connected with 10.128.0.10 port 5001
      [ 14] local 10.128.0.11 port 57726 connected with 10.128.0.10 port 5001
      [ 15] local 10.128.0.11 port 57728 connected with 10.128.0.10 port 5001
      [ 10] local 10.128.0.11 port 57718 connected with 10.128.0.10 port 5001
      [  4] local 10.128.0.11 port 57706 connected with 10.128.0.10 port 5001
      [  5] local 10.128.0.11 port 57708 connected with 10.128.0.10 port 5001
      [  3] local 10.128.0.11 port 57704 connected with 10.128.0.10 port 5001
      [ 17] local 10.128.0.11 port 57732 connected with 10.128.0.10 port 5001
      [  7] local 10.128.0.11 port 57714 connected with 10.128.0.10 port 5001
      [ 18] local 10.128.0.11 port 57734 connected with 10.128.0.10 port 5001
      [ ID] Interval       Transfer     Bandwidth
      [ 12]  0.0-30.0 sec  7.63 GBytes  2.19 Gbits/sec
      [ 11]  0.0-30.0 sec  17.7 GBytes  5.07 Gbits/sec
      [ 16]  0.0-30.0 sec  9.15 GBytes  2.62 Gbits/sec
      [  6]  0.0-30.0 sec  43.8 GBytes  12.6 Gbits/sec
      [ 13]  0.0-30.0 sec  23.6 GBytes  6.76 Gbits/sec
      [  8]  0.0-30.0 sec  13.3 GBytes  3.80 Gbits/sec
      [  9]  0.0-30.0 sec  9.29 GBytes  2.66 Gbits/sec
      [ 14]  0.0-30.0 sec  19.6 GBytes  5.62 Gbits/sec
      [ 15]  0.0-30.0 sec  12.5 GBytes  3.58 Gbits/sec
      [ 10]  0.0-30.0 sec  11.1 GBytes  3.19 Gbits/sec
      [  4]  0.0-30.0 sec  19.0 GBytes  5.43 Gbits/sec
      [  5]  0.0-30.0 sec  7.32 GBytes  2.10 Gbits/sec
      [  3]  0.0-30.0 sec  8.78 GBytes  2.51 Gbits/sec
      [ 17]  0.0-30.0 sec  17.5 GBytes  5.02 Gbits/sec
      [  7]  0.0-30.0 sec  33.4 GBytes  9.57 Gbits/sec
      [ 18]  0.0-30.0 sec  7.64 GBytes  2.19 Gbits/sec
      [SUM]  0.0-30.0 sec   261 GBytes  74.9 Gbits/sec
      

벤치마크 테스트 후 리소스 삭제

이미지 및 추가 VM에 대한 요금이 청구되지 않도록 벤치마크 테스트 중에 만든 리소스를 삭제합니다.

gcloud

  1. gcloud compute instances delete 명령어를 사용하여 벤치마크 테스트용으로 만든 인스턴스를 삭제합니다.

    gcloud compute instances delete \
      VM_NAME_1 VM_NAME_2 \
       --project=PROJECT_ID \
       --zone=ZONE
    

    다음을 바꿉니다.

    • VM_NAME_1, VM_NAME_2: 삭제하려는 두 VM 인스턴스의 이름입니다.
    • PROJECT_ID: 프로젝트 이름입니다.
    • ZONE: VM의 영역입니다. 두 VM 모두 같은 영역에 있어야 합니다.
  2. gcloud compute networks delete 명령어를 사용하여 벤치마크 테스트용으로 만든 네트워크를 삭제합니다.

    gcloud compute networks delete NETWORK_NAME  \
       --project=PROJECT_ID
    

    다음을 바꿉니다.

    • NETWORK_NAME: 삭제하려는 네트워크의 이름입니다.
    • PROJECT_ID: 프로젝트 이름입니다.
  3. gcloud compute images delete 명령어를 사용하여 벤치마크 테스트용으로 만든 이미지를 삭제합니다.

     gcloud compute images delete IMAGE_NAME  \
        --project=PROJECT_ID
    

    다음을 바꿉니다.

    • IMAGE_NAME: 삭제할 이미지의 이름입니다.
    • PROJECT_ID: 프로젝트 이름입니다.

다음 단계