建立 ULL Compute Engine 執行個體
本文說明如何使用 U4 機器系列的 U4P 或 U4C 機器類型,建立超低延遲 (ULL) Compute Engine 執行個體。
如要瞭解 ULL 基礎架構設定程序的總覽,請參閱「ULL 解決方案的設定總覽」。
事前準備
建立 ULL 運算執行個體前,請先參閱下列各節。
建立虛擬私有雲網路
如果尚未建立,請為每個執行個體的網路介面建立虛擬私有雲網路,詳情請參閱「ULL 解決方案的設定總覽」。
建立配置政策
您可以選擇對 ULL 執行個體套用分散配置政策,提高韌性。詳情請參閱 Compute Engine 說明文件中的「建立及套用分散式刊登位置政策」。
設定專案
將 gcloud CLI 設為使用您的專案。或者,您也可以在下列程序中,為每個指令加入 --project=PROJECT_ID 標記。
gcloud config set project PROJECT_ID
將 PROJECT_ID 替換為專案 ID。
啟用 API
如果尚未啟用,請啟用下列 API。
控制台
如果尚未啟用,請啟用 Compute Engine API。
啟用 API 時所需的角色
如要啟用 API,您必須具備 serviceusage.services.enable 權限。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用情形管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。
gcloud
如果尚未啟用 Compute Engine API,請啟用:
啟用 API 時所需的角色
如要啟用 API,您必須具備 serviceusage.services.enable 權限。如果您建立了專案,可能已透過「擁有者」角色 (roles/owner) 取得這項權限。否則,您可以透過「服務使用情形管理員」角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。
gcloud services enable compute.googleapis.com
必要的角色
如要取得建立 Compute Engine 執行個體所需的權限,請要求管理員授予您下列 IAM 角色:
-
如要建立及管理 Compute 執行個體:
專案的 Compute 執行個體管理員 (
compute.instanceAdmin)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
ULL 執行個體設定總覽
如要建立 ULL 運算執行個體,並將執行個體設定為傳送或接收 ULL 單點傳播和多點傳播流量,請按照下列步驟操作:
| 步驟 | 說明 |
|---|---|
| 建立 ULL 執行個體 | 使用 U4P 或 U4C 機型建立執行個體,並將其網路介面連線至一般用途的虛擬私有雲網路和 ULL 虛擬私有雲網路。如要將執行個體做為多點播送消費者,請將 igmp-query 標記設為 IGMP_QUERY_V2。 |
為 ULL 單點播送流量設定非 nic0 介面的路由 |
在客體 OS 中設定以來源為準的政策轉送,確保輸出封包透過正確的介面離開,並防止非對稱轉送。 |
| 將執行個體設定為 ULL 多播消費者 |
完成下列各項操作,即可在 ULL 網路介面上接收多點傳播流量: 為進一步提升效能,建議您也按照「使用 Onload」或「使用 DPDK」中的程序操作。 |
此外,您可以使用這個頁面的範例指令,測試多點播送連線。
建立 ULL 執行個體
本節說明如何建立新執行個體,用於 ULL 單點傳播和多點傳播。
如要瞭解如何建立運算執行個體 (包括其他設定選項),請參閱「建立及啟動 Compute Engine 執行個體」。
gcloud
如要建立 ULL 執行個體,請使用 compute instances create 指令。
ULL 執行個體支援的網路介面類型為 GVNIC。
您必須加入 queue-count 欄位,並為 XDP 支援指定 32 值。
對於附加至 ULL VPC 網路的網路介面,必須指定 no-address。
此外,下列指令包含 igmp-query 旗標,可讓執行個體成為多點播送消費者。如果執行個體僅為多點傳播製作人,或執行個體只傳送及接收單點傳播,則不需要這個標記。
gcloud compute instances create INSTANCE_NAME \
--zone=ZONE \
--machine-type=MACHINE_TYPE \
--image-project=IMAGE_PROJECT \
--image-family=IMAGE_FAMILY \
--maintenance-policy=TERMINATE \
--network-interface=nic-type=GVNIC,queue-count=32,network=GENERAL_PURPOSE_VPC_NETWORK,subnet=GENERAL_PURPOSE_SUBNET \
--network-interface=nic-type=GVNIC,queue-count=32,network=ULL_VPC_NETWORK,subnet=ULL_SUBNET_1,no-address,igmp-query=IGMP_QUERY_V2 \
--network-interface=nic-type=GVNIC,queue-count=32,network=ULL_VPC_NETWORK,subnet=ULL_SUBNET_2,no-address,igmp-query=IGMP_QUERY_V2
替換下列值:
ZONE:要建立執行個體的可用區INSTANCE_NAME:執行個體的名稱MACHINE_TYPE:執行個體的 U4P 或 U4C 機型IMAGE_PROJECT:圖片專案,例如rhel-cloud。請參閱「U4 機器類型支援的作業系統」。IMAGE_FAMILY:映像檔系列,例如rhel-10-2-eus-oot-gve。 請參閱「U4 機器類型支援的作業系統」。指定映像檔系列時,系統會使用該系列中未淘汰的最新 OS 映像檔版本建立執行個體。 或者,您也可以改用
--image旗標,並指定映像檔版本。GENERAL_PURPOSE_VPC_NETWORK、GENERAL_PURPOSE_SUBNET: 要將執行個體的nic0介面附加至的虛擬私有雲網路和子網路ULL_VPC_NETWORK:要附加非nic0介面的 ULL 虛擬私有雲網路ULL_SUBNET_1:ULL 虛擬私有雲網路中的子網路,用於附加nic1介面ULL_SUBNET_2:ULL 虛擬私有雲網路中的子網路,用於附加nic2介面
為 ULL 單點傳播流量設定非 nic0 介面的路由
根據預設,執行個體會使用與 nic0 介面相關聯的預設路徑,將流量傳送至直接連線子網路以外的任何目的地。詳情請參閱「多個網路介面總覽」。
如要讓執行個體的 nic1 和 nic2 介面順利傳送及接收 ULL 單點播送流量,您必須在客體 OS 中設定以來源為準的政策路由。這項設定可確保輸出封包透過正確的介面離開,並防止非對稱路由 (流量進入一個介面,但嘗試透過 nic0 離開)。
如需設定政策路由的範例,請參閱「為額外網路介面設定路由」教學課程中的「設定政策路由」。
將執行個體設定為 ULL 多點傳播消費者
本節說明如何將現有的 ULL 執行個體設定為多點播送消費者。
在現有 ULL 執行個體上啟用 IGMP 查詢
如果在建立執行個體時未啟用 IGMP,可以按照本節說明,在現有執行個體上啟用 IGMP。
gcloud
如要在現有 ULL 執行個體上啟用 IGMP 查詢,請使用 compute instances network-interfaces update 指令。
針對要接收多點播送流量的每個網路介面,重複執行下列指令。
gcloud compute instances network-interfaces update INSTANCE_NAME \
--zone=ZONE \
--network-interface=NETWORK_INTERFACE_NAME \
--igmp-query=IGMP_QUERY_V2
替換下列值:
INSTANCE_NAME:執行個體的名稱ZONE:執行個體的可用區NETWORK_INTERFACE_NAME:要啟用 IGMP 查詢的網路介面名稱。在 Google Cloud中,格式為nicNUMBER,例如nic0、nic1或nic2。
在客體 OS 中設定 IGMPv2
如要在執行個體的客體 OS 中設定 IGMPv2,請按照下列步驟操作:
使用 SSH 連線至執行個體。
執行下列指令,找出要接收多點傳播流量的網路介面裝置名稱。
sudo ifconfig
針對每個適用的網路介面,執行下列指令來強制使用 IGMPv2。
sudo -i echo "2" > /proc/sys/net/ipv4/conf/NETWORK_INTERFACE_DEVICE_NAME/force_igmp_version
將
NETWORK_INTERFACE_DEVICE_NAME換成網路介面的裝置名稱,例如eth0、eth1或eth2。
設定反向路徑篩選器 (rp_filter)
在某些情況下,例如使用多 NIC 執行個體時,反向路徑篩選 (rp-filter) 的嚴格來源驗證可能會導致系統捨棄合法的多點傳播封包。為避免發生這種情況,您可以設定反向路徑篩選,在接收多點傳播流量的非 nic0 網路介面上,放寬或停用來源驗證。舉例來說,下列指令會將 rp_filter 設為 0,藉此設定反向路徑篩選功能,在 eth1 和 eth2 上停用來源驗證。
sudo sysctl -w net.ipv4.conf.all.rp_filter=0 sudo sysctl -w net.ipv4.conf.eth1.rp_filter=0 sudo sysctl -w net.ipv4.conf.eth2.rp_filter=0
如要進一步瞭解 rp_filter,請參閱 Linux 核心說明文件中的「IP Sysctl」。
增加網路驅動程式的環形緩衝區空間
本節說明如何增加執行個體上網路驅動程式的環形緩衝區空間。
如果多點傳播消費者收到大量流量,請將網路驅動程式的環狀緩衝區大小增加至 2048,以避免封包遺失。請為接收多點播送流量的每個網路介面執行這項操作。
請參閱下列範例指令,瞭解如何設定 nic1 和 nic2:
sudo ethtool -G eth1 rx 2048 tx 2048 sudo ethtool -G eth2 rx 2048 tx 2048
測試 ULL 多點傳播連線的範例指令
本節提供範例指令,可使用 iperf 工具測試多點傳播流量,不必啟動應用程式工作負載。本節中的步驟需要完成「ULL Solution 設定總覽」一文所述的多點播送設定。
從多點傳播供應端傳送 ULL 多點傳播流量
使用 SSH 連線至執行個體。
如果尚未安裝,請先安裝
iperf。iperf3不支援多點播送。 下列指令會使用iperf安裝iperf2。sudo yum install iperf
如要將多點播送流量傳送至多點播送群組 IP 位址,請執行下列指令:
iperf -c MULTICAST_GROUP_ADDRESS%NIC -p 1234 -l 512 -i 1 -u -b 1000pps -t 999999 -B NIC_IP_ADDRESS
替換下列值:
MULTICAST_GROUP_ADDRESS:多點傳播群組 IP 位址NIC網路介面裝置名稱,例如eth1或eth2NIC_IP_ADDRESS指派給指定 NIC 的 IP 位址
加入群組,並接收來自多點傳播用戶的 ULL 多點傳播流量
使用 SSH 連線至執行個體。
如果尚未安裝,請先安裝
iperf。sudo yum install iperf
如要加入多點傳播群組並記錄收到的流量,請執行下列指令:
iperf -s -p 1234 -B MULTICAST_GROUP_ADDRESS%NIC -l 512 -u -i 1
替換下列值:
MULTICAST_GROUP_ADDRESS多點傳播群組 IP 位址NIC網路介面裝置名稱,例如eth1或eth2
舉例來說,下列指令會加入 IP 位址為
224.1.0.176的群組,接收最多 512 位元組的封包,並記錄收到的流量:iperf -s -p 1234 -B 224.1.0.176%eth1 -l 512 -u -i 1
確認 ULL 連結狀態和速度
在執行個體的 ULL 網路介面上,ethtool 會顯示實際的實體連接埠連結狀態 (up/down) 和實體連結速度。
如要檢查 ULL 網路介面的實體連結狀態和速度,請執行下列指令:
sudo ethtool NIC
將 NIC 替換為客層 OS 指派的網路介面名稱,例如 ens8f0 或 ens48f0。
後續步驟
- 如要大致瞭解如何排解裸機執行個體的網路效能問題,請參閱 Compute Engine 說明文件中的「排解網路效能問題」。舉例來說,您可以停用 CPU 休眠狀態,充分發揮網路頻寬效能。
- 如要設定 Onload 或 DPDK 來提升效能,請參閱「使用 Onload」和「使用 DPDK」。
- 如要將執行個體系統時鐘與主機伺服器的實體 NIC 時鐘同步,請參閱「設定準確時間」。