蘇哲蓉 陳修旭 曾驍勇 杜方

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