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에 인증하면 됩니다.

    이 페이지의 샘플 사용 방법에 대한 탭을 선택하세요.

    콘솔

    Google Cloud 콘솔을 사용하여 Google Cloud 서비스 및 API에 액세스할 때는 인증을 설정할 필요가 없습니다.

    gcloud

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

      gcloud init
    2. 기본 리전 및 영역을 설정합니다.

    REST

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

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

      gcloud init

벤치마킹을 위한 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: 프로젝트 이름입니다.

다음 단계