Google Virtual NIC (gVNIC) is a virtual network interface designed specifically for Compute Engine. gVNIC is an alternative to the virtIO-based ethernet driver.
As the next generation network interface which succeeds VirtIO, gVNIC replaces VirtIO-Net as the only supported network interface in Compute Engine for all new machine types (Generation 3 and onwards). Newer machine series and networking features require gVNIC instead of VirtIO. Consuming gVNIC as the modern I/O interface with Compute Engine VMs offers the following advantages:
- Provides better performance.
- Improves consistency by reducing noisy neighbor problems.
- Introduces new network capabilities beyond what VirtIO is capable of.
gVNIC is supported and recommended on all machine families, machine types, and generations.
gVNIC is required to achieve the following maximum bandwidth rates:
- 50 to 200 Gbps bandwidth with VMs that support per VM Tier_1 networking performance
- 50 to 1,800 Gbps bandwidth with VMs that have attached GPUs
You must use gVNIC as the network interface for Confidential VM instances, third generation or later machine series VMs, and VMs that run on the Arm CPU platform.
Before you begin
- If you use gVNIC with Windows Server 2022 or Windows 11 VMs, update the
gVNIC driver to GooGet package version
1.0.0@45
or later to improve networking throughput. For more information, see known issues. -
If you haven't already, then set up authentication.
Authentication is
the process by which your identity is verified for access to Google Cloud services and APIs.
To run code or samples from a local development environment, you can authenticate to
Compute Engine by selecting one of the following options:
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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
REST
To use the REST API samples on this page in a local development environment, you use the credentials you provide to the gcloud CLI.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
For more information, see Authenticate for using REST in the Google Cloud authentication documentation.
-
Pricing
To see the latest prices for Tier_1 networking, refer to the VM instance pricing page.
For a list of additional methods that can be used to find pricing information, see Compute Engine pricing.
Operating system support
On Compute Engine, you can choose to use gVNIC on any supported public operating system (OS) images. You can manually install the gVNIC driver in these cases:
- The OS image doesn't include the gVNIC driver
- The OS image doesn't have the latest gVNIC driver version
For the supported operating systems, see the Interfaces tab for an operating system. Also check the Networking features tab for networking feature support.
Use on non-supported operating systems
For OS images that support gVNIC but don't include the latest version of the gVNIC driver, you can download the latest driver version from GitHub.
You can manually configure and install the latest version of the gVNIC driver on either Linux or Windows VMs.
After you update the operating system in your VM to use gVNIC, create a custom OS image based on that OS image. You can then use the custom OS image to create additional VMs that use gVNIC on that operating system. For more information about creating VMs using a custom OS image, see Create a custom OS image that supports gVNIC on this page.
Use the following procedures to manually configure and install the latest version of the gVNIC driver.
- For Linux VMs, see Linux kernel driver Compute Engine Virtual Ethernet.
- For VMs running on FreeBSD, see Compute Engine Virtual Ethernet FreeBSD driver.
- For Windows VMs, see Windows driver for Compute Engine Virtual Ethernet.
Update to the latest gVNIC driver for Windows
An updated version of the gVNIC driver for Windows offers improved network performance. When installed on a compute instance that uses a third generation or later machine series, except for N4, the driver provides the following improvements:
- Up to 200 Gbps of network bandwidth when installed on a Windows instance that is configured to use Tier_1 networking and gVNIC.
- Support for Jumbo frames.
To use the updated version of the gVNIC driver, follow these steps:
- If you haven't already, request access to the preview version of the driver.
Using Powershell, do the following:
Add the gvnic repository to
googet
by running the following command:googet addrepo gvnic-preview https://packages.cloud.google.com/yuck/repos/google-compute-engine-driver-gvnic-preview
Use
googet
to update the gVNIC driver. The following command lists all the updates that are available. Entery
when prompted for gVNIC driver.googet update
Enable Large Send Offload (LSO):
Set-NetAdapterAdvancedProperty -InterfaceDescription 'Google Ethernet Adapter' -RegistryKeyword '*LSOV2Ipv4' -RegistryValue 1 Set-NetAdapterAdvancedProperty -InterfaceDescription 'Google Ethernet Adapter' -RegistryKeyword '*LSOV2Ipv6' -RegistryValue 1
Print out the current state to verify that LSO is enabled:
Get-NetAdapterAdvancedProperty -InterfaceDescription 'Google Ethernet Adapter'
After you have installed and configured Windows to use the updated version of the gVNIC driver, you can configure Jumbo frames to achieve optimal throughput. For more information, see Maximum transmission unit.
Test performance of the updated gVNIC driver
To test the networking bandwidth provided by the updated gVNIC driver, use the
iPerf2 or Windows NT Test TCP (ntttcp
) utilities. Select one of the following
options:
iPerf2
Do one of the following:
- On a compute instance running Windows Server, run the following command:
iperf-2.1.1-Feb_27_2021-win.exe -s -w 131072 -l 128K -t 70
- On a compute instance running Windows client, run the following command:
iperf-2.1.1-Feb_27_2021-win.exe -c 192.168.100.2 -P 64 -y C -w 131072 -l 128K -N -t 60
NTTTCP
On the receiver, run the following command:
ntttcp.exe -m 200,*,192.168.100.2 -r -t 60
On the sender, run the following command:
ntttcp.exe -m 200,*,192.168.100.2 -s -l 4M -a 2 -t 60
Limitations
- Large receive offload (LRO) isn't supported. Generic receive offload (GRO) is enabled by default for VMs that use gVNIC. If you use the updated gVNIC driver (Preview), then LRO is supported.
Large send offload version 2 (LSOV2) is not supported on Windows 11 or Windows Server 2022 VMs. gVNIC driver versions
1.0.0@45
and later disable LSOV2. To learn how to check and update your VM's gVNIC driver on Microsoft Windows, see known issues.If you use the updated gVNIC driver (Preview), then LSOV2 is supported.
Overview of using gVNIC with Compute Engine VMs
To create a VM that uses gVNIC, complete the following steps:
- Choose a public OS image that supports gVNIC, or create a custom OS image that is tagged to use gVNIC.
- Create a VM using the public or custom OS image. During the VM creation, configure the network interface to use gVNIC.
- Verify that gVNIC is enabled.
If you encounter any issues, see Troubleshooting Google Virtual NIC.
Create a custom OS image that supports gVNIC
You can create the OS image using either the Google Cloud CLI or REST. For detailed information and best practices for creating custom OS images, see Create custom OS images.
gcloud
Select an OS image or image family that supports gVNIC. For more information, see Operating system details.
Using the OS image or image family selected in the previous step, create a custom OS image and tag this OS image with
GVNIC
. To create the custom OS image, use thegcloud compute images create
command. For example, the following command creates a custom OS image that supports gVNIC and that's based on a specific OS image.gcloud compute images create IMAGE_NAME \ --source-image=SOURCE_IMAGE \ --source-image-project=SOURCE_IMAGE_PROJECT \ --guest-os-features=GVNIC
Replace the following:
IMAGE_NAME
: the name of the image that you want to createSOURCE_IMAGE
: a specific OS image that supports gVNIC—for example:rocky-linux-8-optimized-gcp-v20220719
If you want to use the latest OS image in an image family, replace the
--source-image
flag with the--source-image-family
flag and set its value to an image family that supports gVNIC. For example:--source-image-family=rocky-linux-8-optimized-gcp
.SOURCE_IMAGE_PROJECT
: the name of the project that contains the source OS image or image family
Example
To create a Rocky Linux 8 Optimized for Google Cloud OS image using the latest OS image from the Compute Engine
rocky-linux-8-optimized-gcp
image family, run the following command:gcloud compute images create IMAGE_NAME \ --source-image-family=rocky-linux-8-optimized-gcp \ --source-image-project=rocky-linux-cloud \ --guest-os-features=GVNIC
For more information about when to use image families, see Image family best practices.
REST
Select an OS image or image family that supports gVNIC For more information, see Operating system details.
Using the OS image or image family selected in the previous step, create an OS image and tag this OS image with
GVNIC
. To create the OS image, use theimages.insert
method.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/images { "name":"IMAGE_NAME", "sourceImage":"SOURCE_IMAGE_URI", "guestOsFeatures":[ { "type":"GVNIC" } ] }
Replace the following:
PROJECT_ID
: the ID of the project in which to create the new imageIMAGE_NAME
: a name for the custom imageSOURCE_IMAGE_URI
: the URI for the specific OS image or image family that you want to useFor example:
- Specific OS image:
"sourceImage": "projects/rocky-linux-cloud/global/images/rocky-linux-8-optimized-gcp-v20220719"
- Image family:
"sourceImage": "projects/rocky-linux-cloud/global/images/family/rocky-linux-8-optimized-gcp"
When you specify an image family, Compute Engine creates a VM from the most recent, non-deprecated OS image in that family. For more information about when to use image families, see Image family best practices.
- Specific OS image:
Create a VM with gVNIC support
You can create a VM using one of the supported public OS images or using a custom OS image you created using the steps in Create a custom OS image that supports gVNIC.
Optionally, you can enable DPDK on the VM for faster network packet processing, low latency, and consistent performance.
For VMs that support multiple network interfaces (NICs), you can have NICs of
different types attached to the VM because interface support is configured per
NIC. While this is supported, we don't recommend this setup. For VMs that support
multiple NICs, ensure that you specify nic-type=GVNIC
for each network interface
when creating the VM.
Create a VM using a public OS image
To create a VM using a public OS image that supports gVNIC, follow the instructions at Creating VMs and containers with high-bandwidth configuration.
Create a VM using a custom OS image
If you aren't using a public OS image that supports gVNIC, you must first create a custom OS image that supports gVNIC. You then use that custom OS image to create a VM by using the Google Cloud console, Google Cloud CLI, or REST.
Console
In the Google Cloud console, go to the Create an instance page.
Enter the Name of your VM instance.
Select the Zone to create your VM in.
In the Boot disk section, click Change.
In the Boot disk panel, on the Custom images tab, complete the following:
- Choose the Source project that contains the OS image that you created previously.
- Select the image from the Image drop-down.
- Click Select.
To set gVNIC as the network interface, expand the Advanced options section, and then do the following:
- Expand the Networking section.
- For Network interface card, select
gVNIC
.
Make additional VM customizations as needed.
Click Create to create the VM instance.
gcloud
Create the VM by using the
gcloud compute instances create
command. For the boot disk, specify the custom OS image that you created earlier. For the network interface, set the value of thenic-type
flag toGVNIC
.gcloud compute instances create VM_NAME \ --zone=ZONE \ --machine-type=MACHINE_TYPE \ --image=IMAGE_NAME \ --image-project=YOUR_IMAGE_PROJECT \ --network-interface=nic-type=GVNIC
Replace the following:
VM_NAME
: the name of the new VM.ZONE
: the zone to create the VM in.MACHINE_TYPE
: the machine type to use when creating the VM instance. If you don't specify a machine type, the default isn1-standard-1
.IMAGE_NAME
: the OS image that was created in the previous step.YOUR_IMAGE_PROJECT
: the name of your project that contains the OS image.
Optional: Verify that Compute Engine created the VM and that the
nicType
is set toGVNIC
.gcloud compute instances describe VM_NAME \ --zone=ZONE
Replace the following:
VM_NAME
: the name of the VM.ZONE
: the zone that you created the VM in.
Example
To create a Rocky Linux 8 VM with an
n1-standard-1
machine type in zoneus-west1-b
using an OS image namedmy-gvnic-rocky8
that's in projectmy-project-12345
, run the following command:gcloud compute instances create my-rocky-linux-vm \ --zone=us-west1-b \ --image=my-gvnic-rocky8 \ --image-project=my-project-12345 \ --network-interface=nic-type=GVNIC
Things to consider
The
--network-interface
flag has sub-level flags such as the following:--address
: Assign an IP address to the VM--network
: The network the interface will be a part of--network-tier
: The network tier of the interface--subnet
: The subnet that the interface will be part of. If--network
is also specified, the subnet must be a part of the specified network.--private-network-ip
: Specify the RFC 1918 IP to assign to the VM.
For a full list see, the
--network-interface
flag.
REST
Create the VM by using the
instances.insert
method.
- For the boot disk, specify the custom OS image that you created earlier.
- For the network interface, set the value of the
nicType
field toGVNIC
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name":"VM_NAME", "networkInterfaces":[ { "network":"NETWORK", "nicType":"GVNIC", "subnet":"SUBNET_NAME" } ], "disks":[ { "initializeParams":{ "sourceImage":"projects/YOUR_IMAGE_PROJECT/global/images/IMAGE_NAME" }, "boot":true } ] }
Replace the following:
PROJECT_ID
: the ID of the project to create the VM in.ZONE
: the zone to create the VM in.VM_NAME
: the name of the new VM.NETWORK
: the URL of the network resource for this VM. If neither the network nor the subnetwork is specified, the default networkglobal/networks/default
is used.SUBNET_NAME
: name of the subnet. The network is inferred from the specified subnet. This is an optional field.YOUR_IMAGE_PROJECT
: the name of your project that contains the OS image.IMAGE_NAME
: the OS image that was created in the previous step.
Verify that gVNIC is enabled
Linux
You can use the lshw
tool to extract detailed information about the
hardware configuration of the virtual machine.
To install the lshw
tool on your Linux VM instance, open a SSH connection
to the VM, and then run the following command:
sudo apt-get install lshw -y
To determine if the VM is using the gVNIC network interface, run the following command:
sudo lshw -class network
The output resembles the following:
*-network description: Ethernet interface product: Compute Engine Virtual Ethernet [gVNIC] vendor: Google, Inc. physical id: 3 bus info: pci@0000:00:03.0 logical name: ens3 version: 00 serial: 42:01:0a:80:00:6f width: 32 bits clock: 33MHz capabilities: msix bus_master cap_list ethernet physical configuration: autonegotiation=off broadcast=yes driver=gve driverversion=1.0.0 duplex=full ip=10.128.0.111 latency=0 link=yes multicast=yes port=twisted pair resources: irq:11 memory:c0203000-c0203fff memory:c0200000-c02000ff memory:c0100000-c01fffff
Windows
- On your Windows VM Instance, open the Device Manager.
- Under Network Adapters, you should see:
"Google Ethernet Adapter"
Troubleshooting
To troubleshoot gVNIC, see Troubleshooting Google Virtual NIC.
What's next
- Connect to your instance.
- Add persistent disks to your new instance.
- Configure per VM Tier_1 networking performance.
- Change the MTU setting of a VPC network.
- Learn about jumbo frames.