建立 ULL Compute Engine 執行個體

本頁說明如何使用 U4 機器家族的 U4P 或 U4C 機型,建立超低延遲 (ULL) Compute Engine 執行個體。

如要瞭解 ULL 基礎架構設定程序,請參閱「ULL 解決方案設定總覽」。

事前準備

建立 ULL 計算執行個體前,請參閱下列各節。

建立虛擬私有雲網路

如果尚未建立執行個體網路介面的虛擬私有雲網路,請參閱「ULL Solution 的設定總覽」一文。

建立配置政策

您可以選擇將分散配置政策套用至 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) 取得這項權限。瞭解如何授予角色

啟用 API

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 虛擬私有雲網路,必須指定 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_NETWORKGENERAL_PURPOSE_SUBNET: 要將執行個體的 nic0 介面附加至的虛擬私有雲網路和子網路

  • ULL_VPC_NETWORK:要附加非 nic0 介面的 ULL 虛擬私有雲網路

    • ULL_SUBNET_1:ULL 虛擬私有雲網路中的子網路,用於附加 nic1 介面

    • ULL_SUBNET_2:ULL 虛擬私有雲網路中的子網路,用於附加 nic2 介面

為 ULL 單點播送流量設定非 nic0 介面的路由

根據預設,執行個體會使用與 nic0 介面相關聯的預設路徑,將流量傳送至直接連線子網路以外的任何目的地。詳情請參閱多個網路介面總覽

如要讓執行個體的 nic1nic2 介面順利傳送及接收 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,例如 nic0nic1nic2

在客體 OS 中設定 IGMPv2

如要在執行個體的客體 OS 中設定 IGMPv2,請按照下列步驟操作:

  1. 使用 SSH 連線至執行個體

  2. 執行下列指令,找出要接收多點傳播流量的網路介面裝置名稱。

    sudo ifconfig
    
  3. 針對每個適用的網路介面,執行下列指令來強制使用 IGMPv2。

    sudo -i
    echo "2" > /proc/sys/net/ipv4/conf/NETWORK_INTERFACE_DEVICE_NAME/force_igmp_version
    

    NETWORK_INTERFACE_DEVICE_NAME 替換為網路介面的裝置名稱,例如 eth0eth1eth2

設定反向路徑篩選 (rp_filter)

在某些情況下,例如使用多 NIC 執行個體時,反向路徑篩選 (rp-filter) 的嚴格來源驗證可能會導致系統捨棄合法的多點傳播封包。如要避免這種情況,您可以設定反向路徑篩選,在接收多點傳播流量的非 nic0 網路介面上,放寬或停用來源驗證。舉例來說,下列指令會將 rp_filter 設為 0,藉此設定反向路徑篩選功能,在 eth1eth2 上停用來源驗證。

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,以避免封包遺失。針對接收多點播送流量的每個網路介面執行這項操作。

請參閱下列範例指令,瞭解如何設定 nic1nic2

sudo ethtool -G eth1 rx 2048 tx 2048
sudo ethtool -G eth2 rx 2048 tx 2048

測試 ULL 多點傳播連線的指令範例

本節提供範例指令,說明如何使用 iperf 工具測試多點播送流量,而不需啟動應用程式工作負載。本節中的步驟需要完成ULL Solution 的設定總覽所述的多點播送設定。

從多點傳播供應端傳送 ULL 多點傳播流量

  1. 使用 SSH 連線至執行個體

  2. 如果尚未安裝 iperf,請先完成這項程序。iperf3 不支援多點播送。 下列指令會使用 iperf 安裝 iperf2

    sudo yum install iperf
    
  3. 如要將多點播送流量傳送至多點播送群組 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 網路介面裝置名稱,例如 eth1eth2
    • NIC_IP_ADDRESS 指派給您指定 NIC 的 IP 位址

加入群組,並接收來自多點傳播用戶的 ULL 多點傳播流量

  1. 使用 SSH 連線至執行個體

  2. 如果尚未安裝 iperf,請先完成這項程序。

    sudo yum install iperf
    
  3. 如要加入多點播送群組並記錄收到的流量,請執行下列指令:

    iperf -s -p 1234 -B MULTICAST_GROUP_ADDRESS%NIC -l 512 -u -i 1
    

    替換下列值:

    • MULTICAST_GROUP_ADDRESS 多點傳播群組 IP 位址
    • NIC 網路介面裝置名稱,例如 eth1eth2

    舉例來說,下列指令會加入 IP 位址為 224.1.0.176 的群組,接收最多 512 位元組的封包,並記錄收到的流量:

    iperf -s -p 1234 -B 224.1.0.176%eth1 -l 512 -u -i 1
    

在執行個體的 ULL 網路介面上,ethtool 會顯示實際的實體連接埠連結狀態 (up/down) 和實體連結速度。

如要檢查 ULL 網路介面的實體連結狀態和速度,請執行下列指令:

sudo ethtool NIC

NIC 替換為客層 OS 指派的網路介面名稱,例如 ens8f0ens48f0

後續步驟

  • 如要瞭解如何排解裸機執行個體的網路效能問題,請參閱 Compute Engine 說明文件中的排解網路效能問題。舉例來說,您可以停用 CPU 休眠狀態,充分發揮網路頻寬效能。
  • 如要設定 Onload 或 DPDK 來提升效能,請參閱「使用 Onload」和「使用 DPDK」。
  • 如要將執行個體系統時鐘與主機伺服器的實體 NIC 時鐘同步,請參閱「設定準確時間」。