深度探討微軟與 Linux 合作模式 (四) : Linux 網路及效能

在此篇文章中,您可以看到:


初步介紹

這篇文章是有關於如何在私有資料中心上,利用 Hyper-V 運行與管理 Linux 以及 FreeBSD。先前的系列文章可以在下面的連結找到:

I Microsoft Loves Linux

l 深度探討微軟與 Linux 合作模式 ( 一 ):運行在 Hyper-V 上的 Linux 與 FreeBSD

l 深度探討微軟與 Linux 合作模式 ( 二 ):探討 Hyper-V 的關鍵技術

l 深度探討微軟與 Linux 合作模式 ( 三 ): Linux 動態記憶體配置與即時備份

 鼓勵大家若尚未閱讀前述文章,請先行閱讀了解。

網路在 Linux  上的目標

        在生產力虛擬環境中,要達到高效能網路架構是極為重要的目標。針對這個目標,微軟使用在非虛擬環境底下相同等級的技術來在 Linux 虛擬環境中達成這個目標。舉例來說,讓虛擬機器不透過 hypervisor 即可直接使用硬體網路卡,例如如果有一張實體的 10G 網路卡,我們必須要確保虛擬機器能夠盡可能達到 10G 的網路傳輸效能。在 Azure 公有雲上,我們早已投入大量的技術與開發能量在優化 Linux 於虛擬環境的效能,以及虛擬機器使用多個虛擬 CPU 的效能優化。並且也針對多個程序或者執行續使用相當多的網路連線作了最佳化設計。而每個網路封包的延遲也是相當重要的部分,所以除了吞吐量要大之外,也必須顧及延遲的問題。也在 Linux 上實作這些功能並且作了實際的評估與測量。在稍後的章節會更仔細深入地提及這些測量的設置與結果。

Linux  網路效能功能

        在 Linux 系統整合服務驅動程式(LIS)中,已經包含數個提升網路效能及吞吐量的功能。這些功能包括 Virtual Receive Side Scaling (vRSS) 以及數種 TCP/IP 的處理優化。vRSS 功能透過多個 vCPU 來處理流入的網路封包以增進網路效能。在沒有 vRSS 的情況下,流入的封包會導致第一顆 vCPU 經常中斷處理網路封包。而在繁重的網路使用時,第一顆 vCPU 的使用率常常飆高至 100% 的使用率,而造成使用率的瓶頸,但其他的 vCPU 卻僅有少量的負載。因此 vRSS 可以更有效利用多核心來平均中斷不同的核心,減少第一顆 vCPU 因網路造成的大量使用率。經由測試,在八顆 vCPU 的情況下,網路的吞吐量可以有顯著的提升。如果您運作的虛擬機器有多至八顆 vCPU 以上,則 vRSS 僅會使用其中的八顆 vCPU 來處理網路封包。相反的若您使用小型虛擬機器,僅搭載一顆 vCPU 時,則 vRSS 將不會帶來任何好處。與 vRSS 類似,當在傳送封包時,也會將這些封包交由多顆 vCPU 來處理,來避免單顆 vCPU 高使用率所帶來的瓶頸。

        現今 TCP 單一網路訊框的體積變得越來越大,甚至已經超越當初 Ethernet 的標準 MTU 規範。Linux 客端內的虛擬網路卡驅動程式會採用較大的訊框來轉入 Hyper-V 主端後傳送。Hyper-V 主端使用實體網路卡轉送這種大型的訊框資料到實體的網路上。如果實體網路卡不支援這麼大的訊框,則 Hyper-V 會透過軟體分割切段。不過從 Linux 客端傳遞至 Hyper-V 主端採用較大訊框的傳輸效率明顯高於使用較小的封包。

而在檢查碼 (Checksum) 的作法也是類似的,在 Linux 客端到 Hyper-V 的封包傳輸上,其封包是沒有檢查碼片段的,而 Hyper-V 再轉送封包去外部網路時,將會使用實體網路卡來做檢查碼的計算與附加。如果實體網路卡不支援檢查碼計算功能,則 Hyper-V 將會透過軟體計算。而在後述情況,無論在客端或者主端做軟體計算所消耗的效能是幾乎沒有差異的。

上述功能不需要您去做特別的調整或管理。Hyper-V 將會自動地依照情境啟用這些功能來提升網路吞吐量以及減少 CPU 在處理網路封包上的額外消耗。

Linux  網路熱抽換功能

        其中一個新的網路功能為熱抽換虛擬網路卡。這個功能將會在 Windows Server 2016 Hyper-V(可於目前處於技術預覽階段使用到),以及最新版本的 LIS 驅動程式(4.0 或者之後的版本)。透過熱抽換虛擬網路卡,你可以在虛擬機器運行當中隨時加入或者移除虛擬網路卡,這項功能也能減少虛擬機器下線時間。這在您排除網路問題時相當有用,因為您可直接加入新的網路連線到已知有網路問題的虛擬機器中。

下列範例簡單示範,當您有一台運行於 Hyper-V 上的 Linux 虛擬機器,並配有一張虛擬網路卡。則在 Linux 客端內使用 ifconfig 指令將會看到下圖呈現的樣子:

 

如預期的,您將會看到網路經由 eth0 連線,還有一個本地端的迴路連線 (loopback)。

但如果您到 Hyper-V 管理員加入另外一張虛擬網卡至此虛擬機器中,大部分的 Linux 虛擬機器會立刻地偵測到此虛擬網卡,並指派為 eth1 且自動地透過 DHCP 取得 IP 位置。這張虛擬網卡可以馬上被使用,則 ifconfig 後的結果為下圖:

 當您在 Hyper-V 管理員移除虛擬網卡時,Linux 虛擬機器將會即時的移除這張網路卡。

Linux  網路效能

        我們建立一個測試環境,架設兩台 Linux 虛擬機器分別在兩台分開的 Hyper-V 主端。而這兩個 Hyper-V 主端透過實體的 10G 網路骨幹連結,當然也支援更快的 40G 版本。而這兩台 Linux 虛擬機器各自配備 8 顆虛擬 CPU 以發揮 vRSS 最大效能。我們透過 iperf3 這個工具來測量 Linux 客端的最大網路吞吐量。iperf3 是個開源工具可以點這裡到 Github 查看更多細節。我們設定 iperf3 使用 16 條執行續,並且有不同程度的連線量,來模擬典型生產力伺服器的工作情況。

因此上述的測量配置看起來將會如下圖:

在這個配置下,我們測得最高約 9.4Gbps 的吞吐量,這幾乎已經接近 10G 實體網路連接的速度。

而將實體網路骨幹換為 40G 後,我們目前則可達到約 30Gbps,明顯尚未達到實體網路連結的速度,因此我們將會在未來的 LIS 驅動程式中持續改良提升這個部分。

總結

       網路高效能與高吞吐量是目前在生產力虛擬環境為關鍵需求之一,而 Linux 目前在 Hyper-V 上運行已可達到 10G 實體網路的連接速度,這將能提升更多生產力的使用需求。不過我們的技術將會持續精進,下一步就是盡可能的達到與實體 40G 網路相近的速度為目標。除效能提升之外,也加入了熱抽換虛擬網路卡讓虛擬機器減少下線時間,並提供您更有彈性的網路設定。

本篇文章翻譯自:Microsoft Loves Linux Deep Dive #4: Linux Network Features and Performance