【引自xxxx的博客】Linux網(wǎng)絡(luò)目標(biāo)
在生產(chǎn)力虛擬環(huán)境中,要達(dá)到高性能的網(wǎng)絡(luò)是極為重要的目標(biāo)。針對(duì)這個(gè)目標(biāo),微軟使用在非虛擬環(huán)境下,相同等級(jí)的技術(shù)來在 Linux 虛擬環(huán)境中達(dá)成這個(gè)目標(biāo)。舉例來說,讓虛擬機(jī)不透過 hypervisor 即可直接使用硬件網(wǎng)卡,例如如果有一張實(shí)體的 10G 網(wǎng)卡,我們必須要確保虛擬機(jī)能夠盡可能達(dá)到 10G 的網(wǎng)絡(luò)傳輸性能。在 Azure 公有云上,我們?cè)缫淹度氪罅康募夹g(shù)與開發(fā)能量在優(yōu)化 Linux 于虛擬環(huán)境的性能,以及虛擬機(jī)使用多個(gè)虛擬 CPU 的性能優(yōu)化。并且也針對(duì)多個(gè)程序或者執(zhí)行使用相當(dāng)多的網(wǎng)絡(luò)聯(lián)機(jī)做了優(yōu)化設(shè)計(jì)。而每個(gè)網(wǎng)絡(luò)包的延遲也是相當(dāng)重要的部分,所以除了吞吐量要大之外,也必須顧及延遲的問題。也在 Linux 上實(shí)作這些功能并且作了實(shí)際的評(píng)估與測(cè)量。在稍后的章節(jié)會(huì)更仔細(xì)深入地提及這些測(cè)量的設(shè)置與結(jié)果。
Linux網(wǎng)絡(luò)性能特性
在 Linux 系統(tǒng)整合服務(wù)驅(qū)動(dòng)程序(LIS)中,已經(jīng)包含數(shù)個(gè)提升網(wǎng)絡(luò)性能及吞吐量的功能。 這些功能包括 Virtual Receive Side Scaling (vRSS) 以及數(shù)種 TCP/IP 的處理優(yōu)化。vRSS 功能通過多個(gè) vCPU 來處理流入的網(wǎng)絡(luò)包以增強(qiáng)網(wǎng)絡(luò)性能。在沒有 vRSS 的情況下,流入的包會(huì)導(dǎo)致第一顆 vCPU 經(jīng)常中斷處理網(wǎng)絡(luò)包。而在繁重的網(wǎng)絡(luò)使用時(shí),第一顆 vCPU 的使用率常常飆高至 100% 的使用率,而造成使用率的瓶頸,但其他的 vCPU 卻僅有少量的負(fù)載。 因此, vRSS 可以更有效利用多核來平均中斷不同的核心,減少第一顆 vCPU 因網(wǎng)絡(luò)造成的大量使用率。 經(jīng)由測(cè)試,在八顆 vCPU 的情況下,網(wǎng)絡(luò)的吞吐量可以有顯著的提升。 如果您運(yùn)行的虛擬機(jī)有多至八顆 vCPU 以上,則 vRSS 僅會(huì)使用其中的八顆 vCPU 來處理網(wǎng)絡(luò)包。 相反的若您使用小型虛擬機(jī),僅搭載一顆 vCPU 時(shí),則 vRSS 將不會(huì)帶來任何好處。 與 vRSS 類似,當(dāng)在傳送包時(shí),也會(huì)將這些包交由多顆 vCPU 來處理,來避免單顆 vCPU 高使用率所帶來的瓶頸。
現(xiàn)今, TCP 體積變得越來越大,甚至已經(jīng)超越當(dāng)初 Ethernet 的標(biāo)準(zhǔn) MTU 規(guī)范。Linux 客戶端內(nèi)的虛擬網(wǎng)卡驅(qū)動(dòng)程序會(huì)采用較大的包來轉(zhuǎn)入 Hyper-V 主端后傳送。 Hyper-V 主端使用實(shí)體網(wǎng)卡轉(zhuǎn)送這種大型的數(shù)據(jù)到實(shí)體的網(wǎng)絡(luò)上。如果物理網(wǎng)卡不支持這么大的包,則 Hyper-V 會(huì)透過軟件分割切段。不過,從 Linux 客戶端傳遞至 Hyper-V 主端采用較大包的傳輸效率明顯高于使用較小的包。
而在檢查碼 (Checksum) 的作法也是類似的,在 Linux 客戶端到 Hyper-V 的包傳輸上,其包是沒有檢查碼片段的,而 Hyper-V 再轉(zhuǎn)送包去外部網(wǎng)絡(luò)時(shí),將會(huì)使用物理網(wǎng)卡來做檢查碼的計(jì)算與附加。如果物理網(wǎng)卡不支持檢查碼計(jì)算功能,則 Hyper-V 將會(huì)透過軟件計(jì)算。 而在后述的情況,無論在客戶端或者主端做軟件計(jì)算所消耗的效能是幾乎沒有差異的。
上述功能不需要您去做特別的調(diào)整或管理。 Hyper-V 將會(huì)自動(dòng)地依照情境啟用這些功能來提升網(wǎng)絡(luò)吞吐量以及減少 CPU 在處理網(wǎng)絡(luò)上的額外消耗。
Linux網(wǎng)絡(luò)可用性特性
其中一個(gè)新的網(wǎng)絡(luò)功能為虛擬網(wǎng)卡可用性功能。 這個(gè)功能將會(huì)在 Windows Server 2016 Hyper-V(可于目前處于技術(shù)預(yù)覽階段使用到),以及最新版本的 LIS 驅(qū)動(dòng)程序(4.0 或者之后的版本)。 通過虛擬網(wǎng)卡可用性功能,你可以在虛擬機(jī)運(yùn)行當(dāng)中,隨時(shí)添加或者移除虛擬網(wǎng)卡,這項(xiàng)功能也能減少虛擬機(jī)下線時(shí)間。 這在您排除網(wǎng)絡(luò)問題時(shí)相當(dāng)有用,因?yàn)槟芍苯蛹尤胄碌木W(wǎng)絡(luò)聯(lián)機(jī)到已知有網(wǎng)絡(luò)問題的虛擬機(jī)中。
以下例子簡(jiǎn)單示范,當(dāng)您有一臺(tái)運(yùn)行于 Hyper-V 上的 Linux 虛擬機(jī),并配有一張?zhí)摂M網(wǎng)卡。 則在 Linux 客戶端內(nèi)使用 ifconfig 命令將會(huì)看到下圖呈現(xiàn)的樣子:
如預(yù)期的,您將會(huì)看到網(wǎng)絡(luò)經(jīng)由 eth0 聯(lián)機(jī),還有一個(gè)本地回路 (loopback)。
但如果您到 Hyper-V 加入另外一張?zhí)摂M網(wǎng)卡至此虛擬機(jī)中,大部分的 Linux 虛擬機(jī)會(huì)立刻檢測(cè)到此虛擬網(wǎng)卡,并指派為 eth1 且自動(dòng)使用 DHCP 獲取 IP 。 這張?zhí)摂M網(wǎng)卡可以馬上被使用,則 ifconfig 后的結(jié)果為下圖:
當(dāng)您在 Hyper-V移除虛擬網(wǎng)卡時(shí),Linux 虛擬機(jī)將會(huì)實(shí)時(shí)的移除這張網(wǎng)卡。
Linux網(wǎng)絡(luò)性能
我們建立一個(gè)測(cè)試環(huán)境,架設(shè)兩臺(tái) Linux 虛擬機(jī)分別在兩臺(tái)分開的 Hyper-V 。而這兩個(gè) Hyper-V 通過實(shí)體的 10G 網(wǎng)絡(luò)骨干鏈接,當(dāng)然也支持更快的 40G 版本。 而這兩臺(tái) Linux 虛擬機(jī)各自配備 8 顆虛擬 CPU 以發(fā)揮 vRSS 最大性能。 我們通過 iperf3 這個(gè)工具來測(cè)量 Linux 客戶端的最大網(wǎng)絡(luò)吞吐量。 iperf3 是個(gè)開源工具可以點(diǎn)這里到 Github 查看更多細(xì)節(jié)。 我們?cè)O(shè)定 iperf3 使用 16 條測(cè)試,并且有不同程度的吞吐量,來仿真典型生產(chǎn)力服務(wù)器的工作情況。
因此,上述的測(cè)量配置看起來將會(huì)如下圖:
總結(jié)
網(wǎng)絡(luò)高性能與高吞吐量是目前在生產(chǎn)虛擬環(huán)境為關(guān)鍵需求之一,而 Linux 目前在 Hyper-V 上運(yùn)行已可達(dá)到 10G 物理網(wǎng)絡(luò)的連接速度,這將能提升更多生產(chǎn)力的使用需求。不過,我們的技術(shù)將會(huì)持續(xù)精進(jìn),下一步就是盡可能的達(dá)到與物理 40G 網(wǎng)絡(luò)相近的速度為目標(biāo)。 除性能提升之外,也加入了虛擬網(wǎng)卡可用性功能減少下線時(shí)間,并提供您更有彈性的網(wǎng)絡(luò)設(shè)定。