本文档介绍了如何在虚拟机 (VM) 实例上启用数据平面开发套件 (DPDK),以加快网络数据包处理速度。
DPDK 是一个框架,适用于对性能要求高的应用,这些应用需要快速数据包处理、低延迟和一致的性能。DPDK 提供了一组数据平面库和一个网络接口控制器 (NIC),可绕过内核网络并直接在用户空间中运行。例如,运行以下命令时,在虚拟机上启用 DPDK 非常有用:
网络功能虚拟化 (NFV) 部署
软件定义网络 (SDN) 应用
视频在线播放或 IP 语音应用
您可以使用以下任一虚拟 NIC (vNIC) 类型在虚拟机上运行 DPDK:
推荐:gVNIC
一种专为 Compute Engine 设计的高性能、安全且可扩缩的虚拟网络接口,是接替 virtIO 的下一代 vNIC。
-
一个开源以太网驱动程序,可让虚拟机高效访问物理硬件,例如块存储和网络适配器。
在虚拟环境(而不是在物理硬件上)运行 DPDK 时存在一个问题,即虚拟环境不支持高性能应用的 SR-IOV 和 I/O 内存管理单元 (IOMMU)。如需避开此限制,您必须使用以下某个驱动程序在客机物理地址(而非主机虚拟地址)上运行 DPDK:
无 IOMMU 的虚拟函数 I/O (VFIO)
准备工作
-
设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
为避免在运行应用时缺少网络连接,请使用两个 Virtual Private Cloud 网络:
控制平面的 VPC 网络
控制平面的 VPC 网络
这两个 VPC 网络都必须指定以下各项:
具有唯一 IP 地址范围的子网
子网的区域相同
同一类型的 VNIC(gVNIC 或 VirtIO-Net)
创建虚拟机时:
您必须指定与两个 VPC 网络的子网相同的区域。
您必须指定要与 DPDK 搭配使用的 vNIC 类型。
您必须为 gVNIC 或 VirtIO-Net 指定支持的机器系列。
您只能为虚拟机中使用的两个 VPC 网络使用单栈子网。
如果您将 gVNIC 用作这两个 VPC 网络的 vNIC 类型,请确保满足以下条件:
您必须使用 DPDK 22.11 版或更高版本。
您只能使用受支持的磁盘映像。
如果您要在创建虚拟机时启用每个虚拟机的 Tier_1 网络性能以实现更高的网络性能,则必须指定以下内容:
将 gVNIC 用作 vNIC 类型
具有 30 个或更多 vCPU 的受支持的机器类型
为数据平面创建 VPC 网络:
在 Google Cloud 控制台中,转到 VPC 网络。
系统会打开 VPC 网络页面。
点击
创建 VPC 网络。系统会打开创建 VPC 网络页面。
在名称字段中,为网络输入名称。
在新子网部分中,执行以下操作:
在名称字段中,为子网输入名称。
在区域菜单中,为子网选择一个区域。
选择 IPv4(单栈)(默认)。
在 IPv4 范围中,输入有效 IPv4 范围地址(采用 CIDR 表示法)。
点击完成。
点击创建。
系统会打开 VPC 网络页面。VPC 网络创建过程最多可能需要一分钟才能完成。
使用防火墙规则为控制平面创建 VPC 网络,以允许通过 SSH 连接到虚拟机:
再次点击
创建 VPC 网络。系统会打开创建 VPC 网络页面。
在名称字段中,为网络输入名称。
在新子网部分中,执行以下操作:
在名称字段中,输入子网的名称。
在区域菜单中,选择您为数据平面网络的子网指定的区域。
选择 IPv4(单栈)(默认)。
在 IPv4 范围中,输入有效 IPv4 范围地址(采用 CIDR 表示法)。
点击完成。
在 IPv4 防火墙规则标签页中,选中 NETWORK_NAME-allow-ssh 复选框。
其中,NETWORK_NAME 是您在前面的步骤中指定的网络名称。
点击创建。
系统会打开 VPC 网络页面。VPC 网络创建过程最多可能需要一分钟才能完成。
如需为数据平面创建 VPC 网络,请按照以下步骤操作:
使用
gcloud compute networks create
命令并将--subnet-mode
标志设置为custom
,创建具有手动创建的子网的 VPC 网络。gcloud compute networks create DATA_PLANE_NETWORK_NAME \ --bgp-routing-mode=regional \ --mtu=MTU \ --subnet-mode=custom
请替换以下内容:
DATA_PLANE_NETWORK_NAME
:数据平面的 VPC 网络的名称。MTU
:最大传输单元 (MTU),即该网络的最大数据包大小。该值必须在1300
到8896
之间。默认值为1460
。在将 MTU 设置为高于1460
的值之前,请查看最大传输单元。
使用
gcloud compute networks subnets create
命令为您刚刚创建的 VPC 数据平面网络创建子网。gcloud compute networks subnets create DATA_PLANE_SUBNET_NAME \ --network=DATA_PLANE_NETWORK_NAME \ --range=DATA_PRIMARY_RANGE \ --region=REGION
请替换以下内容:
DATA_PLANE_SUBNET_NAME
:数据平面网络的子网名称。DATA_PLANE_NETWORK_NAME
:您在前面的步骤中指定的数据平面网络的名称。DATA_PRIMARY_RANGE
:子网的有效 IPv4 范围(采用 CIDR 表示法)。REGION
:要在其中创建子网的区域。
如需创建具有防火墙规则以允许通过 SSH 连接到虚拟机的控制平面的 VPC 网络,请执行以下步骤:
使用
gcloud compute networks create
命令并将--subnet-mode
标志设置为custom
,创建具有手动创建的子网的 VPC 网络。gcloud compute networks create CONTROL_PLANE_NETWORK_NAME \ --bgp-routing-mode=regional \ --mtu=MTU \ --subnet-mode=custom
请替换以下内容:
CONTROL_PLANE_NETWORK_NAME
:控制平面的 VPC 网络的名称。MTU
:MTU,即该网络的最大数据包大小。该值必须在1300
到8896
之间。默认值为1460
。在将 MTU 设置为高于1460
的值之前,请查看最大传输单元。
使用
gcloud compute networks subnets create
命令为您刚刚创建的 VPC 控制平面网络创建子网。gcloud compute networks subnets create CONTROL_PLANE_SUBNET_NAME \ --network=CONTROL_PLANE_NETWORK_NAME \ --range=CONTROL_PRIMARY_RANGE \ --region=REGION
请替换以下内容:
CONTROL_PLANE_SUBNET_NAME
:控制平面网络的子网名称。CONTROL_PLANE_NETWORK_NAME
:您在前面的步骤中指定的控制平面网络的名称。CONTROL_PRIMARY_RANGE
:子网的有效 IPv4 范围(采用 CIDR 表示法)。REGION
:要在其中创建子网的区域,该区域必须与您在数据平面网络的子网中指定的区域匹配。
使用
gcloud compute firewall-rules create
命令并将--allow
标志设置为tcp:22
,创建允许 SSH 连接到控制平面网络的 VPC 防火墙规则。gcloud compute firewall-rules create FIREWALL_RULE_NAME \ --action=allow \ --network=CONTROL_PLANE_NETWORK_NAME \ --rules=tcp:22
请替换以下内容:
FIREWALL_RULE_NAME
:防火墙规则的名称。CONTROL_PLANE_NETWORK_NAME
:您在前面的步骤中创建的控制平面网络的名称。
如需为数据平面创建 VPC 网络,请按照以下步骤操作:
使用手动创建的子网创建 VPC 网络,方法是:通过向
networks.insert
方法发出POST
请求并将autoCreateSubnetworks
字段设置为false
。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "autoCreateSubnetworks": false, "name": "DATA_PLANE_NETWORK_NAME", "mtu": MTU }
请替换以下内容:
PROJECT_ID
:当前项目的 ID。DATA_PLANE_NETWORK_NAME
:数据平面网络的名称。MTU
:最大传输单元 (MTU),即该网络的最大数据包大小。该值必须在1300
到8896
之间。默认值为1460
。在将 MTU 设置为高于1460
的值之前,请查看最大传输单元。
向
subnetworks.insert
方法发出POST
请求,为 VPC 数据平面网络创建子网。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks { "ipCidrRange": "DATA_PRIMARY_RANGE", "name": "DATA_PLANE_SUBNET_NAME", "network": "projects/PROJECT_ID/global/networks/DATA_PLANE_NETWORK_NAME" }
请替换以下内容:
PROJECT_ID
:数据平面网络所在项目的 ID。REGION
:要在其中创建子网的区域。DATA_PRIMARY_RANGE
:新子网的主要 IPv4 范围(采用 CIDR 表示法)。DATA_PLANE_SUBNET_NAME
:您在上一步中创建的数据平面网络的子网名称。DATA_PLANE_NETWORK_NAME
:您在上一步中创建的数据平面网络的名称。
如需创建具有防火墙规则以允许通过 SSH 连接到虚拟机的控制平面的 VPC 网络,请按照以下步骤操作:
使用手动创建的子网创建 VPC 网络,方法是:通过向
networks.insert
方法发出POST
请求并将autoCreateSubnetworks
字段设置为false
。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "autoCreateSubnetworks": false, "name": "CONTROL_PLANE_NETWORK_NAME", "mtu": MTU }
请替换以下内容:
PROJECT_ID
:当前项目的项目 ID。CONTROL_PLANE_NETWORK_NAME
:控制平面网络的名称。MTU
:MTU,即该网络的最大数据包大小。该值必须在1300
到8896
之间。默认值为1460
。在将 MTU 设置为高于1460
的值之前,请查看最大传输单元。
向
subnetworks.insert
方法发出POST
请求,为 VPC 数据控制网络创建子网。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks { "ipCidrRange": "CONTROL_PRIMARY_RANGE", "name": "CONTROL_PLANE_SUBNET_NAME", "network": "projects/PROJECT_ID/global/networks/CONTROL_PLANE_NETWORK_NAME" }
请替换以下内容:
PROJECT_ID
:控制平面网络所在项目的 ID。REGION
:要在其中创建子网的区域。CONTROL_PRIMARY_RANGE
:新子网的主要 IPv4 范围(采用 CIDR 表示法)。CONTROL_PLANE_SUBNET_NAME
:您在上一步中创建的控制平面网络的子网名称。CONTROL_PLANE_NETWORK_NAME
:您在上一步中创建的控制平面网络的名称。
向
firewalls.insert
方法发出POST
请求,以创建允许 SSH 连接到控制平面网络的 VPC 防火墙规则。在请求中,将IPProtocol
字段设置为tcp
,并将ports
字段设置为22
。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "network": "projects/PROJECT_ID/global/networks/CONTROL_PLANE_NETWORK_NAME" }
请替换以下内容:
PROJECT_ID
:控制平面网络所在项目的 ID。CONTROL_PLANE_NETWORK_NAME
:您在前面的步骤中创建的控制平面网络的名称。
在 Google Cloud 控制台中,浏览到虚拟机实例。
系统会打开虚拟机实例页面。
点击
创建实例。系统随即会打开创建实例页面。
在名称字段中,为虚拟机输入名称。
在区域菜单中,选择您在前面的步骤中创建网络所在的区域。
在可用区菜单中,为虚拟机选择一个可用区。
在机器配置部分中,执行以下操作:
从下列选项中选择一项:
对于常见工作负载,请选择通用标签页(默认)。
对于需要高性能的工作负载,请选择计算优化标签页。
对于内存与 vCPU 比率较高的工作负载,请选择内存优化标签页。
对于使用图形处理单元 (GPU) 的工作负载,请选择 GPU 标签页。
可选。如果您在上一步中指定了 GPU,并且想要更改 GPU 以挂接到虚拟机,请执行以下操作中的一项或多项:
在 GPU 类型菜单中,选择 GPU 的类型。
在 GPU 数量菜单中,选择 GPU 的数量。
在系列菜单中,选择一个机器系列。
在机器类型菜单中,选择一种机器类型。
可选:展开高级配置,然后按照提示进一步自定义此虚拟机的机器。
可选:在启动磁盘部分,点击更改,然后按照提示更改磁盘映像。
展开高级选项部分。
展开网络部分。
在网络性能配置部分中,执行以下操作:
在网络接口卡菜单中,选择以下选项之一:
如需使用 gVNIC,请选择 gVNIC。
如需使用 VirtIO-Net,请选择 VirtIO。
可选:如需提高网络性能和减少延迟时间,请选中启用 Tier_1 网络复选框。
在网络接口部分中,执行以下操作:
在默认行中,点击
删除项“默认”。点击添加网络接口。
随即会出现新建网络接口部分。
在网络菜单中,选择您在前面步骤中创建的控制平面网络。
点击完成。
再次点击添加网络接口。
随即会出现新建网络接口部分。
在网络菜单中,选择您在前面步骤中创建的数据平面网络。
点击完成。
点击创建。
系统会打开虚拟机实例页面。虚拟机创建过程最多可能需要一分钟才能完成。
VM_NAME
:虚拟机的名称。IMAGE_FAMILY
:启动磁盘使用其初始化的操作系统的映像系列。或者,您可以指定--image=IMAGE
标志并将IMAGE
替换为映像的特定版本。了解如何查看 Compute Engine 映像项目中提供的映像列表。IMAGE_PROJECT
:包含磁盘映像的映像项目的名称。VNIC_TYPE
:用于控制平面和数据平面网络的 vNIC 类型。该值必须为以下项之一:如需使用 gVNIC,请指定
GVNIC
。如需使用 VirtIO-Net,请指定
VIRTIO_NET
。
CONTROL_PLANE_NETWORK_NAME
:您在前面的步骤中创建的控制平面网络的名称。CONTROL_PLANE_SUBNET_NAME
:您在前面的步骤中创建的控制平面网络的子网名称。DATA_PLANE_NETWORK_NAME
:您在前面的步骤中创建的数据平面网络的名称。DATA_PLANE_SUBNET_NAME
:您在前面的步骤中自动创建的控制平面网络的子网名称。ZONE
:要在其中创建虚拟机的可用区。指定您在前面的步骤中创建的子网所在区域中的可用区。PROJECT_ID
:控制平面 VPC 网络和数据平面 VPC 网络所在项目的 ID。ZONE
:要在其中创建虚拟机的可用区。VM_NAME
:虚拟机的名称。IMAGE_PROJECT
:包含磁盘映像的映像项目的名称。IMAGE_FAMILY
:启动磁盘使用其初始化的操作系统的映像系列。或者,您可以指定映像的特定版本。了解如何查看 Compute Engine 映像项目中的映像列表。CONTROL_PLANE_NETWORK_NAME
:您在前面的步骤中创建的控制平面网络的名称。REGION
:控制平面和数据平面网络的子网所在的区域。CONTROL_PLANE_SUBNET_NAME
:您在前面的步骤中创建的控制平面网络的子网名称。VNIC_TYPE
:用于控制平面和数据平面网络的 vNIC 类型。该值必须为以下项之一:如需使用 gVNIC,请指定
GVNIC
。如需使用 VirtIO-Net,请指定
VIRTIO_NET
。
DATA_PLANE_NETWORK_NAME
:您在前面的步骤中创建的数据平面网络的名称。DATA_PLANE_SUBNET_NAME
:您在前面的步骤中创建的控制平面网络的子网名称。使用 SSH 连接到您在上一部分中创建的虚拟机。
配置 DPDK 安装的依赖项:
sudo apt-get update && sudo apt-get upgrade -yq sudo apt-get install -yq build-essential ninja-build python3-pip \ linux-headers-$(uname -r) pkg-config libnuma-dev sudo pip install pyelftools meson
安装 DPDK:
wget https://fast.dpdk.org/rel/dpdk-23.07.tar.xz tar xvf dpdk-23.07.tar.xz cd dpdk-23.07
如需使用示例构建 DPDK,请运行以下命令:
meson setup -Dexamples=all build sudo ninja -C build install; sudo ldconfig
检查是否已启用 VFIO:
cat /boot/config-$(uname -r) | grep NOIOMMU
如果 VFIO 未启用,请按照安装 UIO 中的步骤操作。
在 VFIO 中启用 No-IOMMU 模式:
sudo bash -c 'echo 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode'
将
igb_uio
git 代码库克隆到虚拟机中的磁盘:git clone https://dpdk.org/git/dpdk-kmods
从克隆的 git 代码库的父级目录中,构建模块并在 DPDK 上安装 UIO 驱动程序:
pushd dpdk-kmods/linux/igb_uio sudo make sudo depmod && sudo insmod igb_uio.ko popd
-
sudo apt-get install -y dpdk-igb-uio-dkms
在 DPDK 上安装 UIO 驱动程序:
sudo modprobe igb_uio
获取当前网络接口的外设组件互连 (PCI) 槽号:
sudo lspci | grep -e "gVNIC" -e "Virtio network device"
例如,如果虚拟机使用
ens4
作为网络接口,则 PCI 槽号为00:04.0
。停止连接到网络适配器的网络接口:
sudo ip link set NETWORK_INTERFACE_NAME down
将
NETWORK_INTERFACE_NAME
替换为 VPC 网络中指定的网络接口的名称。如需查看虚拟机正在使用哪个网络接口,请查看网络接口的配置:sudo ifconfig
将 DPDK 绑定到驱动程序:
sudo dpdk-devbind.py --bind=DRIVER PCI_SLOT_NUMBER
请替换以下内容:
DRIVER
:要将 DPDK 绑定到的驱动程序。请指定以下某个值:UIO 驱动程序:
igb_uio
无 IOMMU 的 VFIO 驱动程序:
vfio-pci
PCI_SLOT_NUMBER
:当前网络接口的 PCI 槽号,格式为00:0NUMBER.0
。
创建
/mnt/huge
目录,然后创建一些巨型页面供 DPDK 用于缓冲区:sudo mkdir /mnt/huge sudo mount -t hugetlbfs -o pagesize=1G none /mnt/huge sudo bash -c 'echo 4 > /sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages' sudo bash -c 'echo 1024 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages'
通过运行 DPDK 库中包含的
testpmd
示例应用,测试 DPDK 是否可以使用您在前面的步骤中创建的网络接口:sudo ./build/app/dpdk-testpmd
如需详细了解如何测试 DPDK,请参阅 Testpmd 命令行选项。
将 DPDK 与驱动程序解除绑定:
sudo dpdk-devbind.py -u PCI_SLOT_NUMBER
将
PCI_SLOT_NUMBER
替换为您在前面的步骤中指定的 PCI 槽号。如果您要验证当前网络接口的 PCI 槽号,请运行以下命令:sudo lspci | grep -e "gVNIC" -e "Virtio network device"
例如,如果虚拟机使用
ens4
作为网络接口,则 PCI 槽号为00:04.0
。重新加载 Compute Engine 网络驱动程序:
sudo bash -c 'echo PCI_SLOT_NUMBER > /sys/bus/pci/drivers/VNIC_DIRECTORY/bind' sudo ip link set NETWORK_INTERFACE_NAME up
请替换以下内容:
PCI_SLOT_NUMBER
:您在前面的步骤中指定的 PCI 槽号。VNIC_DIRECTORY
:vNIC 的目录。根据您使用的 vNIC 类型,请指定以下值之一:gVNIC:
gvnic
VirtIO-Net:
virtio-pci
NETWORK_INTERFACE_NAME
:您在上一部分中指定的网络接口的名称。
查看机器类型的网络带宽速度。
详细了解如何创建和管理 VPC 网络。
详细了解使用巨型帧提高 MTU 设置。
详细了解针对网络性能的 TCP 优化。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
要求
创建用于运行 DPDK 的虚拟机时,请确保满足以下条件:
限制
在虚拟机上运行 DPDK 存在以下限制:
配置虚拟机以运行 DPDK
本部分介绍了如何创建用于运行 DPDK 的虚拟机。
创建 VPC 网络
使用 Google Cloud 控制台、Google Cloud CLI 或 Compute Engine API 为数据平面和控制平面创建两个 VPC 网络。您可以稍后在创建虚拟机时指定这些网络。
控制台
gcloud
API
如需了解创建 VPC 网络时的更多配置选项,请参阅创建和管理 VPC 网络。
创建将 VPC 网络用于 DPDK 的虚拟机
创建一个虚拟机,以在您之前使用 Google Cloud 控制台、gcloud CLI 和 Compute Engine API 创建的两个 VPC 网络上启用 gVNIC 或 virtIO-Net。
推荐:将 Ubuntu LTS 或 Ubuntu Pro 指定为操作系统映像,因为它们的软件包管理器支持 UIO 和无 IOMMU VFIO 驱动程序。如果您不想指定其中任何操作系统,建议指定 Debian 11 或更高版本以加快数据包处理速度。
控制台
通过执行以下操作,创建一个使用您在前面步骤中创建的两个 VPC 网络子网的虚拟机:
gcloud
通过将
gcloud compute instances create
命令与以下标志结合使用,创建一个使用您在前面步骤中创建的两个 VPC 网络子网的虚拟机:gcloud compute instances create VM_NAME \ --image-family=IMAGE_FAMILY \ --image-project=IMAGE_PROJECT \ --machine-type=MACHINE_TYPE \ --network-interface=network=CONTROL_PLANE_NETWORK_NAME,subnet=CONTROL_PLANE_SUBNET_NAME,nic-type=VNIC_TYPE \ --network-interface=network=DATA_PLANE_NETWORK_NAME,subnet=DATA_PLANE_SUBNET_NAME,nic-type=VNIC_TYPE \ --zone=ZONE
请替换以下内容:
例如,如需在
us-central1-a
可用区中创建一个名为dpdk-vm
的虚拟机,以指定 512 GB 的 SSD 永久性磁盘、具有 60 个 vCPU 的预定义 C2 机器类型、Tier_1 网络以及均使用 gVNIC 的数据平面和控制平面网络,请运行以下命令:gcloud compute instances create dpdk-vm \ --boot-disk-size=512GB \ --boot-disk-type=pd-ssd \ --image-project=ubuntu-os-cloud \ --image-family=ubuntu-2004-lts \ --machine-type=c2-standard-60 \ --network-performance-configs=total-egress-bandwidth-tier=TIER_1 \ --network-interface=network=control,subnet=control,nic-type=GVNIC \ --network-interface=network=data,subnet=data,nic-type=GVNIC \ --zone=us-central1-a
API
使用下列字段向
instances.insert
方法发出POST
请求,以创建使用您在前面步骤中创建的两个 VPC 网络子网的虚拟机:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "VM_NAME", "machineType": "MACHINE_TYPE", "disks": [ { "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE_FAMILY" } } ], "networkInterfaces": [ { "network": "global/networks/CONTROL_PLANE_NETWORK_NAME", "subnetwork": "regions/REGION/subnetworks/CONTROL_PLANE_SUBNET_NAME", "nicType": "VNIC_TYPE" }, { "network": "global/networks/DATAPLANE_NETWORK_NAME", "subnetwork": "regions/REGION/subnetworks/DATA_PLANE_SUBNET_NAME", "nicType": "VNIC_TYPE" } ] }
请替换以下内容:
例如,如需在
us-central1-a
可用区中创建一个名为dpdk-vm
的虚拟机,以指定 512 GB 的 SSD 永久性磁盘、具有 60 个 vCPU 的预定义 C2 机器类型、Tier_1 网络以及均使用 gVNIC 的数据平面和控制平面网络,请发出以下POST
请求:POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-central1-a/instances { "name": "dpdk-vm", "machineType": "c2-standard-60", "disks": [ { "initializeParams": { "diskSizeGb": "512GB", "diskType": "pd-ssd", "sourceImage": "projects/ubuntu-os-cloud/global/images/ubuntu-2004-lts" }, "boot": true } ], "networkInterfaces": [ { "network": "global/networks/control", "subnetwork": "regions/us-central1/subnetworks/control", "nicType": "GVNIC" }, { "network": "global/networks/data", "subnetwork": "regions/us-central1/subnetworks/data", "nicType": "GVNIC" } ], "networkPerformanceConfig": { "totalEgressBandwidthTier": "TIER_1" } }
如需了解创建虚拟机时的更多配置选项,请参阅创建和启动虚拟机实例。
在虚拟机上安装 DPDK
如需在虚拟机上安装 DPDK,请按照以下步骤操作:
安装驱动程序
如需准备 DPDK 以在驱动程序上运行,请选择以下方法之一来安装驱动程序:
安装无 IOMMU 的 VFIO
如需安装无 IOMMU 的 VFIO 驱动程序,请按照以下步骤操作:
安装 UIO
如需在 DPDK 上安装 UIO 驱动程序,请选择以下方法之一:
使用 git 安装 UIO
如需使用
git
在 DPDK 上安装 UIO 驱动程序,请按照以下步骤操作:使用 Linux 软件包安装 UIO
如需使用 Linux 软件包在 DPDK 上安装 UIO 驱动程序,请按照以下步骤操作:
将 DPDK 绑定到驱动程序并对其进行测试
如需将 DPDK 绑定到您在上一部分安装的驱动程序,请按照以下步骤操作:
解除绑定 DPDK
使用 DPDK 后,您可以将其与您在上一部分中安装的驱动程序解除绑定。如需解除绑定 DPDK,请按照以下步骤操作:
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-10-04。
-