新四季網

通過傳輸層有效地處理髮送套接字調用的方法和系統的製作方法

2023-12-07 03:11:41 2

專利名稱:通過傳輸層有效地處理髮送套接字調用的方法和系統的製作方法
技術領域:
本發明涉及一種用於通過傳輸層進行有效的發送套接字調用處理的方法、系統和程序,其中發送套接字調用被阻止,直到足夠的存儲器可用於對於所述發送套接字調用內的數據的全部長度足夠的、套接字緩衝區內的單個存儲器分配。
背景技術:
網際網路已成為現代世界內的非常重要的通信介質,並使得世界轉變為一個全球數據通信系統。通常,網際網路使用傳輸控制協議/網際協議(TCP/IP)協議套為計算機和其他數據傳輸設備提供共同的通信機構以使它們相互通信。
與在伺服器上運行的應用的通信通常使用分配給應用程式和伺服器裝置的埠和地址執行的。埠可以是物理埠或邏輯埠。物理埠是進出計算機或網絡設備例如交換機或路由器的路徑。例如,個人計算機上的串行和並行埠是用於插入通信線路、數據機和印表機的外部插座。每個網絡適配器具有用於連接到區域網(LAN)的埠(乙太網、令牌環等)。傳送和接收數據的任何設備暗示著連接到每條線路的可用埠。
邏輯埠是分配給在伺服器上運行的應用的數字,通過該數字可識別該應用。儘管伺服器可能具有單個物理埠,但是伺服器可使用多個邏輯埠。邏輯埠標識符和伺服器裝置的地址的組合被稱為套接字。
伺服器的地址是識別網絡內的伺服器以及如何通過網絡將數據路由給伺服器的特定物理埠的網絡地址。地址可表現為統一資源定位符(URL),或者在網際網路的情況下為網際協議(IP)地址例如205.15.01.01,等等。地址被包含在由設備傳輸的數據包的報頭內。通過讀取數據包的報頭並根據地址確定如何將數據包路由給其的預期目的地,而通過網絡將數據包從設備路由到設備。
TCP/IP協議提供各種套接字函數,所述函數可用於在通過套接字將數據傳輸給應用以及從應用傳輸數據時處理數據。一個這樣的被應用用於寫請求的函數是發送套接字調用。例如,應用調用發送套接字調用並指定套接字、套接字內的緩衝區、將被發送的數據的長度和設定的標誌。TCP/IP協議棧的TCP層接收到發送套接字調用,並觸發內核以將可用存儲器分配給套接字內的發送緩衝區以便寫發送套接字調用數據。具體地,一存儲池可用於分配給套接字,其中每個分配被稱為一mbuf。在一些情況下,存在足夠的存儲器可用於分配對於發送函數數據的長度足夠大的單個mbuf。但是,如果在接收到發送函數時並不是所有的數據被可被寫入第一mbuf或者沒有存儲器可用於分配mbuf,則TCP阻止發送線程。
當TCP層接受到接收器接收到發送數據包的確認(ACK)時,TCP層調用內核以將被確認的數據包釋放回存儲池。另外,對於每個ACK,TCP喚醒被阻止的發送線程,發送線程然後觸發內核以試圖從最近釋放的存儲器將一mbuf分配到發送緩衝區內,並將數據的下一部分寫入該新的mbuf。
在一個示例中,發送套接字調用將數據的長度設定為64千字節。TCP層發送給接收器的每個數據包被限制為1460位元組的最大段大小(MSS),而每個ACK為2MSS或2920位元組(4千字節)。當TCP層接收到發送套接字調用時,在該示例中,存在4k的存儲器可用於分配給用於套接字的發送緩衝區。內核將4k的mbuf分配給發送緩衝區並將64k數據中的4k寫入發送緩衝區,剩餘60k數據將被寫入。然後,TCP層阻止發送線程,直到接收到下一個ACK。當TCP層接收到下一個ACK時,TCP觸發內核以釋放保持與該ACK相關聯的數據的mbuf。接下來,TCP層喚醒發送線程,該發送線程觸發內核以試圖從釋放的存儲器分配新的mbuf,並將另一個4k寫入該新的mbuf。因此,對於其中ACK緩慢返回的64k發送套接字調用,在該示例中,TCP層可阻止和喚醒發送線程16次或更多次。
如示例所示,儘管對於大數據寫入的單個發送套接字調用對於發送該數據的應用是有效率的,但是當數據長度大於可用於分配的存儲器時,單個發送套接字調用沒有在TCP/IP協議棧內被有效率地處理。具體地,為使TCP層通過當沒有另外的存儲器可用於分配時阻止線程並然後每當接收到ACK時喚醒線程來處理該發送線程,會低效率地鎖定大量CPU、總線和存儲器資源,並且對於每次喚醒僅寫一部分數據。
此外,由於TCP在每次接收到ACK並且釋放存儲器時低效率地觸發單獨的mbuf分配,所以每個mbuf被添加到鏈中。當mbuf鏈增加時,定位mbuf以釋放存儲器變得更加費時從而低效率。另外,當用於單個發送套接字調用的數據被寫入多個連結的mbuf時,為了將數據推入網絡,TCP層必須將被連結的mbuf的多個指針傳遞給網絡層和鏈路層。對於包括用於實際上將數據包放置在網絡上的適配器硬體的鏈路層,通過來自由TCP層傳遞下來的指針對該數據進行直接存儲器訪問(DMA)並在適配器級排隊該數據;但是,執行對被指向的連結的mbuf執行直接存儲器訪問(DMA)是低效率的,因為適配器僅將連續數據排隊,因此需要另外的存儲器管理以將被連結的mbuf複製到連續數據中。
因此,鑑於上文所述,有益的是使傳輸層能夠響應發送套接字調用,從而當存儲池沒有包括足夠的存儲器可用於分配給對於發送套接字調用長度足夠大的mbuf時,傳輸層阻止該發送線程,直到有足夠的存儲器可用於分配單個mbuf以便對於發送套接字調用一次性地寫入數據。

發明內容
因此,本發明提供了一種用於在網絡協議棧的傳輸層有效率地處理接收到的發送套接字調用的方法、系統和程序。
在一個實施例內,傳輸層從應用層接收到對指定長度的數據的發送套接字調用。響應於檢測到對於至少該指定長度沒有足夠的存儲器可用於對傳輸層內的緩衝區的單個存儲器分配,傳輸層阻止該發送套接字調用。傳輸層只有在檢測到對於至少該指定長度存在足夠的存儲器可用於傳輸層的緩衝區內的單個存儲器分配時才喚醒發送套接字調用,其中喚醒該發送套接字調用觸發內核在緩衝區內執行單個存儲器分配,並一次性地將數據寫入該單個存儲器分配。
應用層可在發送套接字內設置標誌,該標誌要求對於該發送套接字調用僅進行單個存儲器分配。傳輸層被使能檢測該標誌。
響應於阻止該發送套接字調用,傳輸層可將最小存儲器分配大小設定為該指定長度,其中該傳輸層僅在檢測到對於該最小存儲器分配大小存在足夠的存儲器時才自動喚醒該發送套接字調用。或者可選擇的,傳輸層可將與最小存儲器分配大小相獨立的被阻止的線程大小設定該指定長度,其中該傳輸層僅在檢測到對於該被阻止的線程大小存在足夠的存儲器時才自動喚醒該發送套接字調用。
可用於分配給緩衝區的存儲器被保持在存儲池內,該存儲池被指定用於在傳輸層在多個緩衝區之間分配。從存儲池到一緩衝區的單個存儲器分配是一mbuf。傳輸層可檢測到接收該數據的系統可接收的最大段大小,並將全部可分配給發送套接字緩衝區的存儲器的最大量設定為大於該最大段大小的量。


在所附權利要求內闡述了本發明的被認為是新穎特徵的特性。但是,本發明的本身以及其優選使用模式、另外的目標和優點可通過在結合附圖閱讀時參照下文對說明性實施例的詳細說明最好地理解,附圖中圖1是示出其中可實現本發明的計算系統的網絡的圖示;圖2是示出通信地連接到其中可實現本發明的網絡的計算系統的一個實施例的框圖;圖3是示出用於在網絡協議棧內有效率地處理髮送套接字調用的傳輸層的圖示;以及圖4是示出用於在網絡協議棧的傳輸層內有效率地處理傳送套接字調用的過程和程序的高層邏輯流程圖。
具體實施例方式
現在參照附圖,圖1示出其中可實現本發明的計算系統的網絡的圖示。分布式網絡100是其中可實現本發明的計算機的網絡。分布式網絡100包括網絡102,其是用於在分布式網絡100內連接在一起的各種設備和計算機之間提供通信鏈路的介質。網絡102可包括一種或多種類型的連接,包括但不局限於永久連接例如電線或光纜、通過電話連接實現的臨時連接、和無線傳輸連接。
在所示示例內,伺服器104連接到網絡102。另外,客戶機108、110和112也連接到網絡102。這些客戶機108、110和112以及伺服器104可以是多種計算系統中的任何一種。在其他實施例內,附加的或替代的客戶機和伺服器也可連接到網絡102。
另外,在所示示例內,伺服器104向客戶機108、110和112提供數據,其中客戶機108、110和112是在客戶機/伺服器環境內伺服器104的客戶機。術語「客戶機」和「伺服器」用於指計算系統作為數據的接受者(客戶機)或數據的提供者(伺服器)的一般角色。另外,伺服器104和客戶機108、110和112中的每一個可用作「客戶機」和「伺服器」兩者,並且可使用計算系統例如圖2的計算系統200實現。此外,伺服器104和客戶機108、110和112還可進行對等網絡通信。
分布式網絡100的客戶機/伺服器環境可在許多不同的網絡體系結構內實現。在一個示例內,分布式網絡100是網際網路,其中網絡102代表使用基於包交換的協議套以相互通信的網絡和網關的世界範圍的集合。基於包交換的協議套的一個示例是傳輸控制協議/網際協議(TCP/IP)協議套。分布式網絡100還可在另外的或其他類型的網絡體系結構例如內聯網、區域網(LAN)或廣域網(WAN)內實現。在其他實施例內,圖1所示的網絡體系結構和系統可改變。此外,本領域內的那些普通技術人員將理解,所示示例並不是意味著對本發明的結構限制。
在一個示例內,伺服器104可同時從每個客戶機系統108、110和112接收到多個訪問相同應用或資源的通信請求。伺服器104可通過最初調用多個等待接受通信請求的線程來同時服務於這些多個請求。伺服器104打開一個新的套接字以處理每個請求。如下文將說明的,當在伺服器104內的應用接收到請求並通過發送套接字調用響應以發送數據時,包交換協議棧內的傳輸層阻止每個寫線程且不會喚醒寫線程,直到單個緩衝區分配能夠接收套接字緩衝區內的整個數據寫。通過阻止發送線程直到存儲器可用於套接字緩衝區內的、大得足以接收發送套接字調用的長度的單個緩衝區分配,伺服器104更有效率地響應於其大小超過在請求時可用於在套接字緩衝區內的分配的存儲器的發送套接字調用。
現在參照圖2,框圖示出其中可實現本發明的計算系統的一個實施例。本發明可在多種系統包括多種通信地連接到包交換網絡例如網絡102的計算系統內執行。
計算機系統200包括總線222或其他的用於在計算機系統200內傳遞信息的通信設備,和耦合到總線222的用於處理信息的至少一個處理設備例如處理器212。總線222優選地包括低時延和較高時延路徑,所述路徑由橋和適配器連接並在計算機系統200內被多個總線控制器控制。當實現為伺服器時,計算機系統200可包括被設計為提高網絡服務能力的多個處理器。當多個處理器共享總線222時,可實現另外的用於管理總線訪問和鎖定的控制器(未示出)。
處理器212可以是通用處理器例如IBM的PowerPCTM處理器,該處理器在正常操作期間,在作業系統260、應用軟體270、中間件(未示出)和可從動態存儲設備例如隨機存取存儲器(RAM)214、靜態存儲設備例如只讀存儲器(ROM)216,數據存儲設備例如大容量存儲設備218或其他數據存儲介質訪問的其他代碼的控制下處理數據。作業系統260可被稱為內核。另外,多個作業系統可在計算機系統200內運行。在一個實施例內,作業系統260和中間件可控制如圖4的流程圖內所示的經由網絡102在計算機系統200和至少一個其他計算機系統之間傳送的寫請求操作,以及文中所述的其他操作。或者可選擇的,本發明的步驟可由包含用於執行所述步驟的硬連線邏輯的特定硬體部件執行,或由被編程的計算機部件和定製硬體部件的任何組合執行。
本發明可被提供為被包含在機器可讀介質上的電腦程式產品,該介質上存儲有用於將計算機系統200編程以執行根據本發明的過程的機器可執行指令。文中使用的術語「機器可讀介質」包括參與向處理器212或計算機系統200的其他部件提供指令以便執行的任何介質。這種介質可採取任何形式,包括但不局限於非易失性介質、易失性介質和傳輸介質。非易失性介質的普通形式包括例如軟盤(floppy disk)、軟盤(diskette)、硬碟、磁帶或任何其他磁介質、光碟(CD-ROM)或任何其他光介質、穿孔卡或任何其他的具有孔圖案的物理介質、可編程ROM(PROM)、可擦除PROM(EPROM)、電EPROM(EEPROM)、閃速存儲器、任何其他存儲器晶片或盒、或計算機系統400可從中讀取並且適於存儲指令的任何其他介質。在本實施例中,非易失性介質的示例是大容量存儲設備218,其被示為計算機系統200的內部部件,但是應理解也可由外部設備提供。易失性介質包括動態存儲器例如RAM 214。傳輸介質包括同軸電纜、銅線或光纖,包括構成總線222的線路。傳輸介質也可表現為聲波或光波例如在射頻或紅外線數據通信期間生成的那些波。
此外,本發明可作為電腦程式產品被下載,其中程序指令可作為包含在載波或其他傳播介質內的數據信號,經由網絡102到網絡鏈路234(例如數據機或網絡連接)到耦合到總線222的通信接口232,而從遠程計算機例如伺服器240被傳送到請求計算機系統200。通信接口232提供了耦合到網絡鏈路234的雙向數據通信,所述網絡鏈路可連接到例如區域網(LAN)、廣域網(WAN),或直接連接到網際網路服務提供商(ISP)。具體地,網絡鏈路234可提供與一個或多個網絡例如網絡102的有線和/或無線網絡通信。此外,儘管未示出,但是通信接口232可包括軟體例如設備驅動器、硬體例如適配器、以及其他使得可進行通信的控制器。當實現為伺服器時,計算機系統100可包括可經由例如連接到輸入/輸出控制器的多個外設部件互連(PCI)總線橋訪問的多個通信接口。這樣,計算機系統200允許經由多個單獨的埠連接到多個客戶機,並且每個埠也可支持與多個客戶機的多個連接。
網絡鏈路234和網絡102都使用可承載數字數據流的電、電磁或光信號。通過各個網絡的信號和網絡鏈路234上的以及通過通信接口232的、承載到和來自計算機系統200的數字數據的信號可以這傳送信息的載波的形式。
另外,計算機系統200可包括有助於輸入和輸出的多個外設部件。這些外設部件都連接到耦合到多層總線222之一的多個控制器、適配器和擴展槽例如輸入/輸出(I/O)接口226。例如,輸入設備224可包括例如經由控制輸入的I/O接口226在總線222上被通信地使能的麥克風、鍵盤、滑鼠或其他輸入外設部件。另外,例如,經由用於控制輸出的I/O接口226在總線222上被通信地使能的顯示設備220可包括例如一個或多個圖形顯示設備,但是也可包括其他輸出接口例如音頻輸出接口。在本發明的其他可選擇實施例內,可添加附加的或替代的輸入和輸出外設部件。
本領域內的那些普通技術人員將理解圖2內所示的硬體可改變。此外,本領域內的那些普通技術人員將理解,所示示例並不是意味著本發明的結構限制。
現在參照圖3,圖示示出用於在網絡協議棧內有效率地處理髮送套接字調用的傳輸層的一個實施例。在該示例內,參照發送調用說明了TCP/IP協議棧300的元件的交互。在示例內,協議棧300的層包括應用層302、套接字層304、TCP層306、網絡層308和鏈路層314。套接字層304和TCP層306被單獨示出,但是也可被認為是傳輸層的一部分。應理解,使得可進行包交換通信的其他協議棧可實現本發明,並且附加的或替代的層可在協議棧300內實現。
在示例內,應用層302將形式為send命令的發送套接字調用傳遞給套接字層304。在示例內,如標號320所示,send命令可包括多個參數,包括但不局限於套接字標識符、緩衝區標識符、數據長度和標誌。在本發明的一個實現內,標誌參數包括一次性地寫發送套接字調用的所有數據的設置。例如,當在send命令內設置名為MSG SNDALL的標誌時,僅當存在足夠的空間可用於一次將用於發送套接字調用的所有數據寫入套接字層304內的發送緩衝區322時,該數據才被寫入發送緩衝區322,以便經由網絡102傳輸給接收器。應用層302可包括多種類型的應用例如網絡應用,和應用層協議例如HTTP協議、SMTP、FTP和域名系統(DNS)。
另外,在該示例內,對於將一次性地被寫入發送緩衝區322的發送套接字調用內的數據,內核必須分配足以保持發送套接字調用內的數據的長度的單個mbuf。在該實施例內,mbuf例如mbuf 340、342和344是各被內核從mbuf池324單獨分別分配給發送緩衝區322的存儲塊。在該示例內,內核將每個分配的mbuf添加到一mbuf鏈中,其中每個mbuf均被單獨的指針所指向,例如連結的mbuf 340、342和344。應理解,作為對連結的附加或作為連結的替代,內核可實現其他存儲器分配管理結構。另外,應理解,儘管參照控制從mbuf池324到發送緩衝區322的存儲器分配的內核說明了本實施例,但與內核分離的分配資源也可控制存儲器分配。
具體地,mbuf池324指為向套接字層304內的緩衝區進行分配而留出的存儲器。除了發送緩衝區322外,套接字層304可包括附加的發送緩衝區、接收緩衝區、和其他類型的用於保持數據的緩衝區。另外,套接字層304可包括多個打開的套接字。可理解,可以有多個mbuf池可用,一mbuf池可由多個單獨的套接字層共享,以及可實現其他存儲器分配構造。
控制塊326可包括用於限制存儲器從mbuf池324到套接字層304內的緩衝區的分配。例如,max sendbuffer 330指示內核可從mbuf池324一次分配到發送緩衝區322的最大存儲器總量。在另一示例中,在某些協議棧例如Berkeley軟體分發(BSD)或BSD派生協議棧中,一低水位標記328設置用於內核為發送緩衝區322內的每個mbuf分配的最小存儲器量。可理解,控制塊326內的附加的或替代的設置可限制和調整從mbuf池324的存儲器分配。此外,儘管本實施例是參照套接字層304和TCP層306可訪問的控制塊326說明的,在其他實施例中,每一層可訪問單獨的控制塊或僅訪問控制塊內的特定設置。
返回該示例,在套接字層304接收到的每個發送套接字調用被傳遞給TCP層306。通常,TCP層306將消息從應用層302傳送到客戶系統,並將從客戶系統接收到的消息傳送給應用層302。具體地,TCP層306將數據從發送緩衝區322傳送給客戶系統。
在一個實施例中,計數器remaining_sendbuffer 332指示被釋放到mbuf池324的、可被分配給發送緩衝區322的當前存儲器量。在一些實施例內,其他計數器可指示可用於分配給mbuf的存儲器,或者可能需要對內核的調用以訪問可用於分配給mbuf的存儲器量。
在該示例內,在TCP層306接收到具有設定的MSG_SNDALL標誌的發送套接字調用時,TCP層306檢查計數器remaining_sendbuffer 332,以檢測mbuf池324內是否有足夠的空間可用於分配大得足以保持發送套接字調用內的數據長度的mbuf。如果存在足夠的空間可用,則TCP層306觸發內核以在發送緩衝區322內為發送套接字調用分配mbuf塊,並將數據寫入發送緩衝區322內的mbuf。
對於寫入發送緩衝區322的mbuf塊的數據,如標號418所示,TCP層306控制該數據以包為單位到網絡的傳輸。首先,TCP層306將數據在包大小的段中傳遞給網絡層308。如標號316所示,網絡層308控制包沿通過鏈路層341的網絡鏈路到接收系統例如如圖1所示的客戶機108、110或112之一的發送。儘管未示出,但是網絡層308可運行IP協議。鏈路層314可包括控制適配器312的設備驅動器310。適配器312可包括例如網絡接口卡。
響應於從發送系統接收到包,接收系統返回確認(ACK),如標號318所示。ACK例如ACK 318被上推到TCP層306。TCP層306接收到每個ACK並調用內核以從發送緩衝區322釋放相關聯的mbuf。當為每個ACK釋放存儲器時,TCP層306可調整remaining_sendbuffer 332內的記數以指示該調整。
或者可選擇的,當TCP層306接受到具有設定的MSG_SNDALL標誌的發送套接字調用,並且TCP層306確定沒有足夠的空間可用於分配對於發送套接字調用長度足夠大的單個mbuf時,則TCP層306阻止發送線程,並在被阻止的線程計數334內設定這樣的設置,即不喚醒發送線程,直到在mbuf池324內存在足夠的空間可用於為發送套接字調用長度分配單個mbuf。對於接收到的每個ACK,TCP層306可從remaining_sendbuffer 332檢測到是否存在足夠的空間可用於為發送套接字調用長度分配單個mbuf。
在一個示例中,如果發送套接字調用的長度為64千字節(k),並且如remaining_sendbuffer332內指示的,mbuf池324僅包括4k可用於分配給發送緩衝區322,則TCP層306阻止發送線程,並在被阻止的線程計數334內設定64k的閾值,從而直到接收到足夠的、將remaining_sendbuffer 332增加到被阻止的線程計數334內的閾值的ACK,TCP層306不喚醒被阻止的發送線程。當TCP層306檢測到remaining_sendbuffer 332達到匹配被阻止的線程計數324內的閾值的計數時,則TCP層306喚醒發送線程,該線程觸發內核分配至少64k的mbuf並將64k的數據寫入mbuf。
在一個實施例內,作為設定被阻止的線程計數334的替代,套接字層304可將低水位標記設定為發送套接字調用長度,其中低水位標記330指定最小的mbuf分配大小,並且TCP層306被設定為不喚醒發送線程,直到最小mbuf分配大小可用。遵循前面的示例,響應於接收到長度為64k的發送套接字調用,套接字層304會將低水位標記330設定為64k。因此,在協議棧已根據低水位標記330阻止發送線程的情況下,在發送套接字調用內包含標誌並指導套接字層304將低水位標記330更新為發送套接字調用長度,將使能本發明而不用向控制塊326添加另外的設置或計數器。在其他實施例內,控制塊326可包括附加的或替代的設置和計數器,應用層302可設定替代的標誌或發送其他命令,並且套接字層304或TCP層306可訪問附加的設置和計數器,並響應於替代的標誌或命令以控制將數據消息寫入連續數據空間以用於在包交換協議棧內傳輸。
根據一個優點,通過僅當內核可分配至少為發送套接字調用長度的單個mbuf時才喚醒發送線程來控制發送套接字調用,TCP層306不再每當接收到ACK時無效率地喚醒發送線程。具體地,針對大的發送套接字調用僅喚醒發送線程一次減少了執行與喚醒發送套接字調用相關聯的附加操作的次數。儘管未示出,TCP層306通過調用內核執行喚醒來喚醒被阻止的發送套接字調用。接下來,內核確定CPU是否可用。一旦CPU可用,則內核在CPU上加鎖並等待套接字變為可用。具體地,傳入的ACK可具有高於寫入套接字層304的優先級,從而觸發在試圖獲得套接字鎖定的不同的ACK之間的套接字鎖定爭用,並導致在套接字可用於發送套接字調用之前顯著的延遲。一旦套接字變為可用,則內核獲得用於發送套接字調用的套接字鎖定。接下來,內核確定什麼空間可用於mbuf分配並控制使用該可用空間從mbuf池224到發送緩衝區332的mbuf分配。最後,內核將用於發送線程的數據寫入被分配的mbuf。因此,考慮到實際執行發送套接字調用操作所需的附加操作,這些操作中的每一個僅執行一次而不是每次接收到ACK時都執行,可更有效地使用內核、總線和CPU資源,並減小套接字鎖定競用。
根據另一個優點,通過僅在內核可一次性地分配至少為發送套接字調用長度的單個mbuf並寫數據時才喚醒發送線程來控制發送套接字調用,內核不再被無效率地觸發以在TCP層306每次接收到ACK時分配單獨的mbuf。僅為每個發送套接字調用分配單個mbuf減小了當TCP層306將用於發送套接字調用的數據推入網絡所需的操作,並減小了當TCP層306接收到針對該數據的ACK時所需的操作。
在第一示例中,為每個發送套接字調用分配單個mbuf減小了TCP層306將數據推入網絡所需的操作。返回當MSG_SNDALL標誌沒有被設定時的TCP性能的限制,TCP層306為每個ACK喚醒發送線程,並且結果,對單個發送套接字調用分配多個mbuf且執行多個數據寫。所述多個mbuf被連結且每個mbuf被一個指針引用。當存在針對單個發送套接字調用的多個mbuf的多個指針時,TCP層306必須將所有指針傳遞到網絡層308和鏈路層314,從而需要附加的資源。此外,為使鏈路層314將來自多個mbuf的發送套接字調用數據排隊,必須通過DMA操作執行附加的存儲器管理操作,以將多個mbuf轉換成鏈路層314的連續數據需求。相反,當MSG_SNDALL標誌被設定時,TCP層306僅在有足夠的空間可用於分配至少為發送套接字調用長度的單個mbuf時才喚醒發送線程,並因此僅有一個被傳遞到網絡層308和鏈路層314的用於發送套接字調用的指針。另外,鏈路層314可將連續數據的單個mbuf排隊而不執行附加的存儲器管理操作,從而允許當將數據排隊以通過適配器312輸出時可進行更有效的DMA操作。
另外,僅為每個發送套接字調用分配單個mbuf使得TCP層306可更有效率地利用例如TCP分段卸載的服務。在一個示例中,適配器312可提供TCP分段卸載選項,其允許TCP層306將數據分段卸載到適配器312。TCP層306通常執行將數據分段到由MSS限制的段內的數據分段。在一個示例內,通過TCP層306確定鏈路層314可發送以及接收器可接收的最大幀長度(也被成為最大傳送單元(MTU)),然後設定MSS以確保TCP段和網絡層308添加的IP數據可放進單個幀內,來設定MSS。對於TCP分段卸載,TCP層306將數據從單個mbuf塊推給適配器312以將分段過程卸載到適配器312。ACK通常確認兩個(2)包或2 MSS。因此,當TCP層306調用內核以釋放存儲器時,與ACK內的2 MSS相關聯的存儲器被釋放。通過為發送套接字調用設定MSG_SNDALL,對於大於2 MSS的寫,TCP層306僅需要在TCP分段卸載請求內將針對一個mbuf的指針傳遞給鏈路層314。
在第二示例中,為每個發送套接字調用分配單個mbuf減少了TCP層306接收到ACK時所需的操作。如果MSG_SNDALL沒有被設定,則很可能每個mbuf將被設定為大小與每個ACK的相關聯的數據相等,並且可為單個發送套接字調用分配多個mbuf。當接收每個ACK時,TCP層306將觸發釋放相關聯的數據和mbuf。但是,當針對單個發送套接字調用連結許多較小的mbuf時,內核必須首先遍歷鏈以定位相關聯的mbuf,並然後執行消耗CPU和套接字資源以將每個mbuf釋放回mbuf池324的操作。相反,當MSG_SNDALL被設定時,則對於大於ACK大小的發送套接字調用長度,相關聯的mbuf將大於ACK大小。當TCP層306接收到針對與MSG_SNDALL被設定的發送套接字調用相關聯的數據的ACK時,將僅有一個mbuf與該發送套接字調用相關聯,從而除去了識別用於發送套接字調用的哪個mbuf與ACK相關聯的步驟。此外,當TCP層306接收到針對與MSG_SNDALL被設定的發送套接字調用相關聯的數據的ACK時,為每個ACK移動mbuf內的指針,從而需要最少的內核資源,直到到達mbuf的末端並且對於發送套接字調用需要單個mbuf釋放操作。
考慮到上述優點,重要地應指出,max_sendbuffer 330可被設定以進一步提高效率,其中應用被使能以設定MSG_SNDALL標誌。具體地,max_sendbuffer 330可設定為是接收器的窗口的2倍或3倍的量,其可以是MSS的兩倍或3倍,從而當套接字層304等待空間變為可用以便複製數據時,TCP層306不會缺乏數據來發送。
TCP層306的另一個功能是檢測包何時已被丟失並重傳丟失的包。在一個示例中,TCP層306可實現「快速重傳」功能。在「快速重傳」功能下,TCP層306即使在包丟失之後仍繼續發送包。具體地,TCP層306檢測重複確認的數量何時達到快速重傳閾值,例如三個重複確認。當達到閾值時,則TCP層306推斷重複確認內指示的包已丟失並自動重傳丟失的包。將max_sendbuffer 330的大小設定為MSS的兩倍或三倍在考慮到「快速重傳」功能時也是重要的,這樣可存在足夠的空間來保持另外的包,以便即使在丟失包之後TCP層306仍繼續發送包。
現在參照圖4,高層邏輯流程圖示出用於在網絡協議棧的傳輸層內有效率地處理髮送套接字調用的過程和程序。如圖所示,過程在塊400處開始並此後前進到塊402。塊402示出傳輸層檢測到MSG_SNDALL被設定的發送套接字調用,並且過程轉到塊404。
塊404示出確定發送套接字調用的長度是否大於可用於從mbuf池分配到套接字緩衝區的mbuf空間。如果存在足夠的可用空間,則過程轉到塊416。塊416示出觸發內核以處理髮送套接字調用,這包括分配對於套接字調用長度足夠的mbuf並將數據寫入mbuf,並且過程結束。
返回塊404,如果不存在足夠的可用空間,則過程轉到塊406。塊406示出阻止發送線程,並設定控制塊僅在存在足夠的空間可用於對於發送套接字調用長度是足夠的單個mbuf時喚醒發送線程。接下來,塊408示出確定是否在傳輸層檢測到ACK。當檢測到ACK時,過程轉到塊410。塊410示出觸發內核以釋放用於與ACK相關聯的數據的mbuf,並且過程轉到塊412。
塊412示出確定傳輸層現在是否檢測到足夠的空間可用於被阻止的發送mbuf分配。如果目前仍沒有足夠的空間,則過程轉到塊408。如果有足夠的空間可用,則過程轉到塊414。塊414示出喚醒發送線程,並且過程轉到塊416並且如前文所述地前進。
儘管參照優選實施例具體地示出和說明了本發明,但是本領域內的那些技術人員將理解,可在形式和細節上做出許多改變而不背離本發明的精神和範圍。
權利要求
1.一種用於有效率地處理在計算機系統的網絡協議棧的傳輸層接收到的發送套接字調用的方法,包括響應於在所述傳輸層接收到對指定長度的數據的所述發送套接字調用,並檢測到對於至少所述指定長度沒有足夠的存儲器可用於對所述傳輸層內的緩衝區的單個存儲器分配,在所述傳輸層阻止所述發送套接字調用;以及只有在檢測到存在足夠的存儲器可用於所述傳輸層內的緩衝區內的至少所述指定長度的所述單個存儲器分配時,才喚醒所述發送套接字調用,其中喚醒所述發送套接字調用觸發內核執行所述緩衝區內的所述至少所述指定長度的所述單個存儲器分配,並一次性地將所述數據寫入所述單個存儲器分配。
2.根據權利要求1的方法,還包括在所述傳輸層接收到所述發送套接字調用,該發送套接字調用具有被設定的、要求對於所述發送套接字調用僅執行所述緩衝區內的所述單個存儲器分配的標誌。
3.根據權利要求1的方法,還包括響應於阻止所述發送套接字調用,將最小存儲器分配大小設定為所述指定長度,其中所述傳輸層僅在檢測到對於所述最小存儲器分配大小存在足夠的存儲器時自動喚醒所述發送套接字調用。
4.根據權利要求1的方法,還包括響應於阻止所述發送套接字調用,將被阻止的線程大小設定為所述指定長度,其中所述傳輸層僅在檢測到對於所述被阻止的線程大小存在足夠的存儲器時自動喚醒所述發送套接字調用,其中所述被阻止的線程大小獨立於指定所述緩衝區內的最小存儲器分配大小的設置。
5.根據權利要求1的方法,還包括響應於在所述傳輸層檢測到對接收到的數據的確認,用所述確認內指示的量調整指示可用於分配給所述緩衝區的存儲器量的計數器。
6.根據權利要求1的方法,其中,用於分配給所述緩衝區的所述存儲器被保持在存儲池內,該存儲池被指定用於在所述傳輸層在多個緩衝區之間分配。
7.根據權利要求1的方法,其中,其中所述單個存儲器分配是mbuf。
8.根據權利要求1的方法,還包括檢測到接收所述數據的系統可接收的最大段大小;以及將可一次性地分配給所述緩衝區的存儲器的最大量設定為大於所述最大段大小的量。
9.一種用於有效率地處理髮送套接字調用的系統,該系統包括能夠在網絡上通過網絡協議棧通信的計算機系統,該網絡協議棧至少包括用於接收所述發送套接字棧的傳輸層;所述傳輸層包括用於響應於接收到對指定長度的數據的所述發送套接字調用,並檢測到對於至少所述指定長度沒有足夠的存儲器可用於所述傳輸層內的緩衝區的單個存儲器分配,阻止所述發送套接字調用的裝置;以及所述傳輸層包括用於只有在檢測到存在足夠的存儲器可用於所述傳輸層中的所述緩衝區內的至少所述指定長度的所述單個存儲器分配時才喚醒所述發送套接字調用的裝置,其中喚醒所述發送套接字調用觸發內核執行所述緩衝區內的所述至少所述指定長度的所述單個存儲器分配,並一次性地將所述數據寫入所述單個存儲器分配。
10.根據權利要求9的系統,其中,所述傳輸層還包括用於接收到具有被設定的標誌的所述發送套接字調用的裝置,該標誌僅要求對於所述發送套接字調用僅執行所述緩衝區內的所述單個存儲器分配。
11.根據權利要求9的系統,其中,所述傳輸層還包括響應於阻止所述發送套接字調用,用於將最小存儲器分配大小設定為所述指定長度的裝置,其中所述傳輸層僅在檢測到對於所述最小存儲器分配大小存在足夠的存儲器時自動喚醒所述發送套接字調用。
12.根據權利要求9的系統,其中,該傳輸層還包括響應於阻止所述發送套接字調用,用於將被阻止的線程大小設定為所述指定長度的裝置,其中所述傳輸層僅在檢測到對於所述被阻止的線程大小存在足夠的存儲器時自動喚醒所述發送套接字調用,其中所述被阻止的線程大小獨立於指定所述緩衝區內的最小存儲器分配大小的設置。
13.根據權利要求9的系統,其中,該傳輸層還包括響應於在所述傳輸層檢測到對接收到的數據的確認,用於用所述確認內指示的量調整指示可用於分配給所述緩衝區的存儲器量的計數器的裝置。
14.根據權利要求9的系統,其中,所述用於分配給所述緩衝區的所述存儲器被保持在存儲池內,該存儲池被指定用於在所述傳輸層在多個緩衝區之間分配。
15.根據權利要求9的系統,其中,其中所述單個存儲器分配是mbuf。
16.根據權利要求9的系統,其中,該傳輸層還包括用於檢測接收所述數據的系統可接收的最大段大小的裝置;以及用於將可一次性地分配給所述緩衝區的存儲器的最大量設定為大於所述最大段大小的量的裝置。
全文摘要
一種用於由傳輸層有效率地處理髮送套接字調用的方法、系統和程序。網絡協議棧的傳輸層從應用層接收到對指定長度的數據的發送套接字調用。響應於檢測到對於至少該指定長度沒有足夠的存儲器可用於傳輸層內的緩衝區的單個存儲器分配,傳輸層阻止該發送套接字調用。傳輸層只有在檢測到對於至少該指定長度存在足夠的存儲器可用於傳輸層的緩衝區內的單個存儲器分配時才喚醒發送套接字調用,其中喚醒該發送套接字調用觸發內核在緩衝區內執行單個存儲器分配,並一次性地將數據寫入該單個存儲器分配。
文檔編號H04L29/08GK1984152SQ20061014657
公開日2007年6月20日 申請日期2006年11月15日 優先權日2005年12月12日
發明者V·文卡塔蘇布拉, D·N·班納吉, V·然, K·拉馬林加姆 申請人:國際商業機器公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀