本文說明如何在虛擬機器 (VM) 執行個體上啟用資料平面開發套件 (DPDK),加快網路封包處理速度。
DPDK 是一種架構,適用於需要快速封包處理、低延遲和穩定效能的效能密集型應用程式。DPDK 提供一組資料層程式庫和網路介面控制器 (NIC),可略過核心網路,直接在使用者空間中執行。舉例來說,在 VM 上啟用 DPDK,有助於執行下列作業:
網路功能虛擬化 (NFV) 部署作業
軟體定義網路 (SDN) 應用程式
影片串流或網際網路通訊協定語音應用程式
您可以使用下列其中一種虛擬 NIC (vNIC) 類型,在 VM 上執行 DPDK:
建議:gVNIC
高效能、安全且可擴充的虛擬網路介面,專為 Compute Engine 設計,可取代 virtIO,成為新一代 vNIC。
-
開放原始碼乙太網路驅動程式,可讓 VM 有效率地存取實體硬體,例如區塊儲存空間和網路介面卡。
在虛擬環境中執行 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
-
安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:
gcloud init
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
- Set a default region and zone.
REST
如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。
安裝 Google Cloud CLI。 安裝完成後,執行下列指令初始化 Google Cloud CLI:
gcloud init
如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。
詳情請參閱 Google Cloud 驗證說明文件中的「Authenticate for using REST」。
需求條件
建立要執行 DPDK 的 VM 時,請確認下列事項:
為避免執行應用程式時網路連線中斷,請使用兩個虛擬私有雲網路:
控制層的虛擬私有雲網路
資料層的虛擬私有雲網路
這兩個虛擬私有雲網路都必須指定下列項目:
具有專屬 IP 位址範圍的子網路
子網路位於相同區域
相同類型的 VNIC,也就是 gVNIC 或 VirtIO-Net
建立 VM 時:
您必須指定與兩個 VPC 網路子網路相同的區域。
您必須指定要搭配 DPDK 使用的 vNIC 類型。
您必須為 gVNIC 或 VirtIO-Net 指定支援的機器系列。
限制
在 VM 上執行 DPDK 時,會受到下列限制:
您只能使用單一堆疊子網路,用於 VM 中的兩個虛擬私有雲網路。
如果您使用 gVNIC 做為兩個虛擬私有雲網路的 vNIC 類型,請確認下列事項:
您必須使用 DPDK 22.11 以上版本。
你只能使用支援的磁碟映像檔。
如要在建立 VM 時啟用個別 VM 的 Tier_1 網路效能,以提升網路效能,請務必指定下列項目:
將 gVNIC 設為 vNIC 類型
具有 30 個以上 vCPU 的支援機器類型
設定 VM 執行 DPDK
本節說明如何建立 VM 來執行 DPDK。
建立虛擬私有雲網路
使用 Google Cloud 控制台、Google Cloud CLI 或 Compute Engine API,為資料層和控制層建立兩個 VPC 網路。您稍後可以在建立 VM 時指定這些網路。
控制台
建立資料層的虛擬私有雲網路:
在 Google Cloud 控制台中,前往「VPC networks」(虛擬私有雲網路)。
「VPC networks」(VPC 網路) 頁面隨即開啟。
按一下「建立虛擬私有雲網路」
。「建立虛擬私有雲網路」頁面隨即開啟。
在「Name」(名稱) 欄位中,輸入網路的名稱。
在「New subnet」(新的子網路) 區段中,執行下列操作:
點選「建立」。
「VPC networks」(VPC 網路) 頁面隨即開啟。建立虛擬私有雲網路最多可能需要一分鐘。
為控制平面建立虛擬私有雲網路,並設定防火牆規則,允許透過 SSH 連線至 VM:
再次按一下「建立虛擬私有雲網路」
。「建立虛擬私有雲網路」頁面隨即開啟。
在「Name」(名稱) 欄位中,輸入網路的名稱。
在「New subnet」(新的子網路) 區段中,執行下列操作:
在「IPv4 防火牆規則」分頁中,選取「NETWORK_NAME-allow-ssh」核取方塊。
其中 NETWORK_NAME 是您在先前步驟中指定的網路名稱。
點選「建立」。
「VPC networks」(VPC 網路) 頁面隨即開啟。建立虛擬私有雲網路最多可能需要一分鐘。
gcloud
如要為資料層建立虛擬私有雲網路,請按照下列步驟操作:
使用
gcloud compute networks create
指令建立虛擬私有雲網路,當中包含手動建立的子網路,並將--subnet-mode
旗標設為custom
。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
指令,為您剛建立的虛擬私有雲資料平面網路建立子網路。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
:以 CIDR 標記法表示的子網路有效 IPv4 範圍。REGION
:要建立子網路的區域。
如要為控制平面建立虛擬私有雲網路,並設定允許透過 SSH 連線至 VM 的防火牆規則,請按照下列步驟操作:
使用
gcloud compute networks create
指令建立虛擬私有雲網路,當中包含手動建立的子網路,並將--subnet-mode
旗標設為custom
。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
指令,為剛建立的虛擬私有雲控制平面網路建立子網路。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
:以 CIDR 標記法表示的子網路有效 IPv4 範圍。REGION
:要建立子網路的地區,必須與您在資料平面網路的子網路中指定的地區相符。
使用
gcloud compute firewall-rules create
指令建立虛擬私有雲防火牆規則,允許透過--allow
旗標設為tcp:22
的控制平面網路進行 SSH 連線。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
如要為資料層建立虛擬私有雲網路,請按照下列步驟操作:
建立虛擬私有雲網路,並透過向
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
要求。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 存取 VM 的防火牆規則,請按照下列步驟操作:
建立虛擬私有雲網路,並透過向
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
要求。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 連線至控制平面網路。 在要求中,將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
:您在先前步驟中建立的控制平面網路名稱。
如要進一步瞭解建立虛擬私有雲網路時的設定選項,請參閱「建立及管理虛擬私有雲網路」。
建立使用虛擬私有雲網路的 DPDK VM
使用 Google Cloud 主控台、gcloud CLI 和 Compute Engine API,在先前建立的兩個 VPC 網路中,建立啟用 gVNIC 或 virtIO-Net 的 VM。
建議:指定 Ubuntu LTS 或 Ubuntu Pro 做為作業系統映像檔,因為這些映像檔的套件管理員支援 UIO 和不含 IOMMU 的 VFIO 驅動程式。如果不想指定任何作業系統,建議指定 Debian 11 以上版本,以加快封包處理速度。
控制台
建立 VM,使用您在先前步驟中建立的兩個虛擬私有雲網路子網路,方法如下:
前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。
「VM instances」(VM 執行個體) 頁面隨即開啟。
按一下「建立執行個體」
。「Create an instance」(建立執行個體) 頁面會隨即開啟。
在「Name」(名稱) 欄位,輸入 VM 的名稱。
在「Region」(區域) 選單中,選取您在先前步驟中建立網路的相同區域。
在「Zone」(可用區) 選單中,選取 VM 的可用區。
在「機器設定」專區中,執行下列操作:
選取下列選項之一:
如為一般工作負載,請選取「一般用途」分頁標籤 (預設)。
如要處理需要大量運算資源的工作負載,請選取「運算最佳化」分頁標籤。
如要處理記憶體/vCPU 比率較高的工作負載,請選取「記憶體最佳化」分頁標籤。
如要查看使用圖形處理器 (GPU) 的工作負載,請選取「GPU」分頁標籤。
(選用步驟) 如果您在上一個步驟中指定 GPU,且想要變更要連結至 VM 的 GPU,請執行下列一或多項操作:
在「GPU type」(GPU 類型) 選單中,選取 GPU 類型。
在「Number of GPUs」(GPU 數量) 選單中,選取 GPU 數量。
在「系列」選單中,選取機器系列。
在「Machine type」(機器類型) 選單中,選取機器類型。
選用:展開「進階設定」,然後按照提示進一步自訂這個 VM 的機器。
選用:在「Boot disk」(開機磁碟) 區段中,按一下「Change」(變更),然後按照提示變更磁碟映像檔。
展開「Advanced options」(進階選項) 區段。
展開「Networking」(網路) 區段。
在「網路效能設定」部分,執行下列操作:
在「網路介面卡」選單中,選取下列其中一個選項:
如要使用 gVNIC,請選取「gVNIC」gVNIC。
如要使用 VirtIO-Net,請選取「VirtIO」VirtIO。
選用步驟:如要提升網路效能並縮短延遲時間,請勾選「啟用 Tier_1 網路」核取方塊。
在「Network interfaces」(網路介面) 區段中,執行下列操作:
在「default」列中,按一下
「Delete item "default"」(刪除「default」項目)。按一下「新增網路介面」。
系統會顯示「New network interface」(新增網路介面) 區段。
在「Network」(網路) 選單中,選取您在先前步驟中建立的控制層網路。
按一下 [完成]。
再次按一下「新增網路介面」。
系統會顯示「New network interface」(新增網路介面) 區段。
在「Network」(網路) 選單中,選取您在先前步驟中建立的資料平面網路。
按一下 [完成]。
點選「建立」。
「VM instances」(VM 執行個體) 頁面隨即開啟。建立 VM 最多可能需要一分鐘。
gcloud
使用
gcloud compute instances create
指令搭配下列旗標,建立使用您在上一個步驟中建立的兩個虛擬私有雲網路子網路的 VM: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
:VM 名稱。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
:要在哪個可用區建立 VM。在您於前一個步驟建立子網路的相同區域中,指定一個可用區。
舉例來說,如要在
us-central1-a
區域中建立名為dpdk-vm
的 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
要求,並填入下列欄位,即可建立使用您在先前步驟中建立的兩個虛擬私有雲網路子網路的 VM: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。VM_NAME
:VM 名稱。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
的 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" } }
如要進一步瞭解建立 VM 時的設定選項,請參閱「建立及啟動 VM 執行個體」。
在 VM 上安裝 DPDK
如要在 VM 上安裝 DPDK,請按照下列步驟操作:
使用 SSH 連線至上一節建立的 VM。
設定 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 mode」(無 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 存放區複製到 VM 的磁碟: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"
舉例來說,如果 VM 使用
ens4
做為網路介面,PCI 插槽編號就是00:04.0
。停止連線至網路介面的網路介面卡:
sudo ip link set NETWORK_INTERFACE_NAME down
將
NETWORK_INTERFACE_NAME
替換為虛擬私有雲網路中指定的網路介面名稱。如要查看 VM 使用的網路介面,請查看網路介面的設定: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"
舉例來說,如果 VM 使用
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
:您在上一節中指定的網路介面名稱。
後續步驟
查看機器類型的網路頻寬速率。
進一步瞭解如何建立及管理虛擬私有雲網路。
進一步瞭解使用巨型封包的較高 MTU 設定。
進一步瞭解如何透過 TCP 最佳化提升網路效能。
除非另有註明,否則本頁面中的內容是採用創用 CC 姓名標示 4.0 授權,程式碼範例則為阿帕契 2.0 授權。詳情請參閱《Google Developers 網站政策》。Java 是 Oracle 和/或其關聯企業的註冊商標。
上次更新時間:2025-07-31 (世界標準時間)。
-