Google Cloud 會計算每個運算執行個體的頻寬,而非每個虛擬網路介面 (vNIC) 或 IP 位址的頻寬。執行個體的機器類型會定義其可達到的最大傳出率;不過,您只能在特定情況下達到可達到的最大傳出率。
本頁面將概略說明網路頻寬限制,這在規劃部署作業時非常實用。它會使用兩個維度分類頻寬:
- Egress 或 ingress:本頁使用 egress 和 ingress 時,一律以 Google Cloud 例項的角度出發:
- 從執行個體傳送的封包會組成其輸出 (Outbound) 流量。 Google Cloud
- 傳送至 Google Cloud 執行個體的封包會組成其入站 (Inbound) 流量。
- 封包的轉送方式:封包可透過路徑從傳送端執行個體轉送至接收端執行個體,這些路徑的下一個躍點可位於在虛擬私有雲網路內或虛擬私有雲網路外。
額外的虛擬網路介面 (vNIC) 或每個 vNIC 的額外 IP 位址,都不會增加 Compute 執行個體的輸入或輸出頻寬。舉例來說,如果 C3 虛擬機器有 22 個 vCPU,則總輸出頻寬限制為 23 Gbps。如果您使用兩個 vNIC 設定 C3 虛擬機器,則虛擬機器仍會受限於 23 Gbps 的總輸出頻寬,而非每個 vNIC 的 23 Gbps 頻寬。
如要盡可能提高輸入和輸出頻寬,請為運算執行個體設定各 VM 的 Tier_1 網路效能。
本頁面提供的所有資訊都適用於 Compute Engine 運算執行個體,以及依賴 Compute Engine 執行個體的產品。舉例來說,Google Kubernetes Engine 節點就是 Compute Engine 執行個體。
頻寬摘要
下表根據封包是從 Compute Engine 執行個體傳送 (傳出) 或接收 (傳入),以及封包轉送方式,說明可能的最高頻寬。
輸出頻寬限制
在 虛擬私有雲網路中轉送 |
|
---|---|
在 虛擬私有雲網路外部進行轉送 |
|
輸入頻寬限制
在 虛擬私有雲網路中轉送 |
|
---|---|
在 虛擬私有雲網路外部進行轉送 |
|
輸出頻寬
Google Cloud 使用每個例項的最大傳出率限制傳出頻寬。這些速率取決於傳送封包的運算執行個體機型,以及封包的目的地是否可透過虛擬私有雲網路內或虛擬私有雲網路外的路由存取。傳出頻寬包括所有執行個體 NIC 發出的封包,以及傳輸至與執行個體連結的所有 Hyperdisk 和永久磁碟磁區的資料。
每個執行個體的最大輸出頻寬
每個執行個體的輸出頻寬上限通常為每個 vCPU 2 Gbps,但會因機器系列而有所不同,也有一些例外狀況。下表顯示在 VPC 網路中傳送的流量輸出頻寬上限範圍 (僅限標準網路層級),而非各 VM Tier_1 網路效能。
機器系列 | 標準個別執行個體最低輸出限制 | 標準輸出限制的最高個別執行個體上限 |
---|---|---|
C4 和 C4A | 10 Gbps | 100 Gbps |
C3 | 23 Gbps | 100 Gbps |
C3D | 20 Gbps | 100 Gbps |
C2 和 C2D | 10 Gbps | 32 Gbps |
E2 | 1 Gbps | 16 Gbps |
標題 3 | 不適用 | 200 Gbps |
M4 | 32 Gbps | 100 Gbps |
M3 和 M1 | 32 Gbps | 32 Gbps |
M2 | 32 Gbps | Intel Cascade Lake CPU 平台:32 Gbps 其他 CPU 平台:16 Gbps |
N4 | 10 Gbps | 50 Gbps |
N2 和 N2D | 10 Gbps | 32 Gbps |
N1 (不含 1 個 vCPU 的 VM) | 10 Gbps | Intel Skylake CPU 平台:32 Gbps Intel Skylake 之前的 CPU 平台:16 Gbps |
具有 1 個 vCPU 的 N1 機器類型、f1-micro 和 g1-small | 2 Gbps | 2 Gbps |
T2D | 10 Gbps | 32 Gbps |
X4 | 不適用 | 100 Gbps |
Z3 | 23 Gbps | 100 Gbps |
您可以在每個機器類型系列的頁面中,查看每個機器類型的個別例項最大傳出頻寬:
- C、E、N 和 T 系列:一般用途機器系列
- Z 系列:儲存空間最佳化機器系列
- C2 和 H 系列:運算最佳化機器系列
- M 和 X 系列:記憶體最佳化機器系列
我們無法保證每個例項的最大傳出頻寬。實際的出口頻寬可根據下列因素 (僅列舉部分) 降低:
- 在支援 VirtIO 和 gVNIC 的運算子中使用 VirtIO 而非 gVNIC
- 封包大小
- 通訊協定額外負擔
- 流量數量
- 運算執行個體的來賓作業系統 Ethernet 驅動程式設定,例如校驗和 TCP 分割卸載 (TSO)
- 網路壅塞
- 在永久磁碟 I/O 與其他網路輸出流量競爭的情況下,60% 的網路頻寬上限會提供給永久磁碟寫入作業,而 40% 則是供其他網路輸出流量使用。詳情請參閱「影響磁碟效能的因素」。
如要取得每個例項的最大傳出頻寬:
- 使用較大的機器類型啟用各個 VM 的 Tier_1 網路效能。
- 使用網路結構支援的最大最大傳輸單位 (MTU) 虛擬私有雲網路。MTU 越大,封包標頭的額外負擔就越少,有效載荷資料的傳輸量就越高。
- 使用最新版 gVNIC 驅動程式。
- 使用第三代或更新機器系列,這些機器系列會使用 Titanium 將網路處理作業卸載至主機 CPU。
輸出至可在虛擬私有雲網路內路由的目的地
從傳送執行個體的角度來看,如果目的地 IP 位址可透過虛擬私有雲網路內的路由存取,Google Cloud 會使用下列規則限制輸出流量:
- 每個 VM 的最大輸出頻寬:「每個執行個體的最大輸出頻寬」一節所述的每個執行個體最大輸出頻寬。
- 每個專案跨區域輸出頻寬:如果傳送端執行個體和內部目的地或其下一個躍點位於不同區域,Google Cloud 會根據傳送端執行個體的區域和專案,以及內部目的地或下一個躍點的區域,強制執行配額。如要進一步瞭解這個配額,請參閱「虛擬私有雲配額和限制」說明文件中的「Compute 執行個體的區間間網路傳出頻寬 (Mbps)」。
- Cloud VPN 和 Cloud Interconnect 限制:將流量從執行個體傳送至可透過下一個躍點 Cloud VPN 通道或 Cloud Interconnect VLAN 連結轉送的內部 IP 位址目的地時,傳出頻寬會受到以下限制:
- 每個 Cloud VPN 通道的封包速率和頻寬上限
- 每個 VLAN 連結的封包傳輸速率和頻寬上限
- 如要充分利用多個下一個躍點 Cloud VPN 通道或使用 ECMP 轉送的 Cloud Interconnect VLAN 連結的頻寬,您必須使用多個 TCP 連線 (5 元組)。
在虛擬私有雲網路中可路由的目的地包括下列所有目的地,從傳送端執行個體的角度來看,每個目的地都可以透過路徑存取,且下一個躍點不是預設網際網路閘道:
- 這些目的地資源使用的子網路主要 IPv4 和子網路次要 IPv4 位址範圍中的區域內部 IPv4 位址,包括私人 IPv4 位址範圍和私人使用的公開 IPv4 位址範圍:
- 接收端執行個體網路介面 (vNIC) 的主要內部 IPv4 位址。(當傳送端執行個體連線至另一個執行個體的 vNIC 外部 IPv4 位址時,封包會使用下一個躍點的預設網際網路閘道進行路由,因此會改為套用虛擬私有雲端網路外部目的地的傳出流量)。
- 接收執行個體 vNIC 別名 IP 範圍中的內部 IPv4 位址。
- 內部轉送規則的內部 IPv4 位址,用於協定轉送或內部直通式網路負載平衡器。
- 下列目的地資源的全域內部 IPv4 位址:
- 這些目的地資源使用的 內部 IPv6 子網路位址範圍:
- 來自
/96
IPv6 位址範圍的 IPv6 位址,已指派給雙重堆疊或僅支援 IPv6 的 (預先發布版) 接收執行個體的 vNIC。 - 內部轉送規則的
/96
IPv6 位址範圍中的 IPv6 位址,用於協定轉送或內部直通式網路負載平衡器。
- 來自
- 外部 IPv6 子網路位址範圍:當封包是使用子網路路徑或虛擬私有雲網路中的對等互連子網路路徑,或是使用虛擬私有雲網路中的自訂路徑 (不使用預設網際網路閘道下一個躍點) 進行轉送時,這些目的地資源會使用:
- 從
/96
IPv6 位址範圍指派給雙重堆疊或僅支援 IPv6 的 (預先發布版) 接收執行個體 vNIC 的 IPv6 位址。 - 外部轉送規則的
/96
IPv6 位址範圍中的 IPv6 位址,適用於協定轉送或外部直通式網路負載平衡器。
- 從
- 可透過下列 VPC 網路路由存取的其他目的地:
以下清單會將從傳送執行個體傳送至內部目的地的流量,依據頻寬從最高到最低排序:
- 位於相同可用區的運算執行個體之間
- 在同一區域內不同區域的運算執行個體之間
- 不同區域的運算執行個體之間
- 從運算執行個體連線至 Google Cloud 使用私人 Google 存取權的 API 和服務,或從執行個體的外部 IP 位址存取 Google API。包括 適用於 Google API 的 Private Service Connect 端點。
輸出至虛擬私有雲網路以外的目的地
從傳送端執行個體和目的地 IP 位址在 VPC 網路外的角度來看, Google Cloud 會將傳出流量限制在下列任一速率:
每個執行個體的輸出頻寬:從運算執行個體連線至 VPC 網路外目的地的所有連線,其最大頻寬為每個執行個體的最大輸出頻寬和下列其中一個速率中較小者:
- 25 Gbps (如果已啟用 Tier_1 網路)
- 7 Gbps (如果未啟用 Tier_1 網路)
- H3 執行個體的 1 Gbps
- 針對支援多個實體 NIC 的機器系列 (例如 A4 和 A3),每個實體 NIC 的頻寬為 7 Gbps。
舉例來說,即使
c3-standard-44
執行個體的每個 VM 最大輸出頻寬為 32 Gbps,但從c3-standard-44
VM 到外部目的地的每個 VM 輸出頻寬為 25 Gbps 或 7 Gbps,視是否已啟用 Tier_1 網路而定。每個封包流的最大輸出速率:從運算執行個體連線至虛擬私人雲端網路外目的地的每個 5 元組連線,其最大頻寬為 3 Gbps,但在 H3 上則為 1 Gbps。
專案網際網路輸出頻寬:專案的網際網路輸出頻寬配額定義了從專案每個區域的運算執行個體傳送至虛擬私有雲網路外目的地的所有連線的最大頻寬。
虛擬私有雲網路外的目的地包括下列所有目的地,每個目的地都可以透過傳送端執行個體虛擬私有雲網路中的路由存取,且下一個躍點是預設網際網路閘道:
- 外部 Proxy 網路負載平衡器和外部應用程式負載平衡器的全域外部 IPv4 和 IPv6 位址
- Google Cloud 資源的地區外部 IPv4 位址,包括 VM vNIC 外部 IPv4 位址、外部通訊協定轉送的外部 IPv4 位址、外部轉送網路負載平衡器,以及 Cloud NAT 閘道的回應封包。
- 雙重堆疊或僅限 IPv6 子網路中的地區性外部 IPv6 位址 (預先發布),以及雙重堆疊或僅限 IPv6 執行個體的外部 IPv6 位址 (預先發布)、外部通訊協定轉送和外部轉送網路負載平衡器所使用的外部 IPv6 位址範圍。子網路必須位於獨立的非對等 VPC 網路。您必須透過傳送執行個體 VPC 網路中的路徑存取目的地 IPv6 位址範圍,且該路徑的下一個躍點必須是預設網際網路閘道。如果具有外部 IPv6 位址範圍的雙重堆疊或僅支援 IPv6 的子網路位於同一個虛擬私有雲網路或對等互連虛擬私有雲網路中,請改為參閱在虛擬私有雲網路中可路由的目的地出站連線。
- 在傳送執行個體的虛擬私人雲端網路中,使用靜態路徑存取的其他外部目的地,前提是該路徑的下一個躍點是預設網際網路閘道。
如要進一步瞭解哪些 Google Cloud 資源使用哪些類型的外部 IP 位址,請參閱「外部 IP 位址」一文。
輸入頻寬
Google Cloud 會根據輸入封包如何路由至接收端運算執行個體,處理輸入 (入站) 頻寬。
虛擬私有雲網路內可路由的目的地入口
接收執行個體可處理機器類型、作業系統和其他網路條件允許的所有封包。如果封包是透過在虛擬私人雲端網路中建立的路徑傳送, Google Cloud 就不會對傳送至執行個體的封包實施任何有意義的頻寬限制:
- 接收執行個體 VPC 網路中的子網路路徑
- 對等互連虛擬私有雲網路中的對等互連子網路路徑
- 其他網路中的路徑,其下一個躍點為 Cloud VPN 通道、Cloud Interconnect (VLAN) 連結,或位於接收執行個體 VPC 網路中的路由器設備執行個體
在 VPC 網路中傳送的封包目的地包括:
- 接收端執行個體網路介面 (NIC) 的主要內部 IPv4 位址。主要內部 IPv4 位址是來自子網路主要 IPv4 位址範圍的區域內部 IPv4 位址。
- 接收執行個體 NIC 的別名 IP 範圍中的內部 IPv4 位址。別名 IP 範圍可以來自子網路的主要 IPv4 位址範圍,或其次要 IPv4 位址範圍之一。
- 從
/96
IPv6 位址範圍指派給雙重堆疊或僅支援 IPv6 的 (預先發布版) 接收執行個體 NIC 的 IPv6 位址。運算執行個體的 IPv6 範圍可來自下列子網路 IPv6 範圍:- 內部 IPv6 位址範圍。
- 外部 IPv6 位址範圍:當傳入封包使用本節先前列出的其中一個虛擬私人雲端網路路徑,在內部傳送至接收執行個體時。
- 內部通訊協定轉送至接收端執行個體或內部直通式網路負載平衡器的轉送規則內部 IPv4 位址,其中接收端執行個體是負載平衡器的後端。內部轉送規則的 IPv4 位址來自子網路的主要 IPv4 位址範圍。
- 內部通訊協定轉送至接收端執行個體或內部直通式網路負載平衡器的轉送規則
/96
IPv6 範圍內的內部 IPv6 位址,其中接收端執行個體是負載平衡器的後端。內部轉送規則 IPv6 位址來自子網路的內部 IPv6 位址範圍。 - 外部通訊協定轉送至接收端執行個體或外部直通式網路負載平衡器的轉送規則中,來自
/96
IPv6 範圍的外部 IPv6 位址。當傳入封包使用本節先前列出的路徑之一,在虛擬私人雲端網路中進行路由時,接收執行個體就是負載平衡器的後端。外部轉送規則的 IPv6 位址來自子網路的外部 IPv6 位址範圍。 - 使用接收端執行個體做為下一個躍點執行個體 (
next-hop-instance
或next-hop-address
) 的自訂靜態路徑目的地範圍內 IP 位址。 - 如果接收端執行個體是該負載平衡器的後端,則為使用內部直通式網路負載平衡器 (
next-hop-ilb
) 下一個躍點的自訂靜態路徑目的地範圍內 IP 位址。
進入虛擬私有雲網路外目的地
Google Cloud 會針對透過 VPC 網路外的路徑傳送至接收端執行個體的傳入封包,實作以下頻寬限制。在負載平衡的情況下,系統會個別為每個接收例項套用頻寬限制。
對於不支援多個實體 NIC 的機器系列,適用的傳入頻寬限制會一併套用至所有虛擬網路介面 (vNIC)。限制值是遇到的以下稅率中的第一個:
- 每秒 1,800,000 個封包
- 30 Gbps
對於支援多個實體 NIC 的機器系列 (例如 A4 和 A3),適用的傳入頻寬限制會個別套用至每個實體 NIC。限制值是遇到的以下稅率中的第一個:
- 每個實體 NIC 每秒 1,800,000 個封包
- 每個實體 NIC 30 Gbps
使用 VPC 網路外部路徑轉送的封包目的地包括:
- 在接收端執行個體的其中一個網路介面 (NIC) 上,在 1 對 1 網路位址轉譯存取設定中指派的外部 IPv4 位址。
- 當透過接收端執行個體的虛擬私有雲網路以外的路由轉送傳入封包時,從
/96
IPv6 位址範圍指派給雙重堆疊或僅限 IPv6 (預先發布) 接收端執行個體的 vNIC 的外部 IPv6 位址。 - 外部通訊協定轉送至接收執行個體或外部直通式網路負載平衡器的轉送規則外部 IPv4 位址,其中接收執行個體是負載平衡器的後端。
- 外部通訊協定轉送至接收端執行個體或外部直通式網路負載平衡器的轉送規則中,來自
/96
IPv6 範圍的外部 IPv6 位址。如果使用虛擬私人雲端網路外部的路由轉送傳入的封包,接收執行個體必須是負載平衡器的後端。 - 已由 Cloud NAT 處理的傳入回應。
巨型資料包
如要接收及傳送巨型封包,請設定運算執行個體使用的 VPC 網路,並將最大傳輸單位 (MTU) 設為較大的值 (最多 8896)。
較高的 MTU 值會增加封包大小,並減少封包標頭額外負擔,進而提高酬載資料總處理量。
您可以在 VM 執行個體上搭配使用 gVNIC 驅動程式 1.3 以上版本的巨型資料流,或是在裸機執行個體上搭配使用 IDPF 驅動程式。並非所有 Google Cloud 公開映像檔都包含這些驅動程式。如要進一步瞭解作業系統支援巨型封包的相關資訊,請參閱「作業系統詳細資料」頁面中的「網路功能」分頁標籤。
如果您使用的 OS 映像檔不支援巨型封包,可以手動安裝 1.3.0 以上版本的 gVNIC 驅動程式。Google 建議您安裝標示為 Latest
的 gVNIC 驅動程式版本,以便享有額外功能和錯誤修正。您可以前往 GitHub 下載 gVNIC 驅動程式。
如要手動更新訪客作業系統中的 gVNIC 驅動程式版本,請參閱「在非支援的作業系統上使用」。
接收和傳輸佇列
每個運算執行個體的 NIC 或 vNIC 都會指派一組接收和傳輸佇列,用於處理來自網路的封包。
- 接收佇列 (RX):接收封包的佇列。當 NIC 從網路接收封包時,會從佇列中選取傳入封包的描述元,並加以處理,然後透過附加至 vCPU 核心的封包佇列,將封包交給客體作業系統。如果 RX 佇列已滿,且沒有可用來放置封包的緩衝區,則會捨棄封包。通常發生這種情況,是因為應用程式過度使用 vCPU 核心,而該核心也已附加至所選封包佇列。
- 傳輸佇列 (TX):傳輸封包的佇列。當訪客作業系統傳送封包時,系統會分配描述元並放入 TX 佇列。接著,NIC 會處理描述元並傳送封包。
預設佇列分配
除非您明確為 NIC 指派佇列計數,否則可以使用以下方式模擬演算法 Google Cloud ,為每個 NIC 指派固定數量的 RX 和 TX 佇列:
- 裸機執行個體
- 對於裸機執行個體,只有一個 NIC,因此佇列數量上限為 16。
- 使用 gVNIC 網路介面的 VM 執行個體
針對 C4 執行個體,為了提升效能,下列設定會使用固定數量的佇列:
- 對於具有 2 個 vCPU 的 Linux 執行個體,佇列數量為 1。
- 對於具有 4 顆 vCPU 的 Linux 執行個體,佇列數量為 2。
對於其他機器系列,佇列計數取決於機器系列是否使用 Titanium。
針對使用 Titanium 的第三代 (不含 M3) 以上執行個體:
將 vCPU 數量除以 vNIC 數量 (
num_vcpus/num_vnics
),並捨去任何餘數。針對未使用 Titanium 的第一代和第二代 VM:
將 vCPU 數量除以 vNIC 數量,然後將結果除以 2 (
num_vcpus/num_vnics/2
)。捨棄任何餘數。
如何完成預設佇列計數計算:
如果計算出的數字小於 1,請改為為每個 vNIC 指派一個佇列。
判斷計算結果是否大於每個 vNIC 的佇列數量上限 (
16
)。如果計算出的數字大於16
,請忽略計算出的數字,改為為每個 vNIC 指派 16 個佇列。
- 使用 VirtIO 網路介面或自訂驅動程式的 VM 執行個體
將 vCPU 數量除以 vNIC 數量,並捨去任何餘數 —
[number of vCPUs/number of vNICs]
。如果計算出的數字小於 1,請改為為每個 vNIC 指派一個佇列。
判斷計算結果是否大於每個 vNIC 的佇列數量上限 (
32
)。如果計算出的數字大於32
,請忽略計算出的數字,改為為每個 vNIC 指派 32 個佇列。
範例
以下範例說明如何計算 VM 執行個體的預設佇列數量:
如果 VM 執行個體使用 VirtIO,且有 16 個 vCPU 和 4 個 vNIC,則計算結果為
[16/4] = 4
。 Google Cloud 會將四個佇列指派給每個 vNIC。如果 VM 執行個體使用 gVNIC,且有 128 個 vCPU 和兩個 vNIC,則計算結果為
[128/2/2] = 32
。 Google Cloud 會將每個 vNIC 的最大佇列數分配給每個 vNIC。 Google Cloud會為每個 vNIC 分配16
佇列。
在 Linux 系統上,您可以使用 ethtool
設定 vNIC,讓其佇列數少於每個 vNIC 的佇列 Google Cloud 指派數。
為 VM 執行個體分配自訂佇列
使用 Compute Engine API 建立新的運算執行個體時,您可以為每個 vNIC 指派自訂佇列計數 (RX 和 TX 的總數),而非預設佇列分配。
您指定的自訂佇列數量必須遵守下列規則:
每個 vNIC 可指派的佇列數量下限為 1。
您可以根據驅動程式類型,為 VM 執行個體的每個 vNIC 指派的最大佇列數量,是 vCPU 數量或每個 vNIC 的最大佇列數量中較低者:
如果您將自訂佇列計數指派給運算執行個體的所有 NIC,則佇列計數指派總和必須小於或等於指派給執行個體的 vCPU 數量。
您可以為 vNIC 超訂自訂佇列數量。換句話說,您可以將排序數量加總值指派給 VM 執行個體的所有 NIC,而這個值大於執行個體的 vCPU 數量。如要超訂自訂佇列數量,VM 執行個體必須符合下列條件:
- 將 gVNIC 設為為執行個體設定的所有 NIC 的 vNIC 類型。
- 使用支援 Tier_1 網路的機器類型。
- 已啟用 Tier_1 網路。
- 為為執行個體設定的所有 NIC 指定自訂佇列計數。
在佇列超訂閱的情況下,VM 執行個體的佇列數量上限為 NIC 數量的 16 倍。因此,如果您為具有 30 個 vCPU 的執行個體設定了 6 個 NIC,則可為執行個體設定最多 (16 * 6) 或 96 個自訂佇列。
範例
如果 VM 執行個體有 8 個 vCPU 和 3 個 vNIC,則執行個體的佇列數量上限為 vCPU 數量,即 8。您可以將 1 個佇列指派給
nic0
、4 個佇列指派給nic1
,以及 3 個佇列指派給nic2
。在這個範例中,您無法同時將 4 個佇列指派給nic2
,並保留其他兩個 vNIC 佇列指派,因為已指派的佇列總數不得超過 vCPU 數量。如果您有具備 96 個 vCPU 和 2 個 vNIC 的 N2 VM,則在使用 virtIO 驅動程式時,可以為每個 vNIC 指派最多 32 個佇列,在使用 gVNIC 驅動程式時,則可為每個 vNIC 指派最多 16 個佇列。如果您為 N2 VM 啟用 Tier_1 網路,則可為每個 vNIC 指派最多 32 個佇列。在本例中,已指派佇列的總和一律會小於或等於 vCPU 數量。
您也可以為部分 NIC 指派自訂佇列計數,讓Google Cloud 將佇列指派給其他 NIC。您可以為每個 vNIC 指派的佇列數量仍須遵守先前提及的規則。您可以模擬設定的可行性,如果設定可行,則可透過此程序將 Google Cloud 指派給剩餘 vNIC 的佇列數量:
使用自訂佇列指派功能,計算 vNIC 的佇列總數。以具備 20 個 vCPU 和 6 個 vNIC 的 VM 為例,假設您將
nic0
指派 5 個佇列、nic1
指派 6 個佇列、nic2
指派 4 個佇列,並讓 Google Cloud為nic3
、nic4
和nic5
指派佇列。在本例中,自訂指派佇列的總和為5+6+4 = 15
。請將自訂指派佇列的總和從 vCPU 數量中減去。如果差異值小於Google Cloud 必須指派佇列的剩餘 vNIC 數量, Google Cloud 會傳回錯誤,因為每個 vNIC 至少必須有一個佇列。
繼續使用這個範例,其中 VM 有 20 個 vCPU,且總共分配了
15
個自訂佇列, Google Cloud 還有20-15 = 5
個佇列可分配給剩餘的 vNIC (nic3
、nic4
、nic5
)。將上一個步驟的差異值除以剩餘的 vNIC 數量,並捨棄任何餘數 —
⌊(number of vCPUs - sum of assigned queues)/(number of remaining vNICs)⌋
。由於上一個步驟中說明的限制,這項計算的結果一律為至少等於 1 的整數 (而非小數)。 Google Cloud 會為每個剩餘的 vNIC 指派與計算值相符的佇列計數,但計算值不得超過每個 vNIC 的最大佇列數。每個 vNIC 的佇列數量上限取決於驅動程式類型:
- 使用 virtIO 或自訂驅動程式時,如果每個剩餘 vNIC 的排序數量計算值大於
32
, Google Cloud 會將每個剩餘 vNIC32
排序。 - 使用 gVNIC 時,如果每個剩餘 vNIC 的計算佇列數量超過
16
或32
的限制 (取決於VM 設定), Google Cloud 會為每個剩餘 vNIC 指派16
佇列。
設定自訂佇列計數
如要建立會為一或多個 NIC 或 vNIC 使用自訂佇列計數的運算執行個體,請完成下列步驟。
在以下程式碼範例中,VM 的網路介面類型設為 GVNIC
,並啟用各 VM 的 Tier_1 網路效能。您可以使用這些程式碼範例,指定可用於支援的機器類型的最大佇列數量和佇列超訂閱。
gcloud
- 如果您還沒有虛擬私有雲網路,且每個 vNIC 介面都沒有子網路,請建立這些項目。
- 使用
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
- 如果您還沒有虛擬私有雲網路,且每個 vNIC 介面都沒有子網路,請建立這些項目。
使用
google_compute_instance
資源建立具備特定 vNIC 佇列數量的運算執行個體。針對要為運算執行個體設定的每個 vNIC,重複使用--network-interface
參數,並納入queue-count
參數。# Queue oversubscription instance resource "google_compute_instance" "VM_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 = "VM_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"" } }
更改下列內容:
VM_NAME
:新 Compute 執行個體的名稱PROJECT_ID
:要建立執行個體的專案 ID。除非您使用共用虛擬私有雲網路,否則您指定的專案必須與所有子網路和網路建立的專案相同。DEVICE_NAME
:要與來賓作業系統中的啟動磁碟建立關聯的名稱IMAGE_NAME
:圖片名稱,例如"projects/debian-cloud/global/images/debian-11-bullseye-v20231010"
。DISK_SIZE
:開機磁碟的大小 (以 GiB 為單位)DISK_TYPE
:用於開機磁碟的磁碟類型,例如pd-standard
MACHINE_TYPE
:執行個體的機器類型。如要超出佇列數量,您指定的機器類型必須支援 gVNIC 和 Tier_1 網路。ZONE
:要建立執行個體的區域QUEUE_COUNT
:vNIC 的佇列數量,須遵守「自訂佇列分配」一節所述的規則。SUBNET_*
:網路介面連線的子網路名稱
REST
- 如果您還沒有虛擬私有雲網路,且每個 vNIC 介面都沒有子網路,請建立這些項目。
使用
instances.insert
方法,建立具有特定 NIC 佇列計數的運算執行個體。重複networkInterfaces
屬性,即可設定多個網路介面。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "VM_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" } ], }
更改下列內容:
排隊分配和變更機器類型
建立運算執行個體時,系統會使用預設佇列分配,或者您也可以使用 Compute Engine API 建立新的運算執行個體時,將自訂佇列計數指派給每個虛擬網路介面卡 (vNIC)。預設或自訂 vNIC 佇列指派作業只會在建立運算執行個體時設定。如果執行個體的 vNIC 使用預設佇列計數,您可以變更機器類型。如果您要變更的機器類型具有不同的 vCPU 數量,系統會根據新的機器類型重新計算執行個體的預設佇列計數。
如果您的 VM 有使用自訂非預設佇列計數的 vNIC,您可以使用 Google Cloud CLI 或 Compute Engine API 更新執行個體屬性來變更機器類型。如果產生的 VM 支援與原始執行個體相同的每個 vNIC 佇列計數,轉換作業就會成功。如果 VM 使用 VirtIO-Net 介面,且每個 vNIC 的自訂佇列數量超過 16 個,您就無法將機器類型變更為第三代或更新的機器類型,因為這些機器類型只使用 gVNIC。您可以改為按照「將工作負載移至新的運算執行個體」一文中的指示,將 VM 遷移至第三代或更新版本的機器類型。
後續步驟
- 進一步瞭解機器類型。
- 進一步瞭解虛擬機器執行個體。
- 建立並啟動 VM 執行個體。
- 為 Compute 執行個體設定各 VM 的 Tier_1 網路效能。
- 完成在 Compute Engine 中建立 Linux VM 執行個體的快速入門教學課程。
- 完成在 Compute Engine 中建立 Windows Server VM 執行個體的快速入門教學課程。