蘇哲蓉 陳修旭 曾驍勇 杜方
摘要:針對(duì)網(wǎng)絡(luò)密集型應(yīng)用程序?qū)崿F(xiàn)低延遲的需求,本文分析了使用普通網(wǎng)卡的傳統(tǒng)內(nèi)核網(wǎng)絡(luò)協(xié)議棧的不足?;谥悄芫W(wǎng)卡的內(nèi)核旁路技術(shù),探索了其對(duì)于提高數(shù)據(jù)傳輸速率的優(yōu)勢(shì)和有效性。
關(guān)鍵詞:低延遲;內(nèi)核旁路;數(shù)據(jù)傳輸
中圖分類號(hào):TN929.5 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2020)08-0071-02
0 引言
近年來,網(wǎng)絡(luò)規(guī)模日益增長,催生了一系列面向用戶的應(yīng)用程序例如網(wǎng)絡(luò)購物、搜索引擎、在線直播等。其中的網(wǎng)絡(luò)傳輸數(shù)據(jù)量日益增大,而傳統(tǒng)內(nèi)核網(wǎng)絡(luò)協(xié)議棧的處理能力無法與之相匹配。過高的延遲不能為用戶提供清晰良好的使用體驗(yàn),并且在高頻交易等領(lǐng)域?qū)?dǎo)致財(cái)務(wù)損失。因此就對(duì)延遲性能提出迫切需求,要求實(shí)現(xiàn)微秒級(jí)的延遲和高效的數(shù)據(jù)包傳輸速率。
本文將利用solarflare智能網(wǎng)卡所提供的內(nèi)核旁路軟件解決方案之一的Onload,解決傳統(tǒng)內(nèi)核網(wǎng)絡(luò)協(xié)議棧的性能瓶頸。我們將分析傳統(tǒng)網(wǎng)絡(luò)協(xié)議棧的工作原理和缺陷,以及利用智能網(wǎng)卡中的高度加速的網(wǎng)絡(luò)中間件onload,證明其加速網(wǎng)絡(luò)數(shù)據(jù)傳輸以實(shí)現(xiàn)網(wǎng)絡(luò)低延遲[1]的優(yōu)勢(shì)。
1 傳統(tǒng)網(wǎng)絡(luò)協(xié)議棧的問題
在普通網(wǎng)卡中數(shù)據(jù)包在傳統(tǒng)網(wǎng)絡(luò)協(xié)議棧中的處理如下,當(dāng)數(shù)據(jù)包傳輸?shù)狡胀ǖ腘IC,它將被DMA直接送到由NIC驅(qū)動(dòng)程序所維護(hù)的環(huán)形緩沖區(qū)。接著,NIC將向處理器發(fā)送硬件中斷,通知其處理此數(shù)據(jù)包。當(dāng)OS收到中斷后,它將分配sk_buff結(jié)構(gòu),并在softIRQ上下文中調(diào)用net_if_ receive_skb。若是IP數(shù)據(jù)包,則將調(diào)用ip_rcv,將數(shù)據(jù)包傳輸?shù)絻?nèi)核協(xié)議棧以進(jìn)行高級(jí)處理。完成TCP/IP處理后,數(shù)據(jù)包將從內(nèi)核傳送到用戶空間。最后,應(yīng)用程序可以通過標(biāo)準(zhǔn)POSIX調(diào)用,從套接字讀取數(shù)據(jù)包并執(zhí)行下一步操作。
從以上過程可以看出,內(nèi)核網(wǎng)絡(luò)協(xié)議棧的開銷主要來源于以下三方面:
(1)系統(tǒng)調(diào)用開銷:當(dāng)應(yīng)用程序請(qǐng)求系統(tǒng)調(diào)用以和內(nèi)核協(xié)議棧中的網(wǎng)絡(luò)套接字進(jìn)行交互時(shí),包的處理需要在中斷處理、內(nèi)核態(tài)和用戶態(tài)中不停地切換。那么頻繁的系統(tǒng)調(diào)用和上下文切換必然帶來了額外的處理開銷,從而導(dǎo)致性能下降。
(2)額外的數(shù)據(jù)拷貝:在接收或發(fā)送數(shù)據(jù)時(shí),數(shù)據(jù)包需要在用戶空間緩沖區(qū)和內(nèi)核之間進(jìn)行拷貝。
(3)內(nèi)核數(shù)據(jù)包的處理:處理的每個(gè)數(shù)據(jù)包將會(huì)導(dǎo)致中斷、動(dòng)態(tài)內(nèi)存分配和復(fù)雜的數(shù)據(jù)結(jié)構(gòu)的構(gòu)建。如sk_buff(socket buffer)不僅結(jié)構(gòu)復(fù)雜會(huì)增加內(nèi)存的讀寫開銷,且在處理數(shù)據(jù)包時(shí),其頻繁地被申請(qǐng)和釋放會(huì)占用大量系統(tǒng)資源。
2 智能網(wǎng)卡下的內(nèi)核旁路軟件Onload增加數(shù)據(jù)傳輸速率的優(yōu)勢(shì)
內(nèi)核旁路技術(shù)是指在用戶空間中同時(shí)運(yùn)行應(yīng)用程序和網(wǎng)絡(luò)驅(qū)動(dòng)程序,繞過了內(nèi)核網(wǎng)絡(luò)協(xié)議棧,將原始數(shù)據(jù)包緩沖區(qū)直接傳遞到用戶空間,而用戶進(jìn)程封裝好的數(shù)據(jù)包則直接由網(wǎng)卡驅(qū)動(dòng)發(fā)送出去,這使得所連接的應(yīng)用程序端能以更低且更一致的延遲來處理更多消息。
基于智能網(wǎng)卡下的Onload是個(gè)高性能用戶空間協(xié)議棧[2],本文主要討論其中的openonload。OpenOnload是IP上的TCP和UDP的實(shí)現(xiàn),它被動(dòng)態(tài)鏈接到用戶模式應(yīng)用程序的地址空間中,并允許對(duì)網(wǎng)絡(luò)適配器硬件的直接但安全訪問。可以在不涉及操作系統(tǒng)的情況下,通過應(yīng)用程序直接將數(shù)據(jù)傳輸?shù)骄W(wǎng)絡(luò)并從網(wǎng)絡(luò)接收數(shù)據(jù)。因?yàn)槔@過了內(nèi)核,這樣就可以避免了相應(yīng)的破壞性事件,例如系統(tǒng)調(diào)用,上下文切換和中斷,從而提高了處理器可以執(zhí)行應(yīng)用程序代碼的效率。這也直接減少了主機(jī)處理的開銷,為應(yīng)用程序處理留出了更多的CPU時(shí)間。對(duì)于如市場(chǎng)數(shù)據(jù)和交易應(yīng)用程序這樣的網(wǎng)絡(luò)密集型應(yīng)用程序,這種影響更為明顯。
使用傳統(tǒng)內(nèi)核協(xié)議棧時(shí),應(yīng)用程序會(huì)在OS內(nèi)核上進(jìn)行調(diào)用,以發(fā)送和接收來自網(wǎng)絡(luò)的數(shù)據(jù)。從應(yīng)用程序到內(nèi)核的轉(zhuǎn)換是一項(xiàng)代價(jià)巨大的操作,這等效于數(shù)百或數(shù)千條指令。當(dāng)應(yīng)用程序使用OpenOnload來發(fā)送或接收數(shù)據(jù)時(shí),其可以直接訪問網(wǎng)絡(luò)適配器上的分區(qū),無需訪問操作系統(tǒng)。圖1展示了這兩種方案的對(duì)比。
OpenOnload使數(shù)據(jù)在用戶進(jìn)程內(nèi)完全完成了TCP/IP處理,從而消除了代價(jià)巨大的應(yīng)用程序與內(nèi)核之間的轉(zhuǎn)換。且基于對(duì)內(nèi)核的繞行,避免了額外的數(shù)據(jù)拷貝,無需在用戶空間緩沖區(qū)和內(nèi)核之間進(jìn)行數(shù)據(jù)拷貝。在應(yīng)用程序和網(wǎng)絡(luò)適配器之間傳輸數(shù)據(jù)時(shí),這種零拷貝跳過了中間緩沖區(qū)來提高網(wǎng)絡(luò)應(yīng)用程序的性能。
同時(shí),將硬件級(jí)別的NIC劃分為多個(gè)受保護(hù)的虛擬NIC(VNIC),授予應(yīng)用程序直接訪問VNIC的權(quán)限,而無法訪問系統(tǒng)的其余部分(包括不屬于該應(yīng)用程序的其他VNIC或內(nèi)存)。因此,在保證了安全性和系統(tǒng)的完整性前提下,可實(shí)現(xiàn)最佳性能。此外,還對(duì)Onload中TCP/IP堆棧進(jìn)行了高度調(diào)整,從而進(jìn)一步節(jié)省了開銷。簡而言之,減少的開銷意味著減少的延遲。使用onload模式所節(jié)省的開銷,使得應(yīng)用程序可以使用更多的CPU計(jì)算能力來完成有用的工作。
3 結(jié)語
實(shí)驗(yàn)結(jié)果表明,對(duì)于相同大小的數(shù)據(jù),基于智能網(wǎng)卡的onload協(xié)議棧來繞過內(nèi)核的方案相比于普通網(wǎng)卡下的經(jīng)過內(nèi)核的傳統(tǒng)方案,其所消耗的數(shù)據(jù)傳輸時(shí)間明顯縮短。綜上所述,基于onload模式下內(nèi)核旁路的優(yōu)勢(shì),應(yīng)用程序可以保持在用戶級(jí)別,等待請(qǐng)求到達(dá)網(wǎng)絡(luò)適配器并直接處理它們。內(nèi)核到用戶之間的轉(zhuǎn)換以及中斷的消除可以大大減少延遲,加速了網(wǎng)絡(luò)數(shù)據(jù)傳輸以實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)低延遲的迫切需求。
參考文獻(xiàn)
[1] 左旭彤,王莫為,崔勇.低時(shí)延網(wǎng)絡(luò):架構(gòu),關(guān)鍵場(chǎng)景與研究展望[J].通信學(xué)報(bào),2019,40(8):22-35.
[2] 別體偉,華蓓.用戶空間協(xié)議棧的并行化與性能優(yōu)化[J].電子技術(shù),2016,45(8):50-56.