專利名稱:用于處理網絡信息的方法及系統的制作方法
技術領域:
本發明涉及TCP數據和相關TCP信息的處理。更具體地說,涉及一種用 于用戶空間TCP減負引擎的方法和系統。
背景技術:
目前有很多不同的方法用來降低TCP/IP協議棧處理的處理功耗。在TCP 減負引擎(TOE)中,減負引擎執行所有或大部分的TCP處理,將數據流傳 送給高層。這種方法有多種缺陷。TOE與操作系統緊密連接,因此要求按照 操作系統來制定解決方案,并要求改變操作系統以支持它。TOE可能要求并 排的協議棧解決方案,所述解決方案要求通過應用程序進行某種手動配置,例 如顯式的指定套接字地址族,以便加快連接的速度。TOE也可要求由IT管理 員進行某種手動配置,例如,通過顯式的制定IP子網地址,以便加快連接的 速度,從而來選擇TCP流中的哪些會被減負,由于需要實現TCP包處理,減 負引擎非常復雜。大型分段減負(LSO) /發送分段減負(TSO)可用來降低主處理功耗,這 是通過簡化發送分組處理過程來實現的。在這種方法中,主機將比最大傳輸單 元(MTU)更大的傳輸單位發送給NIC, NIC根據MTU將它們分割成段。由 于部分主處理過程與所發送單元的數量呈線性關系,所以這減少了所要求的主 處理功耗。雖然在簡化發送分組處理方面是有效的,但是LSO對接收分組處 理沒有幫助。另外,對于主機發送的每個單獨的大型傳輸單元,主機從遠端接 收多個ACK,每個ACK對應一個大小為MTU的段。多個ACK要求耗用稀 有和昂貴的帶寬,從而降低了吞吐量和效率。在大型接收減負(LRO)的無狀態接收減負機制中,根據可保證特定的 TCP流總會被載入相同硬件隊列的散列函數,TCP流可被分割載入多個硬件
隊列中。對于每個硬件隊列,所述機制利用中斷結合來掃描隊列,并將隊列中 屬于同一 TCP流的后續數據包聚合為一個大的接收單元。雖然除了多個硬件隊列之外,這種機制不要求在NIC上附加任何硬件, 但是它有各種性能限制。例如,如果流的數量大于硬件隊列的數量,多個流會進入相同的隊列,導致這個隊列沒有LRO聚合。如果流的數量大于硬件隊列 數量的兩倍,在任何流上都不會執行LRO聚合。所述聚合會受到在一個中斷 周期主機可得到的數據包數量的限制。如果中斷周期很短,流的數量不小,主 機CPU可得到、用于每個流的聚合的數據包數量會很少,導致LRO聚合受限 或者沒有LRO聚合。甚至在硬件隊列的數量很大的情況下,也可能出現LRO 聚合受限或者沒有LRO聚合。LRO聚合可能是由主機CPU執行,這將導致 額外的處理負擔。驅動可將鏈接的緩沖區列表傳送到TCP協議棧,所述緩沖 區包括報頭緩沖區,報頭緩沖區后面是一系列的數據緩沖區,相比所有的數據 在一個緩沖區上連續傳送的情況,這要求更多的處理。當主機處理器必須執行讀/寫操作時,數據緩沖區必須被分配到用戶空間。 讀操作可用來將數據從文件夾復制到這個分配的緩沖區中。寫操作用來將緩沖 區的內容傳送到網絡。OS內核必須將所有的數據從用戶空間復帝J到內核空間。 復制操作是CPU和存儲器帶寬的密集型操作,會限制系統性能。TCP/IP協議棧中的用戶空間和內核空間之間的數據復制會耗費主處理功 耗。為降低住處理功耗,已經提出了許多解決方案。例如,禾IJ用遠程直接內存 存取(RDMA)可避免同時在發送和接收兩個方向上進行存儲器拷貝。但是, 這要求新的應用程序接口 (API)、新的線協議、并對線兩側的現有應用程序 進行修改。本地DMA引擎可用來減負發送和接收方向上的存儲器拷貝。雖然 本地DMA引擎可從CPU減負復制操作,但是它不會減少所要求的存儲器帶 寬。當平臺朝向多CPU架構轉移,每個CPU中有多個內核,所有的內核都共 享同一存儲器時,存儲器帶寬會是高速網絡應用中嚴重的瓶頸。本申請的F文將參照附圖對本發明進行描述,通過將傳統的系統與本發明 的某些方面進行比較,對于本技術領域的人員來說,常規和傳統方法的更多限 制和缺點將會變得更明顯
發明內容
一種用于用戶空間TCP減負引擎的方法和系統,結合至少一幅附圖進行 了描述,在權利要求中有更完整的闡述。根據本發明的一方面,提供了一種用于處理網絡信息的方法,所述方法包括將對收到的數據進行的傳輸控制協議(TCP)處理減負到片載處理器上進 行;以及利用用戶空間庫,跳過對所述收到的數據進行的內核處理,將所述收到的 數據直接發送到硬件。在本發明所述的方法中,所述方法還包括確定所述接收的數據是否緩存在 存儲器中。在本發明所述的方法中,所述方法還包括,如果所述收到的數據沒有緩存 在所述存儲器中,注冊至少一個應用程序緩沖區,所述緩沖區內包括所述收到 的數據。在本發明所述的方法中,所述方法還包括,如果所述收到的數據沒有緩存 在所述存儲器中,鎖定所述至少一個應用程序緩沖區。在本發明所述的方法中,所述方法還包括,如果所述收到的數據沒有緩存 在所述存儲器中,將所述鎖定的、包括所述收到的數據的至少一個應用程序緩 沖區直接發送到所述硬件。在本發明所述的方法中,所述方法還包括為所述至少一個應用程序緩沖區的緩沖區ID添加應用程序緩沖區虛擬地 址;以及將所述至少一個應用程序緩沖區存儲在高速緩沖存儲器中。 在本發明所述的方法中,所述方法還包括,如果所述收到的數據緩存在所述存儲器中,將所述收到的數據直接發送到所述硬件,跳過對所述收到的數據進行的內核處理。在本發明所述的方法中,所述方法還包括,將包括所述收到的數據的至少一個應用程序緩沖區預發送到所述硬件。在本發明所述的方法中,所述方法還包括,通過更新所述硬件中的完成隊 列條目,指示收到所述數據。在本發明所述的方法中,所述方法還包括在更新完所述硬件中的所述完成 隊列條目之后,生成事件通知。根據本發明的一個方面,提供了一種用于處理網絡信息的系統,所述系統 包括將對收到的數據進行的傳輸控制協議(TCP)處理減負到片載處理器上進 行的電路;以及利用用戶空間庫、跳過對所述收到的數據進行的內核處理、將所述收到的 數據直接發送到硬件的電路。在本發明所述的系統中,所述系統還包括確定所述收到的數據是否緩存在 存儲器中的電路。在本發明所述的系統中,所述系統還包括,用于在所述收到的數據沒有緩 存在所述存儲器中時、注冊至少一個應用程序緩沖區的電路,所述緩沖區包括 所述接收的數據。在本發明所述的系統中,所述系統還包括,用于在所述收到的數據沒有緩 存在所述存儲器時、鎖定所述至少一個應用程序緩沖區的電路。在本發明所述的系統中,所述系統還包括,用于在所述收到的數據沒有緩 存在所述存儲器中時、將所述鎖定的、包括所述接收數據的至少一個應用程序 緩沖區直接發送到所述硬件的電路。在本發明所述的系統中,所述系統還包括為所述至少一個應用程序緩沖區的緩沖區ID添加應用程序緩沖區虛擬地 址的電路;以及將所述至少一個應用程序緩沖區存儲在高速緩沖存儲器中的電路。 在本發明所述的系統中,所述系統還包括,用于在所述收到的數據高速緩存在所述存儲器中時、將所述收到的數據直接發送到所述硬件、跳過對所述收到的數據進行的內核處理的電路。
在本發明所述的系統中,所述系統還包括,將包括所述收到的數據的至少 一個應用程序緩沖區預發送到所述硬件的電路。在本發明所述的系統中,所述系統還包括,通過更新所述硬件中的完成隊 列條目、指示接收到所述數據的電路。在本發明所述的系統中,所述系統還包括,在更新所述硬件中的所述完成 隊列條目之后,生成事件通知的電路。從以下的描述和附圖中,本發明的這些和其他優點、方面和新穎性特征, 及其實施例的細節都可得到更全面的理解。
圖1A是根據本發明的實施例的用于TCP減負的示范性系統的框圖;圖IB是根據本發明的實施例的用于TCP減負的另一個示范性系統的框圖;圖1C是根據本發明的實施例的用于TCP減負的示范性系統的另一實施例;圖ID是根據本發明的實施例的在主機CPU系統中進行寫操作時復制數 據的流程圖;圖IE是根據本發明的實施例的在主機CPU系統中進行讀操作時復制數 據的流程圖;圖2A是根據本發明的實施例的為用戶空間TCP減負引擎(TOE)建立連 接的示范性過程的流程圖;圖2B是根據本發明的實施例的通過用戶空間庫分配隊列的示范性系統的 框圖;圖3A是根據本發明的實施例的用戶空間TOE的示范性發送或傳輸過程 的流程圖;圖3B是根據本發明的實施例的當高速緩存中未包含應用程序緩沖區時, 用戶空間TOE的示范性發送或傳輸過程的流程圖;圖3C是根據本發明的實施例的當高速緩存中包含應用程序緩沖區時,用
戶空間TOE的示范性發送或傳輸過程的流程圖;圖4A是根據本發明的實施例的用戶空間TOE示范性接收過程的流程圖;圖4B是根據本發明的實施例的當高速緩存中未包含應用程序緩沖區時,, 用戶空間TOE的示范性接收過程的流程圖;圖4C是根據本發明的實施例的當高速緩存中包含應用程序緩沖區時,用 戶空間TOE的示范性接收過程的流程圖;圖5是根據本發明的實施例的帶有用戶空間庫的透明TCP減負的工作請 求完成的示范性步驟的流程圖。
具體實施方式
本發明的某些實施例涉及用于用戶空間TCP減負引擎的方法和系統。所述 方法和系統包括將對所接收數據的傳輸控制協議(TCP)處理減負到片載處理 器上進行。可利用用戶空間庫將所接收的數據直接發送到硬件,跳過對所接收 數據進行的內核處理。如果所接收的數據沒有緩存在存儲器中,可通過用戶空 間庫注冊包括所接收數據的應用程序緩沖區。所述應用程序緩沖區可被鎖定并 發送到硬件。圖1A是根據本發明的實施例的用于TCP減負的示范性系統的框圖。因 此,圖1A中的系統用于處理傳輸控制協議(TCP)數據報或數據包的TCP減 負。參照圖1A,所述系統包括,例如CPU 102、存儲器控制器104、主機存 儲器106、主機接口 108、網絡子系統110和以太網112。網絡子系統110包 括,例如TCP以太網控制器(TEEC)或者TCP減負引擎(TOE) 114。主機 接口 110可包括,例如網絡接口卡(NIC)。主機接口 108是,例如外圍部件 互連(PCI)、 PCI-X、 PCI-Express、 ISA、 SCSI、或其它類型的總線。存儲器 控制器104連接到CPU 102、存儲器106和主機接口 108。主機接口 108通過 TEEC/TOE 114連接到網絡子系統110。圖1B是根據本發明的實施例的用于TCP減負的另一個示范性系統的框 圖。參照圖1B,所述系統包括,例如CPU 102、主機存儲器106、專用存儲 器116和芯片集118。芯片集118包括,例如網絡子系統110和存儲器控制器
104。芯片集118連接到CPU 102、主機存儲器106、專用存儲器116和以太 網112。芯片集118的網絡子系統IIO連接到以太網112。網絡子系統110包 括,例如連接到以太網112的TEEC/TOE114。網絡子系統110通過例如有線 和/或無線連接與以太網112通信。無線連接可以是例如IEEE 802.11標準所支 持的無線局域網(WLAN)連接。網絡子系統110也可包括例如片載存儲器 113。專用存儲器116可為上下文(context)和/或數據提供緩沖區。網絡子系統110包括處理器,例如結合器lll。結合器lll可包括合適的 邏輯、電路和/或代碼,用于處理TCP數據的積累或者結合。在這點上,結合 器111可利用流查詢表(FLT)來維護關于當前網絡流的信息,收集并聚合TCP 數據段。FLT可存儲在例如網絡子系統110中。FLT包括以下中的至少一個 例如源IP地址、目的IP地址、源TCP地址、目的TCP地址。在本發明的另 一實施例中,可利用至少兩個不同的表,例如,包括4元組(4一tupk)査詢 的表,用于以根據輸入數據包的流將輸入數據包分類。所述4元組査詢表包括 以下中的至少一個例如源IP地址、目的IP地址、源TCP地址、目的TCP 地址。流的上下文表包括用于聚合的狀態變量,例如TCP序列號。FLT還包括以下中的至少一項包括用于非連續存儲器的分散集中列表 (SGL)的主機緩沖區或存儲器地址、積累的確認(ACK)、 TCP報頭和選項 副本、IP報頭和選項副本、因特網報頭副本、和/或積累的TCP標志。當終止 事件發生時,結合器111可從積累或收集的TCP段中生成一個聚合的TCP段。 聚合的TCP段可發往例如主機存儲器106。雖然以CPU和以太網為例進行了說明,但是本發明并不限于這些實施例,并可分別使用例如任何類型的存儲器和任何類型的數據鏈接層或物理介質。因 此,雖然圖中展示的是連接到以太網112,但是圖IA中的TEEC或TOE 114 可適用于任何類型的數據鏈路層或者物理介質。另外,圖1A-B中展示的組件 還可進行不同程度的分解或集成。例如,TEEC/TOE 114可以是嵌在主板或 NIC中的、在芯片組118之外單獨設置的集成芯片。類似地,結合器lll可以 是嵌在主板或NIC中的、在芯片組118之外單獨設置的集成芯片。另外,專 用存儲器116可與芯片組118集成在一起或者與圖1B所示的網絡子系統110
集成在一起。圖1C是根據本發明的實施例的用于TCP減負的示范性系統的另一實施例。參照圖1C,示出了硬件模塊135。硬件模塊135包括主機處理器124、高 速緩存存儲器/緩沖區126、軟件算法模塊134和NIC模塊128。 NIC模塊128 可包括NIC處理器130、諸如結合器131之類的處理器、NIC存儲器/應用程 序緩沖區模塊132。 NIC模塊128可通過例如有線和/或無線連接與外部網絡通 信。無線連接可以是例如IEEE 802.11標準所支持的無線局域網(WLAN)連結合器131可以是位于數據包接收路徑上的專用處理器或者硬件狀態機。 主機TCP協議棧可包括用于管理TCP協議處理的軟件,并且可以是例如 Microsoft Windows或Linux等操作系統的一部分。結合器131可包括合適的邏 輯、電路和/或編碼,用于積累或聚合TCP數據。在這點上,結合器131可利 用流査詢表(FLT)來維護關于當前網絡流的信息,收集并聚合TCP數據段。 FLT可被存儲在例如NIC存儲器/應用程序緩沖區模塊132中。當終止事件發 生時,結合器131可從積累或收集的TCP段中生成一個聚合的TCP段。聚合 的TCP段可發往例如高速緩沖存儲器/緩沖區126。根據本發明的某些實施例,可將聚合后的單一 TCP段發往主機進行TCP 處理,以此來顯著降低主機124的處理負擔。另外,由于沒有傳送TCP狀態 信息,NIC128之類的專用硬件可用來協助對收到的TCP段進行處理,以便降 低每數據包的處理負擔,這是通過結合或聚合多個收到的TCP段來實現的。在常規的TCP處理系統中,在TCP連接的第一個數據段到達之前,有必 要了解關于此TCP連接的某些信息。而根據本發明的實施例,在第一個數據 段到達之前,無需了解TCP連接,因為TCP狀態或上下文信息仍由主機TCP 協議棧進行單獨的管理,在任何給定的時間,硬件協議棧和軟件協議棧之間都 不會傳送狀態信息。在本發明的實施例中,提供了一種減負機制,該機制從主機協議棧的角度 來看是無狀態的,但從減負設備的角度來看是全狀態的,可實現與TOE相當 的性能增益。通過允許主機系統處理大于MTU的接收和發送數據單元,TCP
減負可減少TCP所要求的主機處理功耗。在本發明的示范性實施例中,所處理的是64KB的協議數據單元(PDU)而不是1.5KB的PDU,以此來顯著降 低數據包速率,從而減少數據包處理的主機處理功耗。在TCP減負過程中,在主機操作系統和包括TOE的NIC之間不會進行握 手。TOE會自主的識別新的流并進行減負。發送端的減負類似于LSO,其中 主機發送大發送單元,TOE根據最大段長度(MSS)將它們分成更小的發送 數據包。接收端的TCP減負過程是將收到的屬于同一流的多個數據包聚合,然后 將它們發往主機,就好像這些收到的數據包是從一個數據包——一個大的數據 包中收到的一樣,同時ACK數據包就好像是一個聚合的ACK數據包一樣。 主機中的處理類似于對所接收的大數據包的處理。在TCP流聚合的情況下, 可定義規則來確定是否聚合數據包。可制定聚合規則來允許盡可能多的聚合, 而不會增加往返行程時間,使得是否聚合取決于所接收的數據以及不經延遲地 將它發送到主機的重要程度。可使用發送-接收連接來實現聚合,其中發射器 和接收器之間的連接是使用用于進行減負決定的傳輸信息來實現的,且流可被 看作是雙向流。TOE中接收減負過程中的上下文信息可以數據流為單位進行 維護。在這點上,對于每個所接收的數據包,進站數據包報頭可被用于檢測它 所屬的流,且這個數據包對流的上下文進行更新。當發送器和接收器相連時,可連同所接收的網絡數據包一起搜索所發送的 網絡數據包,以確定數據包所屬的特定網絡流。所發送的網絡數據包可用于對 流的上下文進行更新,這可用于接收減負過程。圖ID是根據本發明的實施例的在主機CPU系統中進行寫操作時拷貝數 據的流程圖。參照圖1D,示出了各種上下文切換、用戶緩沖區164、內核緩 沖區162、 NIC存儲器168、以及為寫操作執行的復制操作。在步驟152中, 寫系統呼叫導致上下文切換,從用戶模式切換到內核模式。可執行復制操作以 將數據傳送到內核緩沖區162。在步驟154,寫系統呼叫可返回,生成另一上 下文切換。當DMA引擎獨立且同歩地將數據從內核緩沖區162傳送到NIC存 儲器168時,發生另一次復制操作。數據的復制不是必須的,可將其取消,以
降低開銷并提高性能。為了降低開銷,可取消內核緩沖區162和用戶緩沖區164之間的一些復制操作。圖1E是根據本發明的實施例的在主機CPU系統中進行讀操作時拷貝數 據的流程圖。參照圖1E,示出了各種上下文切換、用戶緩沖區164、內核緩 沖區162、 NIC存儲器168、以及為寫操作執行的復制操作。在步驟172中, 寫系統呼叫導致上下文切換,從用戶模式切換到內核模式。可執行復制操作以 將數據傳送到內核緩沖區162。在步驟174,讀系統呼叫可返回,生成另一上 下文切換。當DMA引擎獨立且同步地將數據從內核緩沖區162傳送到NIC存 儲器168時,發生另一次復制操作。數據的復制不是必須的,可將其取消,以 降低開銷并提高性能。為了降低開銷,可取消內核緩沖區162和用戶緩沖區 164之間的一些復制操作。圖2A是根據本發明的實施例的為用戶空間TCP減負引擎(TOE)建立連 接的示范性過程的流程圖。參照圖2A,示出了硬件202、內核204、用戶空間 庫206以及應用程序208。硬件202可包括合適的邏輯和/或電路,可用于處理 從各種驅動和連接到硬件202的其他設備處接收的數據。內核204可包括合適 的邏輯和/或代碼,用于管理CPU 102的資源,并使其他的應用程序208在主 機系統運行。內核204用于實現例如調度、緩沖、高速緩存、假脫機、以及故 障處理功能。內核204還用于實現各種硬件和軟件組件之間的通信。用戶空間 庫206是用于研發軟件的子程序集。用戶空間庫206允許編碼和數據以組合的 方式共享和交換。用戶空間庫206可通過確定4組元、接收隊列(RQ)、發送隊列(SQ)、 以及完成隊列(CQ),來注冊一個連接。可選的,內核204可將過濾規則應用 于注冊連接數據包,以確定是否允許連接請求。內核204可鎖定并映射RQ、 SQ、 CQ和用戶上下文緩沖區。內核204還將RQ、 SQ、 CQ的DMA地址和 用戶上下文緩沖區存儲在為流最新分配的FLT中。在本發明的另 一實施例中,用戶空間庫206可指定由內核204提供的在用 連接的句柄。內核204同意將連接的所有權傳送給用戶空間庫206。如果內核 204同意將連接的所有權傳送給用戶空間庫206,內核204可將此連接所要求
的TCP狀態信息提供給用戶空間庫206。在本發明的另一實施例中,用戶空間庫206可自己建立被動連接。用戶空 間庫206可請求將為其分配本地IP地址和TCP端口,制定將要使用的具體 RQ禾nCQ。如果通過,內核204可注冊并鎖定RQ和CQ,如果還未被鎖定, 接下來生成減負監聽條目。圖2B是根據本發明的實施例的通過用戶空間庫分配隊列的示范性系統的 框圖。圖2B中展示了用戶空間庫220、完成隊列(CQ) 222、接收隊列(RQ) 224、發送隊列(SQ) 226、普通接收隊列(GRQ) 228、以及內核230。在對流進行用戶空間TOE處理之前,用戶空間庫220可分配至少一個接 收隊列(RQ) 224、發送隊列(SQ) 226、通用接收隊列(GRQ) 228、完成 隊列(CQ) 222。內核230可鎖定并映射(map) RQ 224、 SQ 226、 CQ 222 以及GRQ 228。用戶空間庫220可獨立于任何特定流分配RQ 224、 SQ 226、 CQ222以及GRQ228。內核230可提供句柄,在之后來自用戶空間庫220的 請求中,會用到該句柄。發送隊列(SQ) 226可允許用戶空間庫220將發送任務請求直接發往緩沖 環,所述緩沖環可由設備直接讀取。可選的門鈴(doorbell)可提供存儲器映 射位置,用戶空間庫220可在所述存儲器映射位置上執行寫入操作,從而將事 件通知提供給設備。這個門鈴環可告知設備,特定的發送隊列226不是空的。 帶有門鈴的發送隊列226可用于連接RDMA設備。通過使用RDMA接口 ,任 務請求中用到的緩沖區可使用代表已注冊緩沖區的句柄,這樣一來,設備便可 知道任務請求的發送者具備使用該緩沖區的必要權限。這個句柄可被稱為通過 IP接口的RDMA的控制標志(Stag)。帶有用戶空間庫220的TOE的實現與 發送發送隊列226的任務請求的性質不同。接收隊列(RQ) 224允許用戶空間庫220將接收任務請求直接發送到可 由設備直接讀取的緩沖池。通過發送任務請求,所涉及的緩沖區可使用代表已 注冊緩沖區的句柄。支持用戶空間TOE的接收隊列224可能與傳統RQ不同, 因為在緩沖區被發送之前,緩沖區不會預先與特定進站消息建立關聯。這是由 T基本的有線協議TCP,在任務請求和有線協議消息之間沒有委托關系。 完成隊列(CQ) 222允許用戶空間庫220直接接收設備寫入的任務完成 情況。支持用戶空間TOE的完成隊列222與常規的CQ不同,因為TOE可比 支持RDMA的CQ 222以更靈活的順序生成任務完成情況。完成隊列222具 有相關的機制,其中用戶處理可通知何時生成任務完成情況或者何時生成特定 類型的任務完成情況的回叫信號。對于用戶空間TOE,可選擇代理機制,使 得設備仍然通報用戶空間庫。由于設備不會直接中斷用戶模式處理,可能要求 內核中的代理。例如,實現這種通告中繼代理的方法是,轉送回叫、接通信號 燈或線程,或者生成與文件描述符相關的事件。減負監聽表(OLT)可用于轉發與特定流不匹配、但是與本地TCP端口 匹配的TCP段。OLT可與減負連接的支持組件集成在一起,如TOE、 iSCSI 和RDMA。用戶空間TCP庫220用于提供套接字API和/或套接字操作接口 。每個操 作可對應于接收消息(recvmsg ())或者發送消息(sendmsg ())呼叫,這取 決于所提供的API是字面套接字API還是回叫API和/或基于任務隊列的同步 操作。例如,如果用戶發送三個連續的recvmsg ()操作,那么就會有三種完 成狀況,假設沒有錯誤,且隨每種完成狀況所發送的載荷量與recvmsg ()的 語義相匹配。因此,所要求的TCP報頭動作的數量不一定非要取決于用戶收 到的任務請求完成的數量。接收緩沖區有兩種不同的數據結構,例如,RQ224和GPQ 228。如果用 戶空間庫220確定允許CNIC 128訪問它的開銷是合理的,則RQ 224用于直 接接收。即時鎖定可用于證明注冊是適當的,否則用戶空間庫220可被用于證 明被頻繁重新利用的合適大小的緩沖區和非常大的緩沖區是適當的。當RQ224條目對無序數據包來說不可用時,GRQ228可接收數據。無序 數據包可被放置在RQ 224緩沖區中,但是如果在緩存滿之前PSH操作要求發 送數據,則接下來無序數據包必須被移走。只要GRQ 228緩存完成,至少一 個RQ224緩存也會完成,不管是否有數據存儲在其中。用戶空間中的CQ222 輪詢程序可將放置在GRQ 228緩沖區中的任何數據復制到RQ 224緩沖區中。 RQ 224緩沖區是存儲器復制操作(memcpy ())的合適目標,即使在其上沒 有執行過注冊,因為cq—poll是用戶空間程序。memcpy ()操作的功耗是可以 忽略的,因為數據被高速緩存以備使用,并在應用程序處理數據之前被立即執 行。與由內核處理器執行到用戶的復制相比,復制到用戶的操作比memcpy () 更加復雜,在應用程序使用數據之前,使高速緩存無效的幾率更高。當執行 recvmsg ()呼叫時,用戶空間庫220可用于接收存放在GRO 228緩沖區中的 任務完成狀況,然后確定用戶空間庫220是否需要等待下一個任務請求。如果 許可等待下一個任務請求,用戶空間庫220決定將任務請求發送到RQ 224, 所述任務請求帶有目標緩沖區的注冊緩沖區ID。選擇性地,用戶空間庫220 等待新的GRQ 228完成狀況。當有更多的完成狀況時,用戶空間庫220重復 處理,直到它有足夠的接收數據來完成套接字級別操作。選擇性地,用戶空間 庫220可在回叫API上運行,其中它可調用下一個更高的級別,所述更高的 級別帶有包括GRQ 228緩存的SGL和指示所有權和/或處理緊急度的命令。用 戶空間庫220可處理多個報頭,并確定recvmsg ()操作未完成,且繼續處理 同一RQ 224任務請求。根據本發明的實施例,可利用基于映射存儲器接口的RDMA型接口,這 種接口的元件可被稱為隊列對(QP)和完成隊列(CQ) 222。帶有用戶空間 庫的TOE與使用內核編碼的TOE不同,所述內核編碼基于多種數據結構,所 述數據結構被用來使用戶空間庫220直接與減負設備交互。圖3A是根據本發明的實施例的用戶空間TOE的示范性發送或傳輸過程 的流程圖。圖3A中展示了硬件302、內核304、用戶空間庫306和應用程序 308。硬件302可包括合適的邏輯和/或電路,可用于處理從各種驅動以及連接 到硬件302的其他設備接收的數據。內核304可包括合適的邏輯和/或代碼, 用于管理CPU 102系統和/或設備資源,并使其他的應用程序308在主機系統 運行。內核304用于例如調度、緩沖、高速緩存、假脫機、以及故障處理的功 能。內核304還用于各種硬件和軟件組件之間的通信。用戶空間庫306是用于 研發軟件的子程序集。用戶空間庫306允許編碼和數據以組合的方式共享和交 換。應用程序308用于將發送消息傳送到用戶空間庫306。如果發送消息較短 或具有特定的長度,用戶空間庫306可避免鎖定應用程序發送緩沖區132。在 發送消息很短的情況下,它可被直接傳送到使用SQ的硬件,而不會查詢緩沖 ID。如果發送消息不短或者大于特定的長度,用戶空間庫306可用于將應用程 序發送緩沖區132復制到預先鎖定的應用程序發送緩沖區132。用戶空間庫306 可將預先鎖定的應用程序發送緩沖ID加入發送隊列(SQ)中。硬件302可查 詢緩沖區地址的緩沖ID。硬件302可用于對應用程序發送緩存進行直接存儲 存取(DMA)。硬件302可對應用發送緩存132中的數據執行分段和TCP處 理,并在線程上發送得到的數據包。圖3B是根據本發明的實施例的當高速緩存中未包含應用程序緩沖區時, 用戶空間TOE的示范性發送或傳輸過程的流程圖。圖3B展示了硬件302、內 核304、用戶空間庫306和應用程序308。例如,當應用程序發送緩沖區132不在高速緩存中時,應用程序308被用 于將發送消息傳送到用戶空間庫306。用戶空間庫306注冊應用程序發送緩沖 區132,并將應用程序發送緩沖區132發送到內核304。內核304可用于鎖定 并映射應用程序發送緩沖區132。內核304可將應用程序發送緩沖區132的緩 沖ID發送到用戶空間庫306。用戶空間庫306在所接收的緩沖ID上添加緩沖 區虛擬地址,并將緩沖ID存儲在高速緩存中。用戶空間庫306可將SQ中被 鎖定和映射的應用程序發送緩沖區132的緩沖ID發送到硬件302。硬件302 可用于為緩存地址查找緩沖ID。硬件302可用于對應用程序發送緩沖區132 中的數據進行直接存儲存取(DMA)。硬件302可對應用程序發送緩沖區132 中的數據執行分段和TCP處理,并在線程上發送得到的數據包。在本發明的另一個實施例中,用戶空間庫306可用于將任務請求直接發送 到發送隊列(SQ),不需要內核304的輔助。例如,用戶空間庫306通知設備 發送隊列不再為空的方法是使用門鈴。門鈴是總線上的地址,當用戶寫入它時, 會將事件通知給設備。門鈴還被分配給幾個流,從而單個用戶處理可寫入地址 頁。當能夠直接發送到發送隊列時,設備可驗證特定的數據包對發送隊列來說
是合法的。如果源報頭和目標報頭都是相反的,得到的數據包會被分配給相同的FLT。直接從用戶空間庫306發送到發送隊列的任務請求可要求用戶注冊的緩 沖ID。這些注冊的緩沖ID代表用戶空間庫306已經注冊的實際的緩沖區,或 者用戶空間庫306將出站數據復制到其中的即時預注冊緩沖區。用戶空間庫 306用于確定要使用的特定技術。如果目標應用程序接收緩沖區不在注冊的高速緩存中,用戶空間庫306 可用于注冊目標應用程序接收緩沖區。例如,用戶空間庫306可利用存儲器注 冊請求來注冊接收緩存。用戶空間庫306可高速緩存接收緩沖區的注冊信息, 因此當應用程序308在下一個請求上提交相同的緩沖區時,用戶空間庫306 不必重復注冊過程。根據本發明的實施例,TCP減負引擎(TOE) 114可將對接收數據的傳輸 控制協議(TCP)處理減負到例如NIC處理器之類的片載處理器上。利用用戶 空間庫306,所接收的數據可被直接發送到硬件302或主機處理器124,跳過 由內核304對收到數據進行的處理。硬件302用于確定所接收的數據是否高速 緩存在存儲器126中。如果所接收的數據沒有高速緩存在存儲器126中,用戶 空間庫306用于注冊至少一個包括所接收數據的應用程序發送緩沖區132。內 核304可鎖定包括所接收數據的應用程序發送緩沖區132。用戶空間庫306用 于將包括所接收數據的被鎖定應用程序發送緩沖區132發送到硬件302或者主 機處理器124。用戶空間庫306可用于在應用程序發送緩沖區132的緩沖ID 上添加應用程序發送緩沖區132的虛擬地址,并將應用程序發送緩沖區132 存儲在高速緩沖存儲器126中。用戶空間庫306可將包括所接收數據的至少一 個應用程序發送緩沖區預發送到硬件302或主機處理器124。圖3C是根據本發明的實施例的當高速緩存中包含應用程序緩沖區時,用 戶空間TOE的示范性發送或傳輸過程的流程圖。圖3C展示了硬件302、內核 304、用戶空間庫306和應用程序308。當應用程序緩沖區不在高速緩存中時,應用程序308被用于將發送消息傳 送到用戶空間庫306。用戶空間庫306被用于將SQ上的應用程序發送緩沖區 132的預鎖定應用程序發送緩沖ID發送到硬件302,而不需為短發送消息使用 內核304。硬件302可被用于查找緩沖區地址的緩沖ID。硬件302可被用于直 接存儲存取(DMA)應用程序發送緩沖區132中的數據。硬件302可對應用 程序發送緩沖區132中的數據執行分段和TCP處理,并將得到的數據包在線 程上發送。當所接收的數據被高速緩存在存儲器126中時,所接收的數據被直 接發送到硬件302或者主機處理器124,從而跳過由內核304對所接收數據進 行的處理。圖4A是根據本發明的實施例的用戶空間TOE示范性接收過程的流程圖。 圖4A中展示了硬件402、內核404、用戶空間庫406和應用程序408。硬件402可包括合適的邏輯和/或電路,可用于處理從各種驅動以及連接 到硬件402的其他設備接收的數據。內核404可包括合適的邏輯和/或代碼, 用于管理CPU 102系統和/或設備資源,并使其他的應用程序408在主機系統 運行。內核404用于例如調度、緩沖、高速緩存、假脫機、以及故障處理的功 能。內核404還用于實現各種硬件和軟件組件之間的通信。用戶空間庫406 包括用于研發軟件的子程序集。用戶空間庫406允許編碼和數據以組合的方式 共享和交換。硬件402可用于將報頭和載荷放置在從RQ或GRQ獲得的接收緩沖區中。 通過允許對目的存儲器的遠程寫入訪問、以防止緩存溢出,硬件402可將緩沖 ID和偏移轉換成所要求的DMA地址。用戶空間庫406可用于將普通接收隊列(GRQ)上的應用程序接收緩沖 區132的預鎖定緩沖ID發送到硬件402。硬件402可被用于處理所生成的TCP 段,查詢緩沖區地址的緩沖ID,并將所生成的TCP段放置在預發送的庫緩沖 區中。硬件402用于直接存儲訪問(DMA)至GRQ緩沖區228的接收載荷。 硬件402可用于生成完成隊列(CQ)中的完成隊列條目(CQE),以指示接收 所生成的TCP數據包。用戶空間庫406可被用于輪詢完成隊列(CQ) 222。 當用戶空間庫406完成對CQ222的輪詢時,用戶空間庫406可請求硬件402, 后續的完成之后隨即進行事件通知。用戶空間庫406可用于將預鎖定的應用程 序接收緩沖區復制到應用程序接收緩沖區132。
注冊的緩沖區可在接收任務請求中被發送到接收隊列(RQ)和/或普通接收隊列(GRQ)。通過將任務完成或完成隊列條目(CQE)發送到完成隊列(CQ), 硬件402可用于指示接收到進入緩沖區的TCP段,所述緩沖區從RQ或GRQ 分配。當發送到CQ時,硬件402可用于生成通知事件。應用程序408用于將所接收的消息發送到用戶空間庫406。用戶空間庫406 用于將普通接收隊列(GRQ)上的應用程序接收緩沖區132的預鎖定緩沖ID 發送到硬件402。硬件402可用于處理輸入的TCP數據包,并查詢緩沖區地址 的緩沖ID,并將進站數據包的數據放置在預發送的庫緩沖區中。硬件402可 用于直接存儲存取(DMA)至GRQ緩沖區的接收載荷。硬件402可用于生成 完成隊列(CQ) 137中的完成隊列條目(CQE),以指示接收TCP數據包。用 戶空間庫406可被用于輪詢完成隊列(CQ) 137。當用戶空間庫406完成對 CQ 137的輪詢時,用戶空間庫406可請求硬件402,后續的完成之后隨即進 行事件通知。用戶空間庫406可用于將預鎖定的應用程序接收緩存復制到應用 程序接收緩沖區132。圖4B是根據本發明的實施例的當高速緩存中未包含應用程序緩沖區時,, 用戶空間TOE的示范性接收過程的流程圖。圖4B展示了硬件402、內核404、 用戶空間庫406和應用程序408。當應用程序接收緩沖區132不在高速緩存中時,應用程序308被用于將接 收消息傳送到用戶空間庫406。用戶空間庫406可注冊應用程序接收緩沖區 132,并將應用程序接收緩沖區132發送到內核404。內核404可用于鎖定并 映射應用程序接收緩沖區B2。內核404可將被鎖定和映射的應用程序接收緩 沖區132的緩沖ID發送到用戶空間庫406。用戶空間庫406將緩沖區虛擬地 址附加到所接收的緩沖ID上,并將緩沖ID存儲在高速緩存中。用戶空間庫 406可將RQ上最新被鎖定的緩沖ID發送到硬件402。硬件402可用于處理輸入的TCP數據包,査詢緩沖區地址的緩沖ID,并 將輸入TCP數據包的數據直接放置在對應的被鎖定和映射的應用程序接收緩 沖區132中。硬件402可用于直接存儲存取(DMA)至RQ緩沖區的輸入TCP 的載荷。硬件402或主機處理器124可用于生成完成隊列(CQ) 137中的完
成隊列條目(CQE),以指示接收TCP數據包。用戶空間庫406可被用于輪詢 完成隊列(CQ) 137。當用戶空間庫406完成對CQ 137的輪詢時,用戶空間 庫406可請求硬件402,后續的完成之后隨即進行事件通知。圖4C是根據本發明的實施例的當高速緩存中包含應用程序緩沖區時,用 戶空間TOE的示范性接收過程的流程圖。圖4C中展示了硬件402、內核404、 用戶空間庫406和應用程序408。當應用程序緩沖區在高速緩存中時,應用程序308被用于將接收消息傳送 到用戶空間庫406。用戶空間庫406被用于將接收隊列(RQ)上的應用程序 接收緩沖區132的預鎖定緩沖ID發送到硬件402。硬件402可被用于處理輸 入TCP數據包,査詢緩沖區地址的緩沖ID,并將輸入的TCP數據包的數據直 接放置在對應于預鎖定緩沖ID的應用程序接收緩沖區132中。硬件402用于 直接存儲訪問(DMA)至RQ緩沖區的輸入TCP數據包的載荷。硬件402可 用于生成完成隊列137中的完成隊列條目(CQE),以指示接收所生成的TCP 數據包。用戶空間庫406可被用于輪詢完成隊列(CQ〉 137。當用戶空間庫 406完成對CQ 137的輪詢時,用戶空間庫406可請求硬件402,后續的完成 之后隨即進行事件通知。根據本發明的實施例, 一種用于用戶空間TCP減負的方法和系統包括TCP 減負引擎(TOE) 114,用于將所接收數據的傳輸控制協議(TCP)處理減負 到例如NIC處理器130之類的片載處理器上進行。可利用用戶空間庫306將 所接收的數據直接發送到硬件402或者主機處理器124,從而跳過由內核304 對所接收數據進行的處理。硬件402被用于確定所接收的數據是否被高速緩存 在存儲器126中。如果所接收的數據高速緩存在存儲器126中,所接收的數據 被直接發送到硬件402或者主機處理器124,從而跳過由內核304對所接收數 據的處理。如果所接收的數據沒有高速緩存在存儲器中,用戶空間庫306可注冊至少 一個包括所接收數據的應用程序接收緩沖區132。內核304用于鎖定包括所接 收數據的應用程序接收緩沖區132。用戶空間庫306用于將包括接收數據的被 鎖定應用程序接收緩沖區132發送到硬件402或主機處理器124。用戶空間庫
306用于將應用程序緩沖區虛擬地址附加到應用程序接收緩沖區132的緩沖ID 上,并將應用程序接收緩沖區132存儲在高速緩沖存儲器126中。用戶空間庫 306用于將包括所接收數據的至少一個應用程序接收緩沖區預發送到硬件402 或主機處理器124。通過更新完成隊列137中的完成隊列條目,硬件402或主 機處理器124用于指示數據的接收。在更新完成隊列137中的完成隊列條目之 后,硬件402或主機處理器124可用于生成事件通知。圖5是根據本發明的實施例的帶有用戶空間庫的透明TCP減負的工作請 求完成的示范性步驟的流程圖。參照圖5,示范性步驟從步驟502開始。在步 驟504中,可將由流査詢表(FLT)確認的有效TCP段分配給用戶空間TTO 處理。在步驟506中,確定FLT是否具有當前緩沖區。結合器111利用流査 詢表(FLT)來維護關于當前網絡流的信息,以便收集并聚合TCP段。如果 FLT具有當前緩沖區,控制繼續至步驟508。在步驟508中,確定新的TCP數據包是否附加到當前緩沖區中。如果新 的TCP數據包沒有附加到當前緩沖區中,控制繼續至步驟510。在步驟510 中,確定是否從GRQ中分配緩沖區。如果不能從GRQ分配緩沖區,則指示 分配錯誤,控制繼續至步驟516。在步驟516中,丟棄數據包。如果可從GRQ 分配緩沖區,控制繼續至步驟512。在步驟512中,新的數據包被應用于所分 配的緩沖區。在步驟514中,為所分配的緩沖區生成任務完成條目。之后控制 繼續至結束步驟538。在步驟508中,如果新的TCP數據包附加到當前緩沖區,控制繼續至步 驟518。在步驟518中,確定新的數據包是否適合當前緩沖區。如果新的數據 包適合當前緩沖區,控制繼續至步驟528。在步驟528中,新的數據包可被附 加到當前流。如果新的數據包不適合當前緩沖區中,控制繼續至步驟520。在 步驟520中,為當前緩沖區生成任務完成條目。在步驟522中,FLT的當前緩 沖區被設置為NULL。在步驟524中,確定TCP段是否有序,可否從RQ 224 分配緩沖區。如果TCP段不是有序的或者不能從RQ224分配緩沖區,控制繼 續至步驟536。在步驟536中,確定是否可從GRQ分配當前緩沖區。如果不 可從GRQ分配當前緩沖區,可指示分配錯誤,控制繼續至步驟516。在步驟 516中,丟棄數據包。如果從GRQ分配當前緩沖區,控制繼續至步驟528。 如果TCP段是有序的,且可從RQ224分配緩沖區,控制繼續至步驟526。在 步驟526中,從RQ224分配當前緩沖區。在步驟530中,可確定當前緩沖區是否可交付使用。如果當前緩沖區可交 付使用,控制繼續至步驟532。在步驟532中,可為當前緩沖區生成任務完成 條目。在步驟534中,FLT的當前緩沖區被設置為NULL。然后控制繼續至結 束步驟538。如果當前緩沖區不可交付使用,控制繼續至結束步驟538。根據本發明的實施例,用于用戶空間TCP減負的方法和系統可包括主機 處理器124,所述主機處理器124用于將所接收數據的傳輸控制協議(TCP) 處理減負到例如NIC處理器之類的片載處理器上進行。利用用戶空間庫220, 所接收的數據可被直接發送到硬件,跳過由所述接收數據進行的內核處理。如 果所接收的數據沒有高速緩存在存儲器126中,則注冊至少一個包括所接收數 據的應用緩沖區。如果所接收的數據已高速緩沖區在存儲器126中,應用程序 緩沖區被鎖定并發送到硬件。應用程序緩沖區虛擬地址可被附加到應用程序緩 沖區的緩沖ID上,應用程序緩沖區可被存儲在高速緩沖存儲器126中。如果所接收的數據高速緩沖區在存儲器126中,所接收的數據被直接發送 到硬件,跳過對所述接收數據進行的內核處理。至少一個應用程序緩沖區被預 發送到硬件。可通過更新硬件中的完成隊列條目,來指示數據的接收。在更新 硬件中的完成隊列條目后,可生成事件通知。本發明的另一實施例提供了一種可機讀存儲,其上存儲有計算機程序,該 程序具有至少一個代碼段,該至少一個代碼段由機器執行,使機器執行用戶空間TCP減負引擎的上述步驟。因此,本發明可用硬件、軟件或軟硬件結合來實現。本發明可在至少一臺 計算機系統的集中式環境下實現,也可在各元件分布在不同相互連接的計算機 系統的分布式環境下實現。任何種類的計算機系統或其它適合于執行本發明所 述方法的設備都適合使用本發明。軟硬件結合的范例可為帶有某計算機程序的 通用計算機系統,但載入并運行該計算機程序時,可控制計算機系統執行本發 明所述的方法。
本發明也可內置在計算機程序產品中,其中包含可實現本發明所述方法的 所有性能,且當其載入到計算機系統時可執行這些方法。本上下文中的計算機 程序是指以任何語言、代碼或符號編寫的指令集的任何表達式,可使帶有信息 處理功能的系統直接執行特定功能或者在完成下列一項或兩項之后執行特定 功能a)轉換為其它語言、代碼或符號;b)以其它形式重新生成。
本發明是根據特定實施例進行描述的,但本領域的技術人員應明白在不脫 離本發明范圍時,可進行各種變化和等同替換。此外,為適應本發明技術的特 定場合或材料,可對本發明進行諸多修改而不脫離其保護范圍。因此,本發明 并不限于在此公開的特定實施例,而包括所有落入到權利要求保護范圍的實施 例。
權利要求
1、 一種用于處理網絡信息的方法,其特征在于,所述方法包括 將對收到的數據進行的傳輸控制協議(TCP)處理減負到片載處理器上進行;以及利用用戶空間庫,跳過對所述收到的數據進行的內核處理,將所述收到的 數據直接發送到硬件。
2、 根據權利要求1所述的方法,其特征在于,所述方法還包括確定所述 接收的數據是否緩存在存儲器中。
3、 根據權利要求2所述的方法,其特征在于,所述方法還包括,如果所 述收到的數據沒有緩存在所述存儲器中,注冊至少一個應用程序緩沖區,所述 緩沖區內包括所述收到的數據。
4、 根據權利要求3所述的方法,其特征在于,所述方法還包括,如果所 述收到的數據沒有緩存在所述存儲器中,鎖定所述至少一個應用程序緩沖區。
5、 根據權利要求4所述的方法,其特征在于,如果所述收到的數據沒有 緩存在所述存儲器中,將所述鎖定的、包括所述收到的數據的至少一個應用程 序緩沖區直接發送到所述硬件。
6、 根據權利要求3所述的方法,其特征在于,所述方法還包括 為所述至少一個應用程序緩沖區的緩沖區ID添加應用程序緩沖區虛擬地址;以及將所述至少一個應用程序緩沖區存儲在高速緩沖存儲器中。
7、 一種用于處理網絡信息的系統,其特征在于,所述系統包括 將對收到的數據進行的傳輸控制協議(TCP)處理減負到片載處理器上進行的電路;以及利用用戶空間庫、跳過對所述收到的數據進行的內核處理、將所述收到的 數據宵接發送到硬件的電路。
8、 根據權利要求7所述的系統,其特征在于,所述系統還包括確定所述 收到的數據是否緩存在存儲器中的電路。
9、 根據權利要求8所述的系統,其特征在于,所述系統還包括,用于在 所述收到的數據沒有緩存在所述存儲器中時、注冊至少一個應用程序緩沖區的 電路,所述緩沖區包括所述接收的數據。
10、 根據權利要求9所述的系統,其特征在于,所述系統還包括,用于在所述收到的數據沒有緩存在所述存儲器時、鎖定所述至少一個應用程序緩沖區 的電路。
全文摘要
本發明涉及一種用于用戶空間TCP減負的方法和系統。所述方法包括將對所接收數據的傳輸控制協議(TCP)處理減負到片載處理器上進行。可利用用戶空間庫將所接收的數據直接發送到硬件,跳過由內核對所述接收數據的處理。如果所接收的數據沒有緩存在存儲器中,可通過用戶空間庫注冊包括所接收數據的應用程序緩存。所述應用程序緩存可被鎖定并發送到硬件。
文檔編號H04L29/06GK101123567SQ20071009719
公開日2008年2月13日 申請日期2007年4月12日 優先權日2006年5月1日
發明者凱特琳·貝斯特勒, 埃利澤·阿朗, 尤里·埃爾·朱, 拉弗·沙洛姆 申請人:美國博通公司