本文档介绍如何在虚拟机 (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 进行身份验证。
选择标签页以了解您打算如何使用本页面上的示例:
控制台
当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。
gcloud
-
安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:
gcloud init
- 设置默认区域和可用区。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
-
使用要求
创建运行 DPDK 的虚拟机时,请确保满足以下条件:
为避免在运行应用时缺少网络连接,请使用两个 Virtual Private Cloud 网络:
控制平面的 VPC 网络
数据平面的 VPC 网络
这两个 VPC 网络必须指定以下内容:
具有唯一 IP 地址范围的子网
子网的区域相同
相同类型的 VNIC - gVNIC 或 VirtIO-Net
创建虚拟机时:
您必须指定与两个 VPC 网络的子网相同的区域。
您必须指定要与 DPDK 搭配使用的 vNIC 类型。
您必须为 gVNIC 或 VirtIO-Net 指定支持的机器系列。
限制
在虚拟机上运行 DPDK 具有以下限制:
您只能将单栈子网用于虚拟机中使用的两个 VPC 网络。
如果您将 gVNIC 用作两个 VPC 网络的 vNIC 类型,请确保满足以下条件:
您必须使用 DPDK 22.11 或更高版本。
您只能使用支持的磁盘映像。
如果要在创建虚拟机时启用每个虚拟机 Tier_1 网络性能以实现更高的网络性能,您必须指定以下内容:
gVNIC 作为 vNIC 类型
具有 30 个或更多 vCPU 的受支持的机器类型
配置虚拟机以运行 DPDK
本部分介绍如何创建用于运行 DPDK 的虚拟机。
创建 VPC 网络
使用 Google Cloud 控制台、Google Cloud CLI 或 Compute Engine API 为数据平面和控制平面创建两个 VPC 网络。您稍后可以在创建虚拟机时指定这些网络。
控制台
为数据平面创建 VPC 网络:
在 Google Cloud 控制台中,转到 VPC 网络。
VPC 网络页面随即打开。
点击
创建 VPC 网络。此时会打开创建 VPC 网络页面。
在名称字段中,为网络输入名称。
在新子网部分中,执行以下操作:
在名称字段中,为子网输入名称。
在区域菜单中,为您的子网选择一个区域。
选择 IPv4(单栈)(默认)。
在 IPv4 范围中,以 CIDR 表示法输入有效的 IPv4 范围地址。
点击完成。
点击创建。
VPC 网络页面随即打开。VPC 网络创建完成可能需要一分钟时间。
使用防火墙规则为控制平面创建 VPC 网络,以允许通过 SSH 连接到虚拟机:
再次点击
创建 VPC 网络。此时会打开创建 VPC 网络页面。
在名称字段中,为网络输入名称。
在新子网部分中,执行以下操作:
在名称字段中,输入子网的名称。
在区域菜单中,选择您为数据平面网络的子网指定的同一区域。
选择 IPv4(单栈)(默认)。
在 IPv4 范围中,以 CIDR 表示法输入有效的 IPv4 范围地址。
点击完成。
在 IPv4 防火墙规则标签页中,选中 NETWORK_NAME-allow-ssh 复选框。
其中,NETWORK_NAME 是您在先前步骤中指定的网络名称。
点击创建。
VPC 网络页面随即打开。VPC 网络创建完成可能需要一分钟时间。
gcloud
如需为数据平面创建 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
:您在先前步骤中创建的控制平面网络的名称。
API
如需为数据平面创建 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
:您在先前步骤中创建的控制平面网络的名称。
如需了解创建 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 网络子网的虚拟机:
在 Google Cloud 控制台中,浏览到虚拟机实例。
虚拟机实例页面随即打开。
点击
创建实例。此时会打开创建实例页面。
在名称字段中,为虚拟机输入名称。
在区域菜单中,选择您在前面步骤中创建了网络的同一区域。
在可用区菜单中,为您的虚拟机选择一个可用区。
在机器配置部分中,执行以下操作:
从下列选项中选择一项:
对于常见工作负载,请选择通用标签页(默认)。
对于需要高性能的工作负载,请选择计算优化标签页。
对于内存与 vCPU 比率较高的工作负载,请选择内存优化标签页。
对于使用图形处理单元 (GPU) 的工作负载,请选择 GPU 标签页。
可选。如果您在上一步中指定了 GPU,并且想要更改 GPU 以挂接到虚拟机,请执行以下操作中的一项或多项:
在 GPU 类型菜单中,选择 GPU 的类型。
在 GPU 数量菜单中,选择 GPU 的数量。
在系列菜单中,选择一个机器系列。
在机器类型菜单中,选择一种机器类型。
可选:展开高级配置,然后按照提示进一步自定义此虚拟机的机器。
可选:在启动磁盘部分,点击更改,然后按照提示更改磁盘映像。
展开高级选项部分。
展开网络部分。
在网络性能配置部分中,执行以下操作:
在网络接口卡菜单中,选择以下选项之一:
如需使用 gVNIC,请选择 gVNIC。
要使用 VirtIO-Net,请选择 VirtIO。
可选:如需提高网络性能并减少延迟时间,请选中启用 Tier_1 网络复选框。
在网络接口部分中,执行以下操作:
在默认行中,点击
删除项“默认”。点击添加网络接口。
此时会显示新建网络接口部分。
在网络菜单中,选择您在先前步骤中创建的控制平面网络。
点击完成。
再次点击添加网络接口。
此时会显示新建网络接口部分。
在网络菜单中,选择您在先前步骤中创建的数据平面网络。
点击完成。
点击创建。
虚拟机实例页面随即打开。虚拟机创建过程最多可能需要一分钟。
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
请替换以下内容:
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
:要在其中创建虚拟机的可用区。指定您在前面步骤中创建的子网所在区域中的可用区。
例如,在 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"
}
]
}
请替换以下内容:
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
:您在先前步骤中创建的控制平面网络的子网名称。
例如,在 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,请按照以下步骤操作:
使用 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
安装驱动程序
如需准备 DPDK 以在驱动程序上运行,请通过选择以下方法之一来安装该驱动程序:
安装无 IOMMU 的 VFIO
如需安装没有 IOMMU 的 VFIO 驱动程序,请按照以下步骤操作:
检查是否已启用 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'
安装 UIO
如需在 DPDK 上安装 UIO 驱动程序,请选择以下方法之一:
使用 Git 安装 UIO
如需使用 git
在 DPDK 上安装 UIO 驱动程序,请按照以下步骤操作:
将
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
使用 Linux 软件包安装 UIO
如需使用 Linux 软件包在 DPDK 上安装 UIO 驱动程序,请按照以下步骤操作:
-
sudo apt-get install -y dpdk-igb-uio-dkms
在 DPDK 上安装 UIO 驱动程序:
sudo modprobe igb_uio
将 DPDK 绑定到驱动程序并进行测试
如需将 DPDK 绑定到您在上一部分中安装的驱动程序,请按以下步骤操作:
获取当前网络接口的外设组件互连 (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
使用 DPDK 后,您可以将其与上一部分中安装的驱动程序解除绑定。如需取消绑定 DPDK,请按以下步骤操作:
将 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 优化。