네트워크 대역폭


Google Cloud는 가상 네트워크 인터페이스(vNIC) 또는 IP 주소당 대역폭이 아니라 가상 머신(VM) 인스턴스당 대역폭을 고려합니다. VM의 머신 유형은 가능한 최대 이그레스 속도를 정의하지만 이 가능한 최대 이그레스 속도는 특정 상황에서만 달성할 수 있습니다.

이 페이지에서는 배포를 계획할 때 유용한 기대치를 간략히 설명합니다. 이 페이지는 다음 두 가지 측정기준을 사용하여 대역폭을 분류합니다.

  • 이그레스 또는 인그레스: 이 페이지에서 사용되는 이그레스 및 인그레스는 항상 Google Cloud VM의 관점에서 본 방향입니다.
    • Google Cloud VM에서 전송된 패킷은 이그레스(아웃바운드) 트래픽을 구성합니다.
    • Google Cloud VM으로 전송된 패킷은 인그레스(인바운드) 트래픽을 구성합니다.
  • 패킷 라우팅 방법: 패킷은 다음 홉이 VPC 네트워크 내에 있는 경로 또는 VPC 네트워크 외부의 경로를 사용하는 전송 VM에서 라우팅되거나 수신 VM으로 라우팅될 수 있습니다.

추가 가상 네트워크 인터페이스(vNIC)나 vNIC당 추가 IP 주소는 VM의 인그레스 또는 이그레스 대역폭을 증가시키지 않습니다. 예를 들어 22개의 vCPU가 있는 C3 VM은 총 이그레스 대역폭 23Gbps로 제한됩니다. 2개의 vNIC로 C3 VM을 구성하는 경우 VM은 여전히 vNIC당 23Gbps 대역폭이 아니라 23Gbps 총 이그레스 대역폭으로 제한됩니다.

이 페이지의 모든 정보는 Compute Engine VM 및 Compute Engine VM을 사용하는 제품에 적용됩니다. 예를 들어 Google Kubernetes Engine 노드는 Compute Engine VM입니다.

대역폭 요약

다음 표에서는 패킷이 VM에서 전송(이그레스)되는지 또는 VM에서 수신(인그레스)되었는지와 패킷 라우팅 방법에 따른 대역폭 기대치를 보여줍니다.

이그레스

대역폭 기대치
VPC 네트워크 내부 라우팅
  • 기본적으로 전송 VM의 머신 유형과 Tier_1 네트워킹의 사용 설정 여부에 따라 VM 당 최대 이그레스 대역폭으로 정의됩니다.

    • Tier_1 네트워킹을 사용하는 N2, N2D, C2, C2D VM에서는 이그레스 대역폭 한도가 최대 100Gbps까지 지원됩니다.
    • H3 VM은 VM 간 이그레스 대역폭 한도를 최대 200Gbps까지 지원합니다.
    • A2 및 G2 VM은 이그레스 대역폭 한도를 최대 100Gbps까지 지원합니다.
    • A3 VM은 이그레스 대역폭 한도를 최대 1,000Gbps까지 지원합니다.
    • C3, C3D, Z3 VM은 Tier_1 네트워킹에서 최대 200Gbps의 이그레스 대역폭 한도를 지원합니다.
  • 기타 요인, 정의, 시나리오는 VPC 네트워크 내에서 라우팅할 수 있는 대상으로 이그레스를 참조하세요.
VPC 네트워크 외부 라우팅
  • 기본적으로 전송 VM의 머신 유형과 Tier_1 네트워킹의 사용 설정 여부에 따라 VM 당 최대 이그레스 대역폭으로 정의됩니다. H3 VM을 제외하고, 전송 VM의 VPC 네트워크 외부에 있는 대상으로 가능한 최대 이그레스는 다음을 초과할 수 없습니다.

    • Tier_1 네트워킹이 사용 설정되지 않은 경우 총 7Gbps
    • Tier_1 네트워킹이 사용 설정된 경우 총 25Gbps
    • 흐름당 3Gbps
  • 기타 요인, 정의, 주의사항은 VPC 네트워크 외부의 대상으로 이그레스를 참조하세요.

인그레스

대역폭 기대치
VPC 네트워크 내부 라우팅
  • 일반적으로 인그레스 속도는 머신 유형의 이그레스 속도와 비슷합니다.
  • VM 크기, 서버 NIC의 용량, 동일한 호스트 하드웨어에서 실행되는 다른 게스트 VM으로 들어오는 트래픽, 게스트 OS 네트워크 구성, VM에서 수행하는 디스크 읽기 수는 모두 인그레스 속도에 영향을 줄 수 있습니다.
  • Google Cloud는 VPC 네트워크 내 인그레스 속도에 추가 제한을 적용하지 않습니다.
  • 기타 요인, 정의, 시나리오는 VPC 네트워크 내에서 라우팅할 수 있는 대상으로 인그레스를 참조하세요.
VPC 네트워크 외부 라우팅
  • Google Cloud는 VPC 네트워크 외부로 라우팅되는 인그레스 트래픽을 제한하여 각 VM을 보호합니다. 다음 중 먼저 도달하는 속도가 한도입니다.

    • 1,800,000pps(초당 패킷)
    • 30Gbps
  • A3와 같은 여러 물리적 NIC를 지원하는 머신 시리즈의 경우 다음 중 먼저 도달하는 속도가 한도입니다.
    • 물리적 NIC당 1,800,000pps(초당 패킷)
    • 물리적 NIC당 30Gbps
  • 기타 요인, 정의, 시나리오는 VPC 네트워크 외부의 대상으로 인그레스를 참조하세요.

이그레스 대역폭

Google Cloud는 패킷을 전송하는 VM의 머신 유형과 VPC 네트워크 내의 경로 또는 VPC 네트워크 외부 경로를 사용하여 패킷의 대상에 액세스할 수 있는지 여부에 따라 VM당 최대 이그레스 속도를 사용하여 아웃바운드(이그레스) 대역폭을 제한합니다. 아웃바운드 대역폭에는 모든 VM의 NIC에서 내보내는 패킷과 VM에 연결된 모든 영구 디스크로 전송되는 데이터가 포함됩니다.

VM당 최대 이그레스 대역폭

VM당 최대 이그레스 대역폭은 일반적으로 vCPU당 2Gbps이지만 머신 계열에 따라 몇 가지 차이점과 예외가 있습니다. 다음 표에서는 VM당 Tier_1 네트워킹 성능이 아닌 표준 네트워킹 등급에 대해서만 VPC 네트워크 내에서 라우팅되는 트래픽의 이그레스 대역폭 최대 한도 범위를 보여줍니다.

머신 계열 Tier_1 네트워킹이 없는 경우 가장 낮은 VM당 최대 이그레스 한도 Tier_1 네트워킹이 없는 경우 가장 높은 VM당 최대 이그레스 한도
E2 1Gbps 16Gbps
C3 23Gbps 100Gbps
C3D 20Gbps 100Gbps
T2D 10Gbps 32Gbps
N2,C2, N2D 및 C2D 10Gbps 32Gbps
N4 10Gbps 50Gbps
H3 해당 사항 없음 200Gbps
Z3 23Gbps 100Gbps
N1(vCPU 1개가 있는 VM 제외) 10Gbps Intel Skylake CPU 플랫폼에서 32Gbps
Intel Skylake 이전 CPU 플랫폼에서 16Gbps
1개의 vCPU, f1-micro, g1-small이 있는 N1 머신 유형 2Gbps 2Gbps
A3, A2, G2 해당 사항 없음 GPU 유형 기준

각 머신 계열 페이지에 나열된 모든 머신 유형의 VM당 최대 이그레스 대역폭을 확인할 수 있습니다.

VM당 최대 이그레스 대역폭은 보장되지 않습니다. 실제 이그레스 대역폭은 다음과 같은 일부 목록에 따라 줄어들 수 있습니다.

  • 게스트 이더넷 드라이버: gVNIC가 VirtIO 네트워크 인터페이스보다 성능이 우수합니다.
  • 패킷 크기
  • 프로토콜 오버헤드
  • 흐름 수
  • 체크섬 오프로드 및 TCP 세분화 오프로드(TSO)와 같은 VM 게스트 OS의 이더넷 드라이버 설정
  • 네트워크 정체
  • 영구 디스크가 다른 네트워크 이그레스 트래픽과 경합하는 경우 최대 네트워크 대역폭의 60%는 Persistent Disk 쓰기에 제공되고, 나머지 40%는 다른 네트워크 이그레스 트래픽을 위해 남겨집니다. 자세한 내용은 Persistent Disk 문서의 디스크 성능에 영향을 미치는 요소를 참조하세요.

VM당 최대 이그레스 대역폭의 가능한 최댓값을 얻으려면 다음 안내를 따르세요.

  • 더 큰 범용 및 컴퓨팅 최적화 머신 유형을 사용하여 VM당 Tier_1 네트워킹 성능을 사용 설정합니다.
  • 네트워크 토폴로지에서 지원하는 최대 VPC 네트워크 최대 전송 단위(MTU)를 사용합니다. MTU가 크면 패킷 헤더 오버헤드를 줄이고 페이로드 데이터 처리량을 늘릴 수 있습니다.

VPC 네트워크 내에서 라우팅할 수 있는 대상으로 이그레스

전송 VM과 VPC 네트워크 내의 경로를 통해 액세스할 수 있는 대상 IP 주소의 관점에서 Google Cloud는 다음 규칙을 사용하여 아웃바운드 트래픽을 제한합니다.

  • VM당 최대 이그레스 대역폭: VM당 최대 이그레스 대역폭 섹션에 설명된 VM당 최대 이그레스 대역폭입니다.
  • 프로젝트당 리전 간 이그레스 대역폭: 전송 VM과 내부 대상 또는 다음 홉이 다른 리전에 있는 경우 Google Cloud는 최대 리전 간 이그레스 대역폭 한도를 적용합니다. 대부분의 고객은 이 한도에 도달할 가능성이 낮습니다. 이 한도에 대한 질문이 있으면 지원 케이스를 제출하세요.
  • Cloud VPN 및 Cloud Interconnect 한도: VM에서 다음 홉 Cloud VPN 터널 또는 Cloud Interconnect VLAN 연결로 라우팅할 수 있는 내부 IP 주소 대상으로 트래픽을 전송하는 경우 이그레스 대역폭이 다음에 의해 제한됩니다.

VPC 네트워크 내에서 라우팅할 수 있는 대상에는 다음 대상이 모두 포함되며, 각 대상은 다음 홉이 기본 인터넷 게이트웨이가 아닌 경로를 통해 전송 VM의 관점에서 액세스할 수 있습니다.

  • 비공개 IPv4 주소 범위 및 다음 대상 리소스에서 사용하는 비공개로 사용되는 공개 IPv4 주소 범위를 포함한 서브넷 기본 IPv4 및 서브넷 보조 IPv4 주소 범위의 리전 내부 IPv4 주소:
    • 수신 VM 네트워크 인터페이스(vNIC)의 기본 내부 IPv4 주소 (전송 VM이 다른 VM의 vNIC 외부 IPv4 주소에 연결하는 경우 패킷이 다음 홉 기본 인터넷 게이트웨이를 사용하여 라우팅되므로 VPC 네트워크 외부의 대상으로 이그레스가 적용됩니다.)
    • 수신 VM vNIC의 별칭 IP 범위에 있는 내부 IPv4 주소
    • 프로토콜 전달 또는 내부 패스 스루 네트워크 부하 분산기에 대한 내부 전달 규칙의 내부 IPv4 주소
  • 다음 대상 리소스의 전역 내부 IPv4 주소:
  • 다음 대상 리소스에서 사용하는 내부 IPv6 서브넷 주소 범위:
    • VM의 vNIC를 수신하는 이중 스택에 할당된 /96 IPv6 주소 범위의 IPv6 주소
    • 프로토콜 전달 또는 내부 패스 스루 네트워크 부하 분산기에 대한 내부 전달 규칙의 /96 IPv6 주소 범위의 IPv6 주소
  • 패킷이 서브넷 경로 또는 VPC 네트워크 내의 피어링 서브넷 경로를 사용하여 라우팅되거나 기본 인터넷 게이트웨이 다음 홉을 사용하지 않는 VPC 네트워크 내의 커스텀 경로에 의해 라우팅될 때 이러한 대상 리소스에서 사용되는 외부 IPv6 서브넷 주소 범위:
    • VM의 vNIC를 수신하는 이중 스택에 할당된 /96 IPv6 주소 범위의 IPv6 주소
    • 프로토콜 전달 또는 외부 패스 스루 네트워크 부하 분산기에 대한 외부 전달 규칙의 /96 IPv6 주소 범위의 IPv6 주소
  • 다음 VPC 네트워크 경로를 사용하여 액세스할 수 있는 다른 대상:

다음 목록은 가능한 최대 대역폭부터 가장 낮은 대역폭 순으로 전송 VM에서 내부 대상으로의 트래픽을 나열합니다.

VPC 네트워크 외부의 대상으로 이그레스

전송 VM과 VPC 네트워크 외부 대상 IP 주소의 관점에서 Google Cloud는 다음 중 먼저 도달하는 속도로 아웃바운드 트래픽을 제한합니다.

  • VM당 이그레스 대역폭: VM에서 VPC 네트워크 외부의 대상에 대한 모든 연결의 최대 대역폭은 VM당 최대 이그레스 대역폭 및 다음 속도 중 작은 값입니다.

    • 25Gbps(Tier_1 네트워킹이 사용 설정된 경우)
    • 7Gbps(Tier_1 네트워킹이 사용 설정되지 않은 경우)
    • H3 VM의 경우 1Gbps
    • A3와 같은 여러 물리적 NIC를 지원하는 머신 시리즈의 경우 물리적 NIC당 7Gbps

    예를 들어 n2-standard-16 인스턴스의 VM당 최대 이그레스 대역폭은 32Gbps이지만 n2-standard-16 인스턴스에서 외부 대상으로의 VM당 이그레스 대역폭은 Tier_1 네트워킹 사용 설정 여부에 따라 25Gbps 또는 7Gbps입니다.

  • 흐름당 최대 이그레스 속도: VM에서 VPC 네트워크 외부의 대상으로의 고유한 5-튜플 연결의 최대 대역폭은 3Gbps입니다.(예외: H3의 경우 1Gbps)

  • 프로젝트당 인터넷 이그레스 대역폭: 프로젝트의 리전에 있는 VM에서 VPC 네트워크 외부의 대상으로의 모든 연결의 최대 대역폭은 프로젝트의 인터넷 이그레스 대역폭 할당량에 의해 정의됩니다.

VPC 네트워크 외부의 대상에는 다음 대상이 모두 포함되며, 각 대상은 다음 홉이 기본 인터넷 게이트웨이 전송 VM의 VPC 네트워크에서 경로를 통해 액세스할 수 있습니다.

  • 외부 프록시 네트워크 부하 분산기 및 외부 애플리케이션 부하 분산기를 위한 전역 외부 IPv4 및 IPv6 주소
  • VM vNIC 외부 IPv4 주소, 외부 프로토콜 전달을 위한 외부 IPv4 주소, 외부 패스 스루 네트워크 부하 분산기, Cloud NAT 게이트웨이에 대한 응답 패킷 등 Google Cloud 리소스의 리전 외부 IPv4 주소
  • 이중 스택 VM 외부 IPv6 주소, 외부 프로토콜 전달, 외부 패스 스루 네트워크 부하 분산기에서 사용하는 외부 IPv6 주소 범위가 있는 이중 스택 서브넷의 리전 외부 IPv6 주소(서브넷이 피어링되지 않은 별도의 VPC 네트워크에 있고 다음 홉이 기본 인터넷 게이트웨이 전송 VM의 VPC 네트워크에 있는 경로를 통해 대상 IPv6 주소 범위에 액세스할 수 있는 경우) 외부 IPv6 주소 범위가 있는 이중 스택 서브넷이 동일한 VPC 네트워크 또는 피어링된 VPC 네트워크에 있는 경우 대신 VPC 네트워크 내에서 라우팅할 수 있는 대상으로 이그레스를 참조하세요.
  • 전송 VM의 VPC 네트워크에서 정적 경로를 사용하여 액세스할 수 있는 기타 외부 대상(단, 경로의 다음 홉이 기본 인터넷 게이트웨이인 경우)

어떤 Google Cloud 리소스가 어떤 유형의 외부 IP 주소를 사용하는지에 대한 자세한 내용은 외부 IP 주소를 참조하세요.

인그레스 대역폭

Google Cloud는 수신 패킷이 수신 VM으로 라우팅되는 방식에 따라 인바운드(인그레스) 대역폭을 처리합니다.

VPC 네트워크 내에서 라우팅할 수 있는 대상으로 인그레스

수신 VM은 머신 유형, 운영체제, 기타 네트워크 조건에서 허용하는 만큼 수신 패킷을 처리할 수 있습니다. 수신 패킷이 VPC 네트워크 내의 경로를 사용하여 전달되는 경우 Google Cloud는 VM에 전달되는 수신 패킷에 의도적인 대역폭 제한을 구현하지 않습니다.

  • 수신 VM의 VPC 네트워크에 있는 서브넷 경로
  • 피어링된 VPC 네트워크의 피어링 서브넷 경로
  • 다음 홉이 Cloud VPN 터널, Cloud Interconnect(VLAN) 연결 또는 수신 VM의 VPC 네트워크에 있는 라우터 어플라이언스 VM인 다른 네트워크의 경로

VPC 네트워크 내에서 라우팅되는 패킷의 대상은 다음과 같습니다.

  • 수신 VM 네트워크 인터페이스(vNIC)의 기본 내부 IPv4 주소. 기본 내부 IPv4 주소는 서브넷의 기본 IPv4 주소 범위에서 가져오는 리전 내부 IPv4 주소입니다.
  • 수신 VM vNIC의 별칭 IP 범위에 있는 내부 IPv4 주소. 별칭 IP 범위를 서브넷의 기본 IPv4 주소 범위 또는 보조 IPv4 주소 범위 중 하나에서 가져올 수 있습니다.
  • VM의 vNIC를 수신하는 이중 스택에 할당된 /96 IPv6 주소 범위의 IPv6 주소. VM IPv6 범위를 다음과 같은 서브넷 IPv6 범위에서 가져올 수 있습니다.
  • 수신 VM 또는 내부 패스 스루 네트워크 부하 분산기로 내부 프로토콜 전달에 사용되는 전달 규칙의 내부 IPv4 주소입니다. 여기서 수신 VM은 부하 분산기의 백엔드입니다. 내부 전달 규칙 IPv4 주소는 서브넷의 기본 IPv4 주소 범위에서 가져옵니다.
  • 수신 VM 또는 내부 패스 스루 네트워크 부하 분산기로 내부 프로토콜 전달에 사용되는 전달 규칙의 /96 IPv6 범위의 내부 IPv6 주소입니다. 여기서 수신 VM은 부하 분산기의 백엔드입니다. 내부 전달 규칙 IPv6 주소는 서브넷의 내부 IPv6 주소 범위에서 가져옵니다.
  • 수신 VM 또는 외부 패스 스루 네트워크 부하 분산기로 외부 프로토콜 전달에 사용되는 전달 규칙의 /96 IPv6 범위의 외부 IPv6 주소입니다. 여기서 수신 VM은 수신된 패킷이 이 섹션의 앞부분에 나열된 경로 중 하나를 사용하여 VPC 네트워크 내에서 라우팅되는 경우 부하 분산기의 백엔드입니다. 외부 전달 규칙 IPv6 주소는 서브넷의 외부 IPv6 주소 범위에서 가져옵니다.
  • 수신 VM을 다음 홉 VM(next-hop-instance 또는 next-hop-address)으로 사용하는 커스텀 정적 경로의 대상 범위에 속한 IP 주소
  • 수신 VM이 내부 패스 스루 네트워크 부하 분산기의 백엔드인 경우 이 부하 분산기(next-hop-ilb) 다음 홉을 사용하는 커스텀 정적 경로의 대상 범위에 속한 IP 주소

VPC 네트워크 외부의 대상으로 인그레스

Google Cloud는 VPC 네트워크 외부의 경로를 사용해서 수신 VM에 전달되는 들어오는 패킷에 대해 다음 대역폭 제한을 구현합니다. 부하 분산이 포함된 경우 각 수신 VM에 개별적으로 대역폭 제한이 적용됩니다.

여러 물리적 NIC를 지원하지 않는 머신 계열의 경우 적용 가능한 인바운드 대역폭 제한이 총체적으로 모든 가상 NIC에 적용됩니다. 다음 중 먼저 도달하는 속도가 한도입니다.

  • 초당 패킷 1,800,000개
  • 30Gbps

A3와 같이 여러 물리적 NIC를 지원하는 머신 계열의 경우 적용 가능한 인바운드 대역폭 제한이 각각의 물리적 NIC에 개별적으로 적용됩니다. 다음 중 먼저 도달하는 속도가 한도입니다.

  • 물리적 NIC당 1,800,000pps(초당 패킷)
  • 물리적 NIC당 30Gbps

VPC 네트워크 외부의 경로를 사용하여 라우팅되는 패킷의 대상은 다음과 같습니다.

  • 수신 VM의 네트워크 인터페이스(NIC) 중 하나에서 일대일 NAT 액세스 구성에 할당된 외부 IPv4 주소입니다.
  • 수신 패킷이 수신 VM의 VPC 네트워크 외부에 있는 경로를 사용하여 라우팅될 때 이중 스택 수신 VM의 vNIC에 할당된 /96 IPv6 주소 범위의 외부 IPv6 주소입니다.
  • 수신 VM 또는 외부 패스 스루 네트워크 부하 분산기로 외부 프로토콜 전달에 사용되는 전달 규칙의 외부 IPv4 주소입니다. 여기서 수신 VM은 부하 분산기의 백엔드입니다.
  • 수신된 패킷이 VPC 네트워크 외부의 경로를 사용하여 라우팅될 때 수신 VM 또는 외부 패스 스루 네트워크 부하 분산기로 외부 프로토콜 전달에 사용되는 전달 규칙의 /96 IPv6 범위의 외부 IPv6 주소입니다. 여기서 수신 VM은 부하 분산기의 백엔드입니다.
  • Cloud NAT에서 처리된 설정된 인바운드 응답

점보 프레임

점보 프레임을 수신하고 전송하려면 VM에서 사용하는 VPC 네트워크를 구성하고 최대 전송 단위(MTU)를 더 큰 값(최대 8896)으로 설정합니다.

MTU 값이 높을수록 패킷 크기가 증가하고 패킷 헤더 오버헤드가 감소하여 페이로드 데이터 처리량이 증가합니다.

gVNIC 드라이버에서 점보 프레임을 사용하려면 버전 1.3 이상의 드라이버를 사용해야 합니다. 일부 Google Cloud 공개 이미지에는 이 드라이버 버전이 포함되어 있지 않습니다. 점보 프레임의 운영체제 지원에 대한 자세한 내용은 운영체제 세부정보 페이지의 네트워킹 기능 탭을 참조하세요. 점보 프레임에 대한 전체 지원을 나타내는 이미지 버전에는 게스트 OS가 gve 드라이버 버전을 1.0.0으로 표시하더라도 업데이트된 gVNIC 드라이버가 포함됩니다.

점보 프레임을 완전히 지원하지 않는 OS 이미지를 사용할 경우에는 v1.3.0 이상의 gVNIC 드라이버를 수동으로 설치할 수 있습니다. 추가 기능 및 버그 수정을 활용하기 위해서는 Latest로 표시된 gVNIC 드라이버 버전을 설치하는 것이 좋습니다. GitHub에서 gVNIC 드라이버를 다운로드할 수 있습니다.

게스트 OS에서 gVNIC 드라이버 버전을 수동으로 업데이트하려면 지원되지 않는 운영체제에서 사용을 참조하세요.

수신 및 전송 큐

각 VM vNIC에는 네트워크에서 패킷을 처리하는 여러 수신 및 전송 큐가 할당됩니다.

  • 수신 큐(RX): 패킷을 수신할 큐입니다. vNIC가 네트워크에서 패킷을 수신하면 vNIC는 큐에서 수신 패킷의 설명자를 선택하고, 이를 처리하고, 인터럽트를 사용하여 vCPU 코어에 연결된 패킷 큐를 통해 게스트 OS로 패킷을 전달합니다. RX 큐가 가득차고 패킷을 배치할 수 있는 버퍼가 없으면 패킷이 삭제됩니다. 이러한 현상은 일반적으로 애플리케이션에서 선택한 패킷 큐에도 연결된 vCPU 코어를 초과 활용하는 경우에 발생할 수 있습니다.
  • 전송 큐(TX): 패킷을 전송하는 큐입니다. 게스트 OS가 패킷을 전송하면 설명자가 할당되어 TX 큐에 배치됩니다. 그러면 vNIC에서 설명자를 처리하고 패킷을 전송합니다.

기본 큐 할당

명시적으로 NIC에 큐 수를 할당하지 않는 한, Google Cloud가 vNIC당 고정된 수의 RX 및 TX 큐를 할당하는 데 사용하는 알고리즘을 다음 방법으로 모델링할 수 있습니다.

  1. 네트워크 인터페이스 유형에 따라 다음 방법 중 하나를 사용합니다.

    • VirtIO: vCPU 수를 NIC 수로 나누고 나머지를 삭제 — [[number of vCPUs/number of NICs]]
    • gVNIC: vCPU 수를 NIC 수로 나눈 후 결과를 2로 나누고 나머지([number of vCPUs/number of NICs/2])를 삭제합니다.

    이 계산은 항상 분수가 아닌 정수로 표시됩니다.

  2. 계산된 숫자가 1보다 작으면 각 vNIC에 큐 하나를 대신 할당합니다.

  3. 계산된 숫자가 vNIC당 최대 큐 수보다 큰지 확인합니다. vNIC당 최대 큐 수는 드라이버 유형에 따라 달라집니다.

    • virtIO 또는 커스텀 드라이버를 사용해서 vNIC당 최대 큐 수는 32입니다. 계산된 숫자가 32보다 크면 계산된 수를 무시하고 대신 각 vNIC에 32개의 큐를 할당합니다.
    • gVNIC를 사용하는 경우 vNIC당 최대 큐 수는 16입니다. 계산된 숫자가 16보다 크면 계산된 수를 무시하고 대신 각 vNIC에 16개의 큐를 할당합니다.

다음 예시에서는 기본 큐 수를 계산하는 방법을 보여줍니다.

  • VM이 VirtIO를 사용하고 vCPU 16개와 NIC 4개가 있으면 계산된 숫자는 [16/4] = 4입니다. Google Cloud는 각 vNIC에 4개의 큐를 할당합니다.

  • VM이 gVNIC를 사용하고 vCPU 128개와 2개의 NIC가 있으면 경우 계산된 숫자는 [128/2/2] = 32입니다. Google Cloud는 각 vNIC에 가능한 vNIC당 최대 큐 수를 할당합니다. Google Cloud는 vNIC당 큐 16개를 할당합니다.

Linux 시스템에서는 ethtool을 사용하여 Google Cloud가 vNIC당 할당하는 큐 수보다 적은 큐로 vNIC를 구성할 수 있습니다.

커스텀 큐 할당

기본 큐 할당 대신, Compute Engine API를 사용하여 새 VM을 만들 때 각 vNIC에 커스텀 큐 수(RX 및 TX 모두 합계)를 각 vNIC에 할당할 수 있습니다.

지정하는 커스텀 큐 수는 다음 규칙을 준수해야 합니다.

  • vNIC당 할당할 수 있는 최소 큐 수는 1개입니다.

  • 각 vNIC에 할당할 수 있는 최대 큐 수는 드라이버 유형에 따라 vCPU 수 또는 vNIC당 최대 큐 수 중 더 작은 값입니다.

    • virtIO 또는 커스텀 드라이버를 사용할 때 최대 큐 수는 32입니다.
    • gVNIC를 사용할 때 최대 큐 수는 16입니다.
  • 커스텀 큐 수를 VM의 모든 NIC에 할당하는 경우 할당한 큐 수의 합계가 VM 인스턴스에 할당된 vCPU 수보다 적거나 같아야 합니다.

NIC의 커스텀 큐 수를 초과 구독할 수 있습니다. 즉, VM의 모든 vCPU 수보다 큰 VM의 모든 NIC에 할당된 큐 수의 합계가 있을 수 있습니다. 커스텀 큐 수를 초과 구독하려면 다음 조건을 충족해야 합니다.

  • VM에 구성된 모든 NIC의 vNIC 유형으로 gVNIC를 사용
  • VM에 N2, N2D, C2, C2D 머신 시리즈의 머신 유형 사용
  • VM에 등급 1 네트워킹을 사용 설정
  • VM에 구성된 모든 NIC에 대해 커스텀 큐 수 지정

큐 초과 구독을 사용할 경우 VM의 최대 큐 수는 NIC 수의 16배입니다. 따라서 30개의 vCPU가 있는 VM에 NIC 6개가 구성되어 있으면 VM에 최대 96개(16 * 6)의 커스텀 큐를 구성할 수 있습니다.

예시

  • VM에 vCPU 8개와 NIC 3개가 있으면 VM의 최대 큐 수는 vCPU의 개수 또는 8개입니다. nic0에 큐 1개, nic1에 큐 4개, nic2에 큐 3개를 할당할 수 있습니다. 이 예시에서는 이후에 4개의 큐를 nic2에 할당할 수 없습니다. 하지만 할당된 큐의 합계가 vCPU 수(8개)를 초과할 수 없으므로 다른 두 vNIC 큐 할당은 유지됩니다.

  • VM에 vCPU가 96개 있고 NIC가 2개 있으면 virtIO 드라이버를 사용할 경우 두 NIC에 각각 최대 32개 큐를 할당하거나 gVNIC 드라이버를 사용할 경우 각각 최대 16개 큐를 할당할 수 있습니다. 이 예시에서 할당된 큐의 합계는 항상 vCPU 수보다 작습니다.

또한 일부 NIC에 대해서만 커스텀 큐 수를 할당하여 Google Cloud가 나머지 NIC에 큐를 할당하도록 할 수도 있습니다. vNIC당 할당 가능한 큐 수에는 여전히 앞에서 언급한 규칙이 적용됩니다. 구성의 실행 가능성을 모델링하고, 구성이 가능한 경우 Google Cloud가 다음 프로세스를 사용하여 나머지 NIC에 할당하는 큐 수를 모델링할 수 있습니다.

  1. 커스텀 큐 할당을 사용하여 NIC에 대해 큐 합계를 계산합니다. vCPU가 20개 있고 NIC가 6개 있는 예시 VM의 경우 nic0에 5개 큐를 할당하고, nic1에 6개 큐를 할당하고, nic2에 4개 큐를 할당한다고 가정하고, Google Cloud가 nic3, nic4, nic5에 대해 큐를 할당하도록 설정합니다. 이 예시에서 커스텀 할당 큐의 합계는 5+6+4 = 15입니다.

  2. vCPU 수에서 커스텀 할당 큐의 합계를 .뺍니다. 뺀 값이 Google Cloud가 큐를 할당해야 하는 나머지 NIC의 수와 같거나 적지 않으면 Google Cloud가 오류를 반환합니다. vCPU 20개와 커스텀 할당 큐의 합계가 15인 예시 VM으로 계속 진행하면 Google Cloud에는 남은 NIC(nic3, nic4, nic5)에 할당할 큐가 20-15 = 5개 남습니다.

  3. 이전 단계의 차이를 남은 NIC 수로 나누고, 나머지에 해당하는 —⌊(number of vCPUs - sum of assigned queues)/(number of remaining NICs)⌋를 버립니다. 이 계산은 항상 이전 단계에서 설명한 제약조건으로 인해 최소한 1 이상에 해당하는 정수(분수가 아님) 결과가 발생합니다. Google Cloud는 계산된 숫자가 vNIC당 최대 큐 수보다 크지 않은 한 남은 각 NIC에 계산된 숫자와 일치하는 큐 수를 할당합니다. vNIC당 최대 큐 수는 드라이버 유형에 따라 달라집니다.

    • virtIO 또는 커스텀 드라이버를 사용하여 각 나머지 vNIC의 계산된 큐 수가 32보다 크면 Google Cloud는 각각의 나머지 vNIC에 32 큐를 할당합니다.
    • gVNIC를 사용하는 경우 남은 각 vNIC에 대해 계산된 큐 수가 16보다 크면 Google Cloud는 남은 각 vNIC에 16개의 큐를 할당합니다.

커스텀 큐 수 구성

하나 이상의 vNIC에 커스텀 큐 수를 사용하는 VM을 만들려면 다음 단계를 완료하세요.

gcloud

  1. 구성하려는 각 vNIC 인터페이스에 대해 서브넷이 있는 VPC 네트워크가 아직 없으면 이를 만듭니다.
  2. gcloud compute instances create 명령어를 사용하여 VM을 만듭니다. VM에 구성할 각 vNIC에 대해 --network-interface 플래그를 반복하고 queue-count 옵션을 포함합니다.
    gcloud compute instances create VM_NAME \
        --zone=ZONE \
        --machine-type=MACHINE_TYPE \
        --network-performance-configs=total-egress-bandwidth-tier=TIER_1  \
        --network-interface=network=NETWORK_NAME_1,subnet=SUBNET_1,nic-type=GVNIC,queue-count=QUEUE_SIZE_1 \
        --network-interface=network=NETWORK_NAME_2,subnet=SUBNET_2,nic-type=GVNIC,queue-count=QUEUE_SIZE_2

다음을 바꿉니다.

  • VM_NAME: 새 VM의 이름
  • ZONE: VM을 만들 영역
  • MACHINE_TYPE: 새 VM의 머신 유형. 지정하는 머신 유형이 gVNIC 및 Tier_1 네트워킹을 지원해야 합니다.
  • NETWORK_NAME: 이전에 만든 네트워크의 이름
  • SUBNET_*: 이전에 만든 서브넷 중 하나의 이름
  • QUEUE_SIZE: 커스텀 큐 할당에 설명된 규칙이 적용되는 vNIC의 큐 수

Terraform

  1. 구성하려는 각 vNIC 인터페이스에 대해 서브넷이 있는 VPC 네트워크가 아직 없으면 이를 만듭니다.
  2. google_compute_instance 리소스를 사용하여 vNIC에 대한 특정 큐 수가 있는 VM을 만듭니다. VM에 구성하려는 각 vNIC에 대해 --network-interface 매개변수를 반복하고 queue-count 매개변수를 포함합니다.

    # Queue oversubscription instance
    resource "google_compute_instance" "VM_NAME" {
    project      = "PROJECT_ID"
    boot_disk {
      auto_delete = true
      device_name = "DEVICE_NAME"
      initialize_params {
         image="IMAGE_NAME"
         size = DISK_SIZE
         type = "DISK_TYPE"
      }
    }
    machine_type = "MACHINE_TYPE"
    name         = "VM_NAME"
    zone = "ZONE"
    
    network_performance_config {
        total_egress_bandwidth_tier = "TIER_1"
    }
    
    network_interface {
        nic_type = "GVNIC"
        queue_count = QUEUE_COUNT_1
        subnetwork_project = "PROJECT_ID"
        subnetwork = "SUBNET_1"
     }
    
    network_interface {
        nic_type = "GVNIC"
        queue_count = QUEUE_COUNT_2
        subnetwork_project = "PROJECT_ID"
        subnetwork = "SUBNET_2"
    }
    
    network_interface {
        nic_type = "GVNIC"
        queue_count = QUEUE_COUNT_3
        subnetwork_project = "PROJECT_ID"
        subnetwork = "SUBNET_3""
    }
    
    network_interface {
        nic_type = "GVNIC"
        queue_count = QUEUE_COUNT_4
        subnetwork_project = "PROJECT_ID"
        subnetwork = "SUBNET_4""
    }
    
    }
    
    

다음을 바꿉니다.

  • VM_NAME: 새 VM의 이름
  • PROJECT_ID: VM을 만들 프로젝트의 ID 공유 VPC 네트워크를 사용하지 않는 한, 지정하는 프로젝트는 모든 서브넷 및 네트워크가 만들어진 프로젝트와 동일해야 합니다.
  • DEVICE_NAME: 게스트 OS의 부팅 디스크와 연결할 이름
  • IMAGE_NAME: 이미지의 이름(예: "projects/debian-cloud/global/images/debian-11-bullseye-v20231010")
  • DISK_SIZE: 부팅 디스크 크기(GiB)
  • DISK_TYPE: 부팅 디스크에 사용할 디스크 유형(예: pd-standard)
  • MACHINE_TYPE: 새 VM의 머신 유형. 지정하는 머신 유형이 gVNIC 및 Tier_1 네트워킹을 지원해야 합니다.
  • ZONE: VM을 만들 영역
  • QUEUE_COUNT: 커스텀 큐 할당에 설명된 규칙이 적용되는 vNIC의 큐 수
  • SUBNET_*: 네트워크 인터페이스가 연결되는 서브넷의 이름

REST

  1. 구성하려는 각 vNIC 인터페이스에 대해 서브넷이 있는 VPC 네트워크가 아직 없으면 이를 만듭니다.
  2. instances.insert 메서드를 사용하여 NIC에 특정 큐 수가 할당된 VM을 만듭니다. 여러 네트워크 인터페이스를 구성하려면 networkInterfaces 속성을 반복합니다.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    "name": "VM_NAME",
    "machineType": "machineTypes/MACHINE_TYPE",
    "networkPerformanceConfig": {
        "totalEgressBandwidthTier": TIER_1
    },
    "networkInterfaces": [
        {
          "nicType": gVNIC,
          "subnetwork":"regions/region/subnetworks/SUBNET_1",
          "queueCount": "QUEUE_COUNT_1"
        } ],
    "networkInterfaces": [
        {
          "nicType": gVNIC,
          "subnetwork":"regions/region/subnetworks/SUBNET_2",
          "queueCount": "QUEUE_COUNT_2"
        } ],
    }
    

    다음을 바꿉니다.

    • PROJECT_ID: VM을 만들 프로젝트의 ID
    • ZONE: VM을 만들 영역
    • VM_NAME: 새 VM의 이름
    • MACHINE_TYPE: 새 VM의 머신 유형(사전 정의 또는 커스텀)
    • SUBNET_*: 네트워크 인터페이스가 연결되는 서브넷의 이름
    • QUEUE_COUNT: 커스텀 큐 할당에 설명된 규칙이 적용되는 vNIC의 큐 수

큐 할당 및 머신 유형 변경

VM이 기본 큐 할당으로 만들어지거나 사용자가 Compute Engine API를 사용하여 새 VM을 생성할 때 각 가상 네트워크 인터페이스 카드(vNIC)에 커스텀 큐 수를 할당할 수 있습니다. 기본 또는 커스텀 vNIC 큐 할당은 VM을 만들 때에만 설정할 수 있습니다. VM에 기본 큐 수를 사용하는 vNIC가 있는 경우 머신 유형을 변경할 수 있습니다. 변경하려는 머신 유형의 vCPU 수가 다른 경우 새 머신 유형에 따라 VM의 기본 큐 수가 다시 계산됩니다.

VM에 기본값이 아닌 커스텀 큐 수를 사용하는 vNIC가 있는 경우 Google Cloud CLI 또는 Compute Engine API를 사용하여 머신 유형을 변경하면 인스턴스 속성을 업데이트할 수 있습니다. 결과물로 나온 VM이 원본 VM과 동일한 vNIC당 큐 수를 지원하면 변환이 성공합니다. VirtIO-Net 인터페이스를 사용하고 커스텀 큐 수가 vNIC당 16개보다 큰 VM의 경우 gVNIC만 사용하는 3세대 머신 유형으로 머신 유형을 변경할 수 없습니다. 대신 기존 VM에서 새 VM으로 워크로드 마이그레이션에 설명된 안내에 따라 VM을 3세대 머신 유형으로 마이그레이션할 수 있습니다.

다음 단계