네트워크 대역폭


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

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

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

추가 가상 네트워크 인터페이스(vNIC)나 vNIC당 추가 IP 주소는 컴퓨팅 인스턴스의 인그레스 또는 이그레스 대역폭을 증가시키지 않습니다. 예를 들어 vCPU가 22개인 C3 VM은 이그레스 대역폭 총 23Gbps로 제한됩니다. vNIC 2개로 C3 VM을 구성해도 VM은 vNIC당 23Gbps 대역폭이 아닌 총 이그레스 대역폭 23Gbps로 계속 제한됩니다.

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

대역폭 요약

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

Egress

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

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

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

인그레스

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

    • 1,800,000pps(초당 패킷)
    • 30Gbps
  • A3와 같이 물리적 NIC를 여러 개 지원하는 머신 시리즈의 경우 다음 중 먼저 도달하는 속도가 한도입니다.

    • 물리적 NIC당 1,800,000pps(초당 패킷)
    • 물리적 NIC당 30Gbps
  • 기타 요인, 정의, 시나리오는 VPC 네트워크 외부의 대상으로 인그레스를 참조하세요.

이그레스 대역폭

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

인스턴스당 최대 이그레스 대역폭

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

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

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

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

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

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

  • 더 큰 머신 유형을 사용하여 VM당 Tier_1 네트워킹 성능을 사용 설정합니다.
  • 네트워크 토폴로지에서 지원하는 최대 VPC 네트워크 최대 전송 단위(MTU)를 사용합니다. MTU가 크면 패킷 헤더 오버헤드를 줄이고 페이로드 데이터 처리량을 늘릴 수 있습니다.
  • 최신 gVNIC 드라이버 버전을 사용합니다.
  • Titanium을 사용하여 호스트 CPU에서 네트워크 처리를 오프로드하는 3세대 이상의 머신 시리즈를 사용합니다.

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

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

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

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

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

다음 목록에는 가능한 최대 대역폭부터 최저 대역폭 순으로 전송 인스턴스에서 내부 대상으로 전송되는 트래픽이 나와 있습니다.

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

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

  • 인스턴스당 이그레스 대역폭: 컴퓨팅 인스턴스에서 VPC 네트워크 외부의 대상으로의 모든 연결에 대한 최대 대역폭은 인스턴스당 최대 이그레스 대역폭과 다음 속도 중에서 작은 값입니다.

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

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

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

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

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

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

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

인그레스 대역폭

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

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

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

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

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

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

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

Google Cloud는 VPC 네트워크 외부의 경로를 통해 수신 인스턴스에 전달되는 수신 패킷에 다음 대역폭 한도를 구현합니다. 부하 분산이 포함된 경우 대역폭 한도는 각 수신 인스턴스에 개별적으로 적용됩니다.

물리적 NIC 여러 개를 지원하지 않는 머신 시리즈의 경우 적용 가능한 인바운드 대역폭 제한이 총체적으로 모든 가상 네트워크 인터페이스(vNIC)에 적용됩니다. 다음 중 먼저 도달하는 속도가 한도입니다.

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

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

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

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

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

점보 프레임

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

MTU 값이 클수록 패킷 크기가 증가하고 패킷 헤더 오버헤드가 줄어들어 페이로드 데이터 처리량이 증가합니다.

VM 인스턴스에서는 gVNIC 드라이버 버전 1.3 이상을 사용하거나 베어메탈 인스턴스에서 IDPF 드라이버를 사용하여 점보 프레임을 사용할 수 있습니다. 일부 Google Cloud 공개 이미지에는 이러한 드라이버가 포함되어 있지 않습니다. 점보 프레임의 운영체제 지원에 대한 자세한 내용은 운영체제 세부정보 페이지의 네트워킹 기능 탭을 참조하세요.

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

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

수신 및 전송 큐

컴퓨팅 인스턴스의 각 NIC 또는 vNIC에는 네트워크에서 패킷을 처리하는 여러 수신 및 전송 큐가 할당됩니다.

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

기본 큐 할당

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

베어메탈 인스턴스
베어메탈 인스턴스의 경우 NIC가 하나뿐이므로 최대 큐 수는 16개입니다.
gVNIC 네트워크 인터페이스를 사용하는 VM 인스턴스

큐 수는 머신 시리즈에서 Titanium을 사용하는지 여부에 따라 다릅니다.

  • Titanium을 사용하는 Gen3(M3 제외) 이상 인스턴스: vCPU 수를 vNIC 수(num_vcpus/num_vnics)로 나눕니다.
  • Titanium을 사용하지 않는 Gen1 및 Gen2 VM: vCPU 수를 vNIC 수로 나눈 후 결과를 2로 나눕니다(num_vcpus/num_vnics/2).

나머지를 삭제합니다.

  1. C4 인스턴스의 경우 성능 개선을 위해 다음 구성에서는 기본 계산을 사용하지 않습니다.

    • vCPU 2개로 구성된 Linux 인스턴스의 경우 큐 수는 1개입니다.
    • vCPU 4개로 구성된 Linux 인스턴스의 경우 큐 수는 2개입니다.
  2. 계산된 숫자가 1 미만이면 vNIC마다 큐 하나씩 대신 할당합니다.

  3. 계산된 숫자가 vNIC당 최대 큐 수인 16보다 큰지 확인합니다. 계산된 숫자가 16보다 크면 계산된 수를 무시하고 대신 vNIC마다 큐를 16개씩 할당합니다.

VirtIO 네트워크 인터페이스나 커스텀 드라이버를 사용하는 VM 인스턴스

vCPU 수를 vNIC 수로 나누고 나머지를 삭제([number of vCPUs/number of vNICs])

  1. 계산된 숫자가 1 미만이면 vNIC마다 큐 하나씩 대신 할당합니다.

  2. 계산된 숫자가 vNIC당 최대 큐 수인 32보다 큰지 확인합니다. 계산된 숫자가 32보다 크면 계산된 수를 무시하고 대신 vNIC마다 큐를 32개씩 할당합니다.

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

  • VM 인스턴스에서 VirtIO를 사용하고 vCPU 16개와 vNIC 4개가 있으면 계산된 수는 [16/4] = 4입니다. Google Cloud는 vNIC마다 큐를 4개씩 할당합니다.

  • VM 인스턴스에서 gVNIC를 사용하고 vCPU 128개와 vNIC 2개가 있으면 계산된 수는 [128/2/2] = 32입니다. Google Cloud는 vNIC마다 가능한 vNIC당 최대 큐 수를 할당합니다. Google Cloud는 vNIC당 큐 16개를 할당합니다.

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

VM 인스턴스의 커스텀 큐 할당

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

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

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

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

    • virtIO 또는 커스텀 드라이버를 사용할 때 최대 큐 수는 32입니다.
    • gVNIC를 사용할 때 최대 큐 수는 16입니다. 다음 컨피덴셜 VM 구성의 최대 큐 수는 8입니다.

      • C2D 및 N2D 머신 유형의 AMD SEV
      • N2D 머신 유형의 AMD SEV-SNP
  • 커스텀 큐 수를 컴퓨팅 인스턴스의 모든 NIC에 할당하는 경우 할당한 큐 수의 합계가 인스턴스에 할당된 vCPU 수보다 적거나 같아야 합니다.

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

  • 인스턴스에 구성된 모든 NIC의 vNIC 유형으로 gVNIC를 사용합니다.
  • Tier_1 네트워킹을 지원하는 머신 유형을 사용합니다.
  • Tier_1 네트워킹이 사용 설정되어 있습니다.
  • 인스턴스에 구성된 모든 NIC의 커스텀 큐 수를 지정했습니다.

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

예시

  • VM 인스턴스에 vCPU 8개와 NIC 3개가 있으면 인스턴스의 최대 큐 수는 vCPU 수(8개)입니다. nic0에 큐 1개, nic1에 큐 4개, nic2에 큐 3개를 할당할 수 있습니다. 이 예시에서는 이후에 nic2에 큐 4개를 할당할 수 없습니다. 하지만 할당된 큐의 합계가 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인 예시 인스턴스로 계속 진행하면 Google Cloud에는 남은 NIC(nic3, nic4, nic5)에 할당할 큐가 20-15 = 5개 남습니다.

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

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

커스텀 큐 수 구성

NIC 또는 vNIC 하나 이상에 커스텀 큐 수를 사용하는 컴퓨팅 인스턴스를 만들려면 다음 단계를 완료합니다.

gcloud

  1. 구성하려는 각 vNIC 인터페이스의 서브넷이 있는 VPC 네트워크가 아직 없으면 만듭니다.
  2. gcloud compute instances create 명령어를 사용하여 컴퓨팅 인스턴스를 만듭니다. 인스턴스에 구성할 각 vNIC에 대해 --network-interface 플래그를 반복하고 queue-count 옵션을 포함합니다.
    gcloud compute instances create INSTANCE_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

다음을 바꿉니다.

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

Terraform

  1. 구성하려는 각 vNIC 인터페이스의 서브넷이 있는 VPC 네트워크가 아직 없으면 만듭니다.
  2. google_compute_instance 리소스를 사용하여 vNIC에 대한 특정 큐 수가 있는 컴퓨팅 인스턴스를 만듭니다. 컴퓨팅 인스턴스에 구성하려는 각 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: 새 컴퓨팅 인스턴스 이름
  • PROJECT_ID: 인스턴스를 만들 프로젝트의 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: 인스턴스의 머신 유형 큐 수를 초과 구독하려면 지정하는 머신 유형에서 gVNIC 및 Tier_1 네트워킹을 지원해야 합니다.
  • ZONE: 인스턴스를 만들 영역
  • QUEUE_COUNT: 커스텀 큐 할당에 설명된 규칙이 적용되는 vNIC의 큐 수
  • SUBNET_*: 네트워크 인터페이스가 연결되는 서브넷의 이름

REST

  1. 구성하려는 각 vNIC 인터페이스의 서브넷이 있는 VPC 네트워크가 아직 없으면 만듭니다.
  2. instances.insert 메서드를 사용하여 NIC에 대한 특정 큐 수가 있는 컴퓨팅 인스턴스를 만듭니다. 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: 컴퓨팅 인스턴스를 만들 프로젝트의 ID
    • ZONE: 컴퓨팅 인스턴스를 만들 영역
    • VM_NAME: 새 컴퓨팅 인스턴스 이름
    • MACHINE_TYPE: 새 컴퓨팅 인스턴스의 머신 유형(사전 정의 또는 커스텀). 큐 수를 초과 구독하려면 머신 유형에서 gVNIC 및 Tier_1 네트워킹을 지원해야 합니다.
    • SUBNET_*: 네트워크 인터페이스가 연결되는 서브넷의 이름
    • QUEUE_COUNT: 커스텀 큐 할당에 설명된 규칙이 적용되는 vNIC의 큐 수

큐 할당 및 머신 유형 변경

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

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

다음 단계