網路頻寬 (original) (raw)

Google Cloud 會計算每個運算執行個體的頻寬,而非每個虛擬網路介面 (vNIC) 或 IP 位址。執行個體的機型會定義其可能的最高輸出速率,但您只能在特定情況下達到該速率。

本頁面列出網路頻寬限制,有助於規劃部署作業。這項指標會根據兩個維度將頻寬分類:

本頁面的所有資訊都適用於 Compute Engine 計算執行個體,以及依附於 Compute Engine 執行個體的產品。舉例來說,Google Kubernetes Engine 節點就是 Compute Engine 執行個體。

影響網路頻寬的設定

額外的虛擬網路介面 (vNIC) 和每個 vNIC 的額外 IP 位址,都不會增加運算執行個體的輸入或輸出頻寬。舉例來說,具有 22 個 vCPU 的 C3 VM 總輸出頻寬上限為 23 Gbps。如果您為 C3 VM 設定兩個 vNIC,VM 的總輸出頻寬仍會限制為 23 Gbps,而不是每個 vNIC 的頻寬為 23 Gbps。

以下各節說明其他運算執行個體設定如何影響網路頻寬。

使用各個 VM 的 Tier_1 網路效能

如要盡可能提高輸入和輸出頻寬,請為運算執行個體設定 Tier_1 網路

Dynamic Network Interface

動態網路介面會使用父項 vNIC 的頻寬。上層 vNIC 內沒有流量隔離。來自 Dynamic NIC 的網路流量可能會導致與相同上層 vNIC 相關聯的其他 Dynamic NIC 資源不足。如要避免這類衝突,可以使用 Linux 流量控制 (TC) 制定應用程式專屬的流量型態政策。這些政策有助於實作公平性或特定類型的優先順序。如要設定優先順序,請將流量 (例如動態 NIC 的流量) 對應至流量類別,然後將該流量類別對應至服務品質。如需這個方法的範例,請參閱「使用 Red Hat 進行流量控管」。

執行 Windows 作業系統的 Compute Engine 執行個體不支援動態 NIC。

透過 Cloud RDMA 分享頻寬

使用 Cloud RDMA 的應用程式通常會同時使用 TCP 和 RDMA 流量。舉例來說,在高效能運算 (HPC) 工作期間,應用程式通常會在載入和儲存階段使用 TCP 進行通訊,並在運算階段使用 RDMA。使用 GVNIC 處理 TCP 流量的 H4D 執行個體,可提供高達 200 Gbps 的網路頻寬。如果您也將 H4D 執行個體設定為使用 Cloud RDMA,則設定的網路介面會共用網路頻寬。

系統會動態分配 Cloud RDMA 流量和 TCP 流量之間的網路頻寬。GVNIC 網路介面不會將 Cloud RDMA 和 TCP 流量的頻寬限制為 100 Gbps,而是會在未使用 Cloud RDMA 網路介面時,使用所有可用頻寬。同樣地,如果未使用 GVNIC 網路介面,Cloud RDMA 網路介面就能使用所有可用頻寬。如果同時使用這兩種網路介面類型,Cloud RDMA 流量和 TCP 流量會共用頻寬。

頻寬摘要

下表說明封包是從運算執行個體傳送 (輸出) 或由運算執行個體接收 (輸入),以及封包的轉送方式,並列出這些情況下的最大可能頻寬。

輸出頻寬限制

虛擬私有雲網路內的路由 主要取決於每個執行個體的最大輸出頻寬,並根據傳送執行個體的機型和是否啟用 Tier_1 網路而定。 N2、N2D、C2、C2D、M3 和 C4A VM 支援 Tier_1 網路,輸出頻寬上限最高可達 100 Gbps。 H3 VM 支援的 VM 對 VM 輸出頻寬上限為 200 Gbps。 H4D 執行個體支援 VM 對 VM 的輸出頻寬,Cloud RDMA 和 gVNIC 合計最高可達 200 Gbps。 X4、M4、A2 和 G2 執行個體支援的輸出頻寬上限為 100 Gbps。 G4 執行個體支援的輸出頻寬上限為 400 Gbps。 A4X Max 執行個體支援的輸出頻寬上限為 3,600 Gbps。 A4X 執行個體支援的輸出頻寬上限為 2,000 Gbps。 A4 和 A3 執行個體支援的輸出頻寬上限為 3,600 Gbps。 C4、C4D、C3、C3D 和 Z3 執行個體搭配 Tier_1 網路時,最多可支援 200 Gbps 的輸出頻寬限制。 如需其他因素、定義和情境,請參閱「可透過虛擬私有雲網路路由傳輸至目的地的輸出流量」。
將流量路由至虛擬私有雲網路外部 主要取決於傳送執行個體的機型,以及是否啟用 Tier_1 網路,並以每個執行個體的最大輸出頻寬為依據。傳送執行個體輸出至虛擬私有雲網路外部目的地的最大可能流量,不得超過下列限制: 每個流量 3 Gbps 啟用 Tier_1 網路時:總共 25 Gbps 如果未啟用或不支援 Tier_1 網路, 每個機器系列可用的總頻寬如下: G4 執行個體:vCPU 少於 48 個的機器類型總共 7 Gbps,vCPU 達 48 個以上的機器類型總共 28 Gbps H4D 和 H3 機器系列:總共 1 Gbps 支援多個實體 NIC 的機器系列 (例如 A3、A4、A4X 和 A4X Max 執行個體):每個 NIC 7 Gbps 所有其他機器系列:總共 7 Gbps 如要瞭解其他因素、定義和注意事項,請參閱「輸出至虛擬私有雲網路外部目的地」。

輸入頻寬限制

虛擬私有雲網路內的路由 一般來說,輸入費率與機型的輸出費率相近。 如要盡可能提高輸入頻寬,請啟用 Tier_1 網路。 運算執行個體的大小、伺服器 NIC 的容量、傳入在相同主機硬體上執行的其他客層 VM 的流量、客層 OS 網路設定,以及執行個體執行的磁碟讀取次數,都會影響輸入速率。 Google Cloud 不會對虛擬私有雲網路內的輸入速率施加任何額外限制。 如要瞭解其他因素、定義和情境,請參閱「可透過虛擬私有雲網路路由傳送至目的地的輸入流量」。
將流量路由至虛擬私有雲網路外部 Google Cloud 限制從虛擬私有雲網路外部轉送的連入流量,藉此保護每個運算執行個體。限制為下列第一個遇到的費率: 每秒 1,800,000 個封包 30 Gbps 對於支援多個實體 NIC 的機器系列 (例如 A3、A4、A4X 和 A4X Max 執行個體),限制為下列第一個遇到的速率: 每個實體 NIC 每秒 1,800,000 個封包 每個實體 NIC 30 Gbps 如要瞭解其他因素、定義和情境,請參閱「輸入至虛擬私有雲網路外部的目的地」。

輸出頻寬

Google Cloud 使用每個執行個體的最高傳出速率,限制傳出 (Egress) 頻寬。這些速率取決於傳送封包的運算執行個體機型,以及封包目的地是否可透過虛擬私有雲網路內的路由或虛擬私有雲網路外的路由存取。輸出頻寬包括所有執行個體 NIC 發出的封包,以及傳輸至所有 Hyperdisk 和永久磁碟磁碟區的資料。

每個執行個體的輸出頻寬上限

每個執行個體的輸出頻寬上限通常為每個 vCPU 2 Gbps,但視機器系列而定,可能會有差異和例外狀況。下表顯示在虛擬私有雲網路內路由傳送的流量,其輸出頻寬上限範圍。

下表摘要列出各個機器系列的輸出頻寬上限。如要查看每個機型的例項輸出頻寬上限,請前往特定機器家族頁面 (使用表格中各機器系列的連結)。

每個執行個體的輸出上限
機器系列 標準 Tier_1 網路
C4C4D 100 Gbps 200 Gbps
C4A 50 Gbps 100 Gbps
C3C3D 100 Gbps 200 Gbps
C2C2D 32 Gbps 100 Gbps
E2 16 Gbps 不適用
E2 共用核心 2 Gbps 不適用
H4DH3 200 Gbps 不適用
M4 100 Gbps 不適用
M3 32 Gbps 100 Gbps
M2 Intel Cascade Lake 以上 CPU:32 Gbps其他 CPU 平台:16 Gbps 不適用
M1 32 Gbps 不適用
N4N4AN4D 50 Gbps 不適用
N2N2D 32 Gbps 100 Gbps
N1 (不含 1 個 vCPU 的 VM) Intel Skylake 和後續 CPU:32 Gbps較早的 CPU 平台:16 Gbps 不適用
具有 1 個 vCPU 的 N1 機器類型 2 Gbps 不適用
N1 共用核心 (f1-micro 和 g1-small) 1 Gbps 不適用
T2AT2D 32 Gbps 不適用
X4 100 Gbps 不適用
Z3 100 Gbps 200 Gbps

如需加速器最佳化機器系列的網路頻寬資訊,請參閱「網路和 GPU 機器」。

我們無法保證每個執行個體的最高輸出頻寬。實際輸出頻寬可能會因下列因素而降低 (不限於這些因素):

如要取得每個執行個體可用的最大輸出頻寬,請按照下列步驟操作:

輸出至虛擬私有雲網路中可路由傳送的目的地

從傳送執行個體的角度來看,對於可透過「虛擬私有雲網路內」的路由存取的目的地 IP 位址,Google Cloud 會使用這些規則限制輸出流量:

虛擬私有雲網路中可路由傳送的目的地包括下列所有目的地,從傳送執行個體的角度來看,每個目的地都可透過下一個躍點「不是」預設網際網路閘道的路徑存取:

以下清單依據傳送執行個體到內部目的地的流量,從最高可能頻寬到最低排序:

輸出至虛擬私有雲網路外部的目的地

從傳送執行個體的角度來看,如果目的地 IP 位址_位於虛擬私有雲網路外部_, Google Cloud 輸出流量會受限於下列任一速率 (以先達到者為準):

舉例來說,即使 c3-standard-44 VM 的單一執行個體_最大_輸出頻寬為 32 Gbps,從 c3-standard-44 VM 到外部目的地的單一執行個體輸出頻寬為 25 Gbps 或 7 Gbps,具體取決於是否啟用 Tier_1 網路。

虛擬私有雲網路外部的目的地包括下列所有目的地,每個目的地都可透過傳送執行個體虛擬私有雲網路中的路徑存取,且下一個躍點_是_預設網際網路閘道:

如要瞭解哪些 Google Cloud 資源使用哪些類型的外部 IP 位址,請參閱「外部 IP 位址」一文。

輸入頻寬

Google Cloud 處理傳入 (輸入) 頻寬,視傳入封包的路由方式而定,封包會路由至接收端運算執行個體。

可透過虛擬私有雲網路路由傳輸至目的地的輸入流量

接收運算執行個體可處理的傳入封包數量,取決於機器類型、作業系統和其他網路條件。 Google Cloud不會對傳送至執行個體的傳入封包實施任何有目的的頻寬限制 (如果傳入封包是使用虛擬私有雲網路_內_的路徑傳送):

在虛擬私有雲網路中轉送的封包目的地包括:

將流量傳送至虛擬私有雲網路外部的目的地

Google Cloud 會對使用虛擬私有雲網路「外部」路由傳送至接收端執行個體的封包,實作下列頻寬限制。如果涉及負載平衡,頻寬限制會個別套用至每個接收執行個體。

如果機器系列不支援多個實體 NIC,適用的輸入頻寬限制會一併套用至所有虛擬網路介面 (vNIC)。限制為下列第一個遇到的費率:

如果機器系列支援多個實體 NIC,適用的輸入頻寬限制會分別套用至每個實體 NIC。限制為下列第一個遇到的費率:

使用虛擬私有雲網路以外的路徑轉送封包的目的地包括:

使用巨型封包,盡量提高網路頻寬

如要接收及傳送巨型封包,請設定運算執行個體使用的虛擬私有雲網路,並將最大傳輸單元 (MTU) 設為較大的值 (最多 8896)。

MTU 值越高,封包大小就越大,封包標頭的負擔也越小,進而提高酬載資料的總處理量。

您可以在 VM 執行個體上使用 gVNIC 驅動程式 1.3 以上版本,或在裸機執行個體上使用 IDPF 驅動程式,來使用巨型封包。並非所有 Google Cloud 公開映像檔都包含這些驅動程式。如要進一步瞭解作業系統對巨型封包的支援情形,請參閱「作業系統詳細資料」頁面的「網路功能」分頁。

如果您使用的 OS 映像檔未完全支援巨型封包,可以手動安裝 gVNIC 驅動程式 1.3.0 以上版本。Google 建議安裝標示 Latest 的 gVNIC 驅動程式版本,以享有額外功能和錯誤修正。您可以從 GitHub 下載 gVNIC 驅動程式。

如要在客體 OS 中手動更新 gVNIC 驅動程式版本,請參閱「在不支援的作業系統上使用」一節。

巨型封包和 GPU 機器

如果是 GPU 機器類型,請使用巨型封包的建議 MTU 設定。詳情請參閱「巨型封包的建議 MTU 設定」。

接收及傳輸佇列

運算執行個體的每個 NIC 或 vNIC 都會指派多個接收和傳輸佇列,用於處理來自網路的封包。

預設佇列分配

除非您明確為 NIC 指派佇列計數,否則可以透過下列方式,模擬演算法 Google Cloud 為每個 vNIC 指派固定數量的 RX 和 TX 佇列:

裸機執行個體

Bare Metal 執行個體只有一個 vNIC,因此佇列數量上限為 16。

使用 gVNIC 網路介面的 VM 執行個體

如果是 C4 執行個體,如要提升效能,下列設定會使用固定數量的佇列:

如果是其他機器系列,佇列數量取決於機器系列是否使用 Titanium

如要完成預設佇列數計算,請按照下列步驟操作:

  1. 如果計算出的數字小於 1,請改為為每個 vNIC 指派一個佇列。
  2. 判斷計算出的數字是否大於每個 vNIC 的佇列數上限 (16)。如果計算出的數字大於 16,請忽略該數字,並為每個 vNIC 指派 16 個佇列。

使用 VirtIO 網路介面或自訂驅動程式的 VM 執行個體

將 vCPU 數量除以 vNIC 數量,並捨棄任何餘數 ([number of vCPUs/number of vNICs])。

  1. 如果計算出的數字小於 1,請改為為每個 vNIC 指派一個佇列。
  2. 判斷計算出的數字是否大於每個 vNIC 的佇列數上限 (32)。如果計算出的數字大於 32,請忽略該數字,並為每個 vNIC 指派 32 個佇列。

H4D 執行個體搭配 Cloud RDMA

對於使用 Cloud RDMA 的 H4D 執行個體,每個實體主機都會執行單一運算執行個體。因此執行個體會取得所有可用的佇列配對。H4D 執行個體有 16 個 gVNIC 網路介面佇列,以及 16 個 IRDMA 網路介面佇列。

範例

以下範例說明如何計算 VM 執行個體的預設佇列數量:

在 Linux 系統上,您可以使用 ethtool 設定 vNIC,佇列數量少於每個 vNIC 指派的佇列數量 Google Cloud 。

使用 Dynamic Network Interface 時的佇列計數

如果您搭配網路介面使用動態網路介面,佇列計數不會變更。Dynamic NIC 沒有自己的接收和傳輸佇列,而是使用與父項 vNIC 相同的佇列。

為 VM 執行個體自訂佇列分配

使用 Compute Engine API 建立新的運算執行個體時,您可以為每個 vNIC 指派自訂佇列數量 (RX 和 TX 佇列的總數),而不使用預設佇列分配

您指定的自訂佇列數量必須符合下列規則:

透過_佇列超額訂閱_,您可以為 VM 執行個體的每個 vNIC 指派最多 16 個佇列,即使 VM 的佇列總數超過 vCPU 數量也沒關係。如要超額訂閱自訂佇列計數,VM 執行個體必須符合下列條件:

使用佇列超額訂閱時,VM 執行個體的佇列數量上限為 vNIC 數量的 16 倍。因此,如果您為具有 30 個 vCPU 的執行個體設定 6 個 vNIC,則最多可為 VM 執行個體設定 (16 * 6) 個自訂佇列,也就是 96 個。

範例

您也可以_只為部分 vNIC_ 指派自訂佇列計數,讓 Compute Engine 為其餘 vNIC 指派佇列。每個 vNIC 可指派的佇列數量仍須遵守先前所述的規則。您可以透過下列程序,模擬設定的可行性,以及 Compute Engine 指派給其餘 vNIC 的佇列數量:

  1. 計算已自訂佇列指派的 vNIC 佇列總和。
  2. 從 vCPU 數量中減去自訂指派佇列的總和。如果差異小於 Compute Engine 必須指派佇列的剩餘 vNIC 數量,Compute Engine 會傳回錯誤,因為每個 vNIC 至少要有一個佇列。
  3. 將上一步的差值除以沒有自訂佇列計數的 vNIC 數量,並捨棄所有餘數:
[(number of vCPUs - sum of assigned queues)/(number of remaining vNICs)]  

這項計算一律會得出整數 (而非分數),且至少等於 1,因為每個 vNIC 至少要有一個佇列。 4. Compute Engine 會為每個剩餘的 vNIC 指派佇列計數,方式如下:

範例

假設您有一個 VM,其中有 20 個 vCPU 和 6 個 NIC,且您已為 nic0 指派 5 個佇列、為 nic1 指派 6 個佇列、為 nic2 指派 4 個佇列,並讓 Compute Engine 為 nic3nic4nic5 指派佇列計數。

  1. 自訂指派佇列的總和為 5 + 6 + 4 = 15
  2. Compute Engine 還有 20 - 15 = 5 個佇列可指派給其餘三個 vNIC (nic3nic4nic5)。差異 (5) 大於沒有自訂佇列計數的 vNIC 數量 (3)。
  3. 5 的差值除以 3,並捨棄餘數。因此值為 1
  4. 由於計算出的數量 (1) 小於每個 vNIC 的佇列數量上限,因此其餘 vNIC 的佇列數量會設為 1

設定自訂佇列計數

如要建立運算執行個體,並為一或多個 NIC 或 vNIC 使用自訂佇列計數,請完成下列步驟。

在下列程式碼範例中,建立 VM 時,網路介面類型會設為 GVNIC,並啟用各 VM 的 Tier_1 網路效能。您可以運用這些程式碼範例,指定支援的機器類型可用的最大佇列計數和佇列超額訂閱。

gcloud

  1. 如果您尚未建立虛擬私有雲網路,請為每個要設定的虛擬 NIC 介面建立子網路。

  2. 使用 gcloud compute instances create 指令建立運算執行個體。針對要為執行個體設定的每個 vNIC,重複使用 --network-interface 旗標,並加入 queue-count 選項。

    gcloud compute instances create INSTANCE_NAME
    --zone=ZONE
    --machine-type=MACHINE_TYPE
    --network-performance-configs=total-egress-bandwidth-tier=TIER_1
    --network-interface=network=NETWORK_NAME_1,subnet=SUBNET_1,nic-type=GVNIC,queue-count=QUEUE_SIZE_1
    --network-interface=network=NETWORK_NAME_2,subnet=SUBNET_2,nic-type=GVNIC,queue-count=QUEUE_SIZE_2

更改下列內容:

Terraform

  1. 如果您尚未建立虛擬私有雲網路,請為每個要設定的虛擬 NIC 介面建立子網路。
  2. 使用 google_compute_instance 資源,為 vNIC 建立具有特定佇列計數的運算執行個體。針對要為運算執行個體設定的每個 vNIC 重複 --network-interface 參數,並加入 queue-count 參數。

Queue oversubscription instance

resource "google_compute_instance" "INSTANCE_NAME" {
project = "PROJECT_ID"
boot_disk {
auto_delete = true
device_name = "DEVICE_NAME"
initialize_params {
image="IMAGE_NAME"
size = DISK_SIZE
type = "DISK_TYPE"
}
}
machine_type = "MACHINE_TYPE"
name = "INSTANCE_NAME"
zone = "ZONE"
network_performance_config {
total_egress_bandwidth_tier = "TIER_1"
}
network_interface {
nic_type = "GVNIC"
queue_count = QUEUE_COUNT_1
subnetwork_project = "PROJECT_ID"
subnetwork = "SUBNET_1"
}
network_interface {
nic_type = "GVNIC"
queue_count = QUEUE_COUNT_2
subnetwork_project = "PROJECT_ID"
subnetwork = "SUBNET_2"
}
network_interface {
nic_type = "GVNIC"
queue_count = QUEUE_COUNT_3
subnetwork_project = "PROJECT_ID"
subnetwork = "SUBNET_3""
}
network_interface {
nic_type = "GVNIC"
queue_count = QUEUE_COUNT_4
subnetwork_project = "PROJECT_ID"
subnetwork = "SUBNET_4""
}
}

更改下列內容:

REST

  1. 如果您尚未建立虛擬私有雲網路,請為每個要設定的虛擬 NIC 介面建立子網路。
  2. 使用 instances.insert 方法,為 vNIC 建立具有特定佇列計數的運算執行個體。您可以重複使用 networkInterfaces 屬性,設定多個網路介面。
    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
    {
    "name": "INSTANCE_NAME",
    "machineType": "machineTypes/MACHINE_TYPE",
    "networkPerformanceConfig": {
    "totalEgressBandwidthTier": TIER_1
    },
    "networkInterfaces": [
    {
    "nicType": gVNIC,
    "subnetwork":"regions/region/subnetworks/SUBNET_1",
    "queueCount": "QUEUE_COUNT_1"
    } ],
    "networkInterfaces": [
    {
    "nicType": gVNIC,
    "subnetwork":"regions/region/subnetworks/SUBNET_2",
    "queueCount": "QUEUE_COUNT_2"
    } ]
    }
    更改下列內容:
    • PROJECT_ID:要在其中建立運算執行個體的專案 ID
    • ZONE:要在其中建立運算執行個體的可用區
    • INSTANCE_NAME:新運算執行個體的名稱
    • MACHINE_TYPE:新運算執行個體的機型,可以是預先定義自訂。如要超額訂閱佇列數量,您必須使用 N2、N2D、C2 或 C2D 機器系列的機型,並使用 gVNIC 和 Tier_1 網路。
    • SUBNET_*:網路介面連線的子網路名稱
    • QUEUE_COUNT:vNIC 的佇列數量,須遵守「自訂佇列分配」一節所述規則。

佇列分配和變更機型

建立運算執行個體時,系統會預設分配佇列,您也可以使用 Compute Engine API 建立新的運算執行個體時,為每個虛擬網路介面卡 (vNIC) 指派自訂佇列數量。預設或自訂 vNIC 佇列指派作業只會在建立運算執行個體時設定。如果執行個體的 vNIC 使用預設佇列計數,您可以變更機型。如果變更後的機型 vCPU 數量不同,系統會根據新的機型,重新計算執行個體的預設佇列數。

如果 VM 的 vNIC 使用自訂的非預設佇列計數,則可以使用 Google Cloud CLI 或 Compute Engine API 更新執行個體屬性,藉此變更機型。如果產生的 VM 支援與原始執行個體相同的每個 vNIC 佇列計數,轉換就會成功。如果 VM 使用 VirtIO-Net 介面,且每個 vNIC 的自訂佇列計數高於 16,則無法將機型變更為第三代或更新的機型,因為這些機型只使用 gVNIC。您可以按照「將工作負載移至新的運算執行個體」一文中的操作說明,將 VM 遷移至第三代或更新的機型。

後續步驟