本文說明如何在虛擬機器 (VM) 執行個體上啟用資料層開發套件 (DPDK),以便加快網路封包處理速度。
DPDK 是一種架構,適用於需要快速封包處理、低延遲時間和一致效能的效能密集型應用程式。DPDK 提供一組資料層程式庫和網路介面控制器 (NIC),可略過核心網路並直接在使用者空間中執行。舉例來說,在 VM 上啟用 DPDK 可用於執行下列作業:
網路功能虛擬化 (NFV) 部署
軟體定義網路 (SDN) 應用
影片串流或 IP 語音應用程式
您可以使用下列其中一種虛擬 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
-
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
- 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.
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
For more information, see Authenticate for using REST in the Google Cloud authentication documentation.
-
需求條件
建立用於執行 DPDK 的 VM 時,請確認下列事項:
為避免在執行應用程式時缺乏網路連線,請使用兩個虛擬私有雲網路:
控制層的虛擬私有雲網路
資料層的 VPC 網路
這兩個虛擬私有雲網路都必須指定下列項目:
具有不重複 IP 位址範圍的子網路
子網路位於相同的區域
相同類型的 VNIC,也就是 gVNIC 或 VirtIO-Net
建立 VM 時:
您必須指定與兩個虛擬私有雲網路子網路相同的區域。
您必須指定要與 DPDK 搭配使用的 vNIC 類型。
您必須為 gVNIC 或 VirtIO-Net 指定支援的機器系列。
限制
在 VM 上執行 DPDK 時,有下列限制:
您只能為 VM 中使用的兩個虛擬私有雲網路使用單一堆疊子網路。
如果您使用 gVNIC 做為兩個 VPC 網路的 vNIC 類型,請確認下列事項:
您必須使用 DPDK 22.11 以上版本。
您只能使用支援的磁碟映像檔。
如果您想在建立 VM 時啟用個別 VM Tier_1 網路效能,以便提高網路效能,則必須指定下列項目:
使用 gVNIC 做為 vNIC 類型
支援的機器類型 (具有 30 個 vCPU 以上)
設定 VM 以執行 DPDK
本節說明如何建立可執行 DPDK 的 VM。
建立虛擬私有雲網路
使用 Google Cloud 控制台、Google Cloud CLI 或 Compute Engine API,為資料層和控制層建立兩個 VPC 網路。您稍後可以在建立 VM 時指定這些網路。
控制台
建立資料層的虛擬私有雲網路:
在 Google Cloud 控制台中,前往「虛擬私有雲網路」。
系統會開啟「VPC networks」(虛擬私有雲網路) 頁面。
按一下「建立虛擬私有雲網路」。
「Create a VPC network」(建立虛擬私有雲網路) 頁面會隨即開啟。
在「Name」欄位中,輸入網路的名稱。
在「New subnet」(新的子網路) 區段中,執行下列操作:
在「名稱」欄位中,輸入子網路的名稱。
在「Region」選單中,選取子網路的區域。
選取「IPv4 (單一堆疊)」(預設)。
在「IPv4 範圍」中,以 CIDR 標記法輸入有效的 IPv4 範圍位址。
按一下 [完成]。
按一下 [建立]。
系統會開啟「VPC networks」頁面。虛擬私有雲端網路的建立作業最多可能需要一分鐘才能完成。
為控制平面建立虛擬私有雲網路,並設定防火牆規則,允許 VM 使用 SSH 連線:
再次按一下「建立虛擬私有雲網路」
。「Create a VPC network」(建立虛擬私有雲網路) 頁面隨即開啟。
在「Name」欄位中,輸入網路的名稱。
在「New subnet」(新的子網路) 區段中,執行下列操作:
在「名稱」欄位中,輸入子網路的名稱。
在「Region」選單中,選取您為資料層網路子網路指定的區域。
選取「IPv4 (單一堆疊)」(預設)。
在「IPv4 範圍」中,以 CIDR 標記法輸入有效的 IPv4 範圍位址。
按一下 [完成]。
在「IPv4 防火牆規則」分頁中,選取「NETWORK_NAME-allow-ssh」核取方塊。
其中 NETWORK_NAME 是您在先前步驟中指定的網路名稱。
按一下 [建立]。
系統會開啟「VPC networks」頁面。虛擬私人雲端網路的建立作業最多可能需要一分鐘才能完成。
gcloud
如要為資料層建立虛擬私有雲網路,請按照下列步驟操作:
使用
gcloud compute networks create
指令建立 VPC 網路,並將--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
指令,為您剛建立的 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
:以 CIDR 標記法表示的子網路有效 IPv4 範圍。REGION
:建立子網路的區域。
如要為控制平面建立 VPC 網路,並設定防火牆規則,允許 VM 接受 SSH 連線,請按照下列步驟操作:
使用
gcloud compute networks create
指令建立 VPC 網路,並將--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
:建立子網路的區域,必須與您在資料層網路子網路中指定的區域相符。
建立 VPC 防火牆規則,使用
gcloud compute firewall-rules create
指令允許 SSH 進入控制平面網路,並將--allow
標記設為tcp:22
。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
如要為資料層建立虛擬私有雲網路,請按照下列步驟操作:
請將
autoCreateSubnetworks
欄位設為false
,向networks.insert
方法提出POST
要求,藉此建立含有手動建立子網路的虛擬私有雲網路。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
:您在上一個步驟中建立的資料平面網路名稱。
如要為控制平面建立 VPC 網路,並設定防火牆規則,允許 SSH 連線至 VM,請按照下列步驟操作:
請將
autoCreateSubnetworks
欄位設為false
,向networks.insert
方法提出POST
要求,藉此建立含有手動建立子網路的虛擬私有雲網路。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
:您在上一個步驟中建立的控制平面網路名稱。
建立 VPC 防火牆規則,透過對
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。
建議做法:指定 Ubuntu LTS 或 Ubuntu Pro 做為作業系統映像檔,因為這些套件管理工具支援 UIO 和無 IOMMU 的 VFIO 驅動程式。如果您不想指定任何作業系統,建議指定 Debian 11 以上版本,以便加快封包處理作業。
控制台
請按照下列步驟,建立使用您在先前步驟中建立的兩個虛擬私有雲網路子網路的 VM:
在 Google Cloud 控制台中,前往「VM instances」(VM 執行個體)。
「VM instances」(VM 執行個體) 頁面隨即開啟。
按一下
「Create instance」(建立執行個體)。「Create an instance」(建立執行個體) 頁面會隨即開啟。
在「Name」(名稱) 欄位,輸入 VM 的名稱。
在「Region」選單中,選取先前步驟中建立網路所在的區域。
在「Zone」選單中,選取 VM 的區域。
在「機器設定」專區中,執行下列操作:
選取下列選項之一:
如要使用一般工作負載,請選取「一般用途」分頁標籤 (預設)。
如果是需要大量運算資源的工作負載,請選取「運算最佳化」分頁標籤。
如果工作負載的記憶體/vCPU 比率較高,請選取「記憶體最佳化」分頁。
如果工作負載使用圖形處理器 (GPU),請選取「GPU」分頁。
選用設定。如果您在上一個步驟中指定了 GPU,但想變更要連結至 VM 的 GPU,請執行下列一或多項操作:
在「GPU type」選單中,選取 GPU 類型。
在「Number of GPUs」(GPU 數量) 選單中,選取 GPU 數量。
在「系列」選單中,選取機器系列。
在「Machine type」(機器類型) 選單中選取機器類型。
選用:展開「進階設定」,然後按照提示進一步自訂此 VM 的機器。
選用步驟:在「Boot disk」(開機磁碟) 部分中,按一下「Change」(變更),然後按照提示變更磁碟映像檔。
展開「Advanced options」(進階選項) 區段。
展開「Networking」(網路) 區段。
在「Network performance configuration」(網路效能設定) 部分,執行下列操作:
在「Network interface card」選單中,選取下列任一選項:
如要使用 gVNIC,請選取「gVNIC」。
如要使用 VirtIO-Net,請選取「VirtIO」。
選用步驟:如要提高網路效能並縮短延遲時間,請選取「Enable Tier_1 networking」核取方塊。
在「Network interfaces」(網路介面) 專區中,執行下列操作:
在「預設」資料列中,依序按一下
「刪除項目『預設』」。按一下「新增網路介面」。
畫面上會顯示「New network interface」部分。
在「Network」(網路) 選單中,選取您在先前步驟中建立的控制層網路。
按一下 [完成]。
再次按一下「新增網路介面」。
畫面上會顯示「New network interface」部分。
在「Network」選單中,選取您在先前步驟中建立的資料層網路。
按一下 [完成]。
按一下 [建立]。
「VM instances」(VM 執行個體) 頁面隨即開啟。最多可能需要一分鐘才能完成 VM 建立作業。
gcloud
使用 gcloud compute instances create
指令搭配下列旗標,建立使用您在先前步驟中建立的兩個 VPC 網路子網路的 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 永久磁碟、預先定義的 C2 機器類型 (60 個 vCPU)、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 網路子網路的 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
:控制平面虛擬私有雲網路和資料平面虛擬私有雲網路所在專案的 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 永久磁碟、預先定義的 C2 機器類型 (60 個 vCPU)、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 模式:
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 最佳化。