基礎(chǔ)信息
權(quán)利要求
說明書
PDF全文
法律信息
引證文獻
著錄項信息
專利名稱 | 通過傳輸層有效地處理發(fā)送套接字調(diào)用的方法和系統(tǒng) |
申請?zhí)?/td> | CN200610146574.5 | 申請日期 | 2006-11-15 |
法律狀態(tài) | 暫無 | 申報國家 | 中國 |
公開/公告日 | 2007-06-20 | 公開/公告號 | CN1984152 |
優(yōu)先權(quán) | 暫無 | 優(yōu)先權(quán)號 | 暫無 |
主分類號 | H04L29/08 | IPC分類號 | H;0;4;L;2;9;/;0;8查看分類表>
|
申請人 | 國際商業(yè)機器公司 | 申請人地址 | 上海市浦東新區(qū)張江高科技園區(qū)科苑路399號張江創(chuàng)新園10號樓7層
變更
專利地址、主體等相關(guān)變化,請及時變更,防止失效 |
權(quán)利人 | 國際商業(yè)機器(中國)有限公司 | 當前權(quán)利人 | 國際商業(yè)機器(中國)有限公司 |
發(fā)明人 | V·文卡塔蘇布拉;D·N·班納吉;V·然;K·拉馬林加姆 |
代理機構(gòu) | 北京市中咨律師事務(wù)所 | 代理人 | 于靜;張亞非 |
摘要
一種用于由傳輸層有效率地處理發(fā)送套接字調(diào)用的方法、系統(tǒng)和程序。網(wǎng)絡(luò)協(xié)議棧的傳輸層從應(yīng)用層接收到對指定長度的數(shù)據(jù)的發(fā)送套接字調(diào)用。響應(yīng)于檢測到對于至少該指定長度沒有足夠的存儲器可用于傳輸層內(nèi)的緩沖區(qū)的單個存儲器分配,傳輸層阻止該發(fā)送套接字調(diào)用。傳輸層只有在檢測到對于至少該指定長度存在足夠的存儲器可用于傳輸層的緩沖區(qū)內(nèi)的單個存儲器分配時才喚醒發(fā)送套接字調(diào)用,其中喚醒該發(fā)送套接字調(diào)用觸發(fā)內(nèi)核在緩沖區(qū)內(nèi)執(zhí)行單個存儲器分配,并一次性地將數(shù)據(jù)寫入該單個存儲器分配。
1.一種用于有效率地處理在計算機系統(tǒng)的網(wǎng)絡(luò)協(xié)議棧的傳輸層接收到的發(fā)送套接字調(diào)用的方法,包括:
響應(yīng)于在所述傳輸層接收到對指定長度的數(shù)據(jù)的所述發(fā)送套接字調(diào)用,并檢測到對于至少所述指定長度沒有足夠的存儲器可用于對所述傳輸層內(nèi)的緩沖區(qū)的單個存儲器分配,在所述傳輸層阻止所述發(fā)送套接字調(diào)用;以及
只有在檢測到存在足夠的存儲器可用于所述傳輸層內(nèi)的緩沖區(qū)內(nèi)的至少所述指定長度的所述單個存儲器分配時,才喚醒所述發(fā)送套接字調(diào)用,其中喚醒所述發(fā)送套接字調(diào)用觸發(fā)內(nèi)核執(zhí)行所述緩沖區(qū)內(nèi)的所述至少所述指定長度的所述單個存儲器分配,并一次性地將所述數(shù)據(jù)寫入所述單個存儲器分配。
2.根據(jù)權(quán)利要求1的方法,還包括:
在所述傳輸層接收到所述發(fā)送套接字調(diào)用,該發(fā)送套接字調(diào)用具有被設(shè)定的、要求對于所述發(fā)送套接字調(diào)用僅執(zhí)行所述緩沖區(qū)內(nèi)的所述單個存儲器分配的標志。
3.根據(jù)權(quán)利要求1的方法,還包括:
響應(yīng)于阻止所述發(fā)送套接字調(diào)用,將最小存儲器分配大小設(shè)定為所述指定長度,其中所述傳輸層僅在檢測到對于所述最小存儲器分配大小存在足夠的存儲器時自動喚醒所述發(fā)送套接字調(diào)用。
4.根據(jù)權(quán)利要求1的方法,還包括:
響應(yīng)于阻止所述發(fā)送套接字調(diào)用,將被阻止的線程大小設(shè)定為所述指定長度,其中所述傳輸層僅在檢測到對于所述被阻止的線程大小存在足夠的存儲器時自動喚醒所述發(fā)送套接字調(diào)用,其中所述被阻止的線程大小獨立于指定所述緩沖區(qū)內(nèi)的最小存儲器分配大小的設(shè)置。
5.根據(jù)權(quán)利要求1的方法,還包括:
響應(yīng)于在所述傳輸層檢測到對接收到的數(shù)據(jù)的確認,用所述確認內(nèi)指示的量調(diào)整指示可用于分配給所述緩沖區(qū)的存儲器量的計數(shù)器。
6.根據(jù)權(quán)利要求1的方法,其中,用于分配給所述緩沖區(qū)的所述存儲器被保持在存儲池內(nèi),該存儲池被指定用于在所述傳輸層在多個緩沖區(qū)之間分配。
7.根據(jù)權(quán)利要求1的方法,其中,其中所述單個存儲器分配是mbuf。
8.根據(jù)權(quán)利要求1的方法,還包括:
檢測到接收所述數(shù)據(jù)的系統(tǒng)可接收的最大段大??;以及
將可一次性地分配給所述緩沖區(qū)的存儲器的最大量設(shè)定為大于所述最大段大小的量。
9.一種用于有效率地處理發(fā)送套接字調(diào)用的系統(tǒng),該系統(tǒng)包括:
能夠在網(wǎng)絡(luò)上通過網(wǎng)絡(luò)協(xié)議棧通信的計算機系統(tǒng),該網(wǎng)絡(luò)協(xié)議棧至少包括用于接收所述發(fā)送套接字調(diào)用的傳輸層;
所述傳輸層包括用于響應(yīng)于接收到對指定長度的數(shù)據(jù)的所述發(fā)送套接字調(diào)用,并檢測到對于至少所述指定長度沒有足夠的存儲器可用于所述傳輸層內(nèi)的緩沖區(qū)的單個存儲器分配,阻止所述發(fā)送套接字調(diào)用的裝置;以及
所述傳輸層包括用于只有在檢測到存在足夠的存儲器可用于所述傳輸層中的所述緩沖區(qū)內(nèi)的至少所述指定長度的所述單個存儲器分配時才喚醒所述發(fā)送套接字調(diào)用的裝置,其中喚醒所述發(fā)送套接字調(diào)用觸發(fā)內(nèi)核執(zhí)行所述緩沖區(qū)內(nèi)的所述至少所述指定長度的所述單個存儲器分配,并一次性地將所述數(shù)據(jù)寫入所述單個存儲器分配。
10.根據(jù)權(quán)利要求9的系統(tǒng),其中,所述傳輸層還包括:
用于接收到具有被設(shè)定的標志的所述發(fā)送套接字調(diào)用的裝置,該標志僅要求對于所述發(fā)送套接字調(diào)用僅執(zhí)行所述緩沖區(qū)內(nèi)的所述單個存儲器分配。
11.根據(jù)權(quán)利要求9的系統(tǒng),其中,所述傳輸層還包括:
響應(yīng)于阻止所述發(fā)送套接字調(diào)用,用于將最小存儲器分配大小設(shè)定為所述指定長度的裝置,其中所述傳輸層僅在檢測到對于所述最小存儲器分配大小存在足夠的存儲器時自動喚醒所述發(fā)送套接字調(diào)用。
12.根據(jù)權(quán)利要求9的系統(tǒng),其中,該傳輸層還包括:
響應(yīng)于阻止所述發(fā)送套接字調(diào)用,用于將被阻止的線程大小設(shè)定為所述指定長度的裝置,其中所述傳輸層僅在檢測到對于所述被阻止的線程大小存在足夠的存儲器時自動喚醒所述發(fā)送套接字調(diào)用,其中所述被阻止的線程大小獨立于指定所述緩沖區(qū)內(nèi)的最小存儲器分配大小的設(shè)置。
13.根據(jù)權(quán)利要求9的系統(tǒng),其中,該傳輸層還包括:
響應(yīng)于在所述傳輸層檢測到對接收到的數(shù)據(jù)的確認,用于用所述確認內(nèi)指示的量調(diào)整指示可用于分配給所述緩沖區(qū)的存儲器量的計數(shù)器的裝置。
14.根據(jù)權(quán)利要求9的系統(tǒng),其中,所述用于分配給所述緩沖區(qū)的所述存儲器被保持在存儲池內(nèi),該存儲池被指定用于在所述傳輸層在多個緩沖區(qū)之間分配。
15.根據(jù)權(quán)利要求9的系統(tǒng),其中,其中所述單個存儲器分配是mbuf。
16.根據(jù)權(quán)利要求9的系統(tǒng),其中,該傳輸層還包括:
用于檢測接收所述數(shù)據(jù)的系統(tǒng)可接收的最大段大小的裝置;以及
用于將可一次性地分配給所述緩沖區(qū)的存儲器的最大量設(shè)定為大于所述最大段大小的量的裝置。
技術(shù)領(lǐng)域\n本發(fā)明涉及一種用于通過傳輸層進行有效的發(fā)送套接字調(diào)用處理的方法、系統(tǒng)和程序,其中發(fā)送套接字調(diào)用被阻止,直到足夠的存儲器可用于對于所述發(fā)送套接字調(diào)用內(nèi)的數(shù)據(jù)的全部長度足夠的、套接字緩沖區(qū)內(nèi)的單個存儲器分配。\n背景技術(shù)\n因特網(wǎng)已成為現(xiàn)代世界內(nèi)的非常重要的通信介質(zhì),并使得世界轉(zhuǎn)變?yōu)橐粋€全球數(shù)據(jù)通信系統(tǒng)。通常,因特網(wǎng)使用傳輸控制協(xié)議/網(wǎng)際協(xié)議(TCP/IP)協(xié)議套為計算機和其他數(shù)據(jù)傳輸設(shè)備提供共同的通信機構(gòu)以使它們相互通信。\n與在服務(wù)器上運行的應(yīng)用的通信通常使用分配給應(yīng)用程序和服務(wù)器裝置的端口和地址執(zhí)行的。端口可以是物理端口或邏輯端口。物理端口是進出計算機或網(wǎng)絡(luò)設(shè)備例如交換機或路由器的路徑。例如,個人計算機上的串行和并行端口是用于插入通信線路、調(diào)制解調(diào)器和打印機的外部插座。每個網(wǎng)絡(luò)適配器具有用于連接到局域網(wǎng)(LAN)的端口(以太網(wǎng)、令牌環(huán)等)。傳送和接收數(shù)據(jù)的任何設(shè)備暗示著連接到每條線路的可用端口。\n邏輯端口是分配給在服務(wù)器上運行的應(yīng)用的數(shù)字,通過該數(shù)字可識別該應(yīng)用。盡管服務(wù)器可能具有單個物理端口,但是服務(wù)器可使用多個邏輯端口。邏輯端口標識符和服務(wù)器裝置的地址的組合被稱為套接字。\n服務(wù)器的地址是識別網(wǎng)絡(luò)內(nèi)的服務(wù)器以及如何通過網(wǎng)絡(luò)將數(shù)據(jù)路由給服務(wù)器的特定物理端口的網(wǎng)絡(luò)地址。地址可表現(xiàn)為統(tǒng)一資源定位符(URL),或者在因特網(wǎng)的情況下為網(wǎng)際協(xié)議(IP)地址例如205.15.01.01,等等。地址被包含在由設(shè)備傳輸?shù)臄?shù)據(jù)包的報頭內(nèi)。通過讀取數(shù)據(jù)包的報頭并根據(jù)地址確定如何將數(shù)據(jù)包路由給其的預期目的地,而通過網(wǎng)絡(luò)將數(shù)據(jù)包從設(shè)備路由到設(shè)備。\nTCP/IP協(xié)議提供各種套接字函數(shù),所述函數(shù)可用于在通過套接字將數(shù)據(jù)傳輸給應(yīng)用以及從應(yīng)用傳輸數(shù)據(jù)時處理數(shù)據(jù)。一個這樣的被應(yīng)用用于寫請求的函數(shù)是發(fā)送套接字調(diào)用。例如,應(yīng)用調(diào)用發(fā)送套接字調(diào)用并指定套接字、套接字內(nèi)的緩沖區(qū)、將被發(fā)送的數(shù)據(jù)的長度和設(shè)定的標志。TCP/IP協(xié)議棧的TCP層接收到發(fā)送套接字調(diào)用,并觸發(fā)內(nèi)核以將可用存儲器分配給套接字內(nèi)的發(fā)送緩沖區(qū)以便寫發(fā)送套接字調(diào)用數(shù)據(jù)。具體地,一存儲池可用于分配給套接字,其中每個分配被稱為一mbuf。在一些情況下,存在足夠的存儲器可用于分配對于發(fā)送函數(shù)數(shù)據(jù)的長度足夠大的單個mbuf。但是,如果在接收到發(fā)送函數(shù)時并不是所有的數(shù)據(jù)被可被寫入第一mbuf或者沒有存儲器可用于分配mbuf,則TCP阻止發(fā)送線程。\n當TCP層接受到接收器接收到發(fā)送數(shù)據(jù)包的確認(ACK)時,TCP層調(diào)用內(nèi)核以將被確認的數(shù)據(jù)包釋放回存儲池。另外,對于每個ACK,TCP喚醒被阻止的發(fā)送線程,發(fā)送線程然后觸發(fā)內(nèi)核以試圖從最近釋放的存儲器將一mbuf分配到發(fā)送緩沖區(qū)內(nèi),并將數(shù)據(jù)的下一部分寫入該新的mbuf。\n在一個示例中,發(fā)送套接字調(diào)用將數(shù)據(jù)的長度設(shè)定為64千字節(jié)。TCP層發(fā)送給接收器的每個數(shù)據(jù)包被限制為1460字節(jié)的最大段大小(MSS),而每個ACK為2MSS或2920字節(jié)(4千字節(jié))。當TCP層接收到發(fā)送套接字調(diào)用時,在該示例中,存在4k的存儲器可用于分配給用于套接字的發(fā)送緩沖區(qū)。內(nèi)核將4k的mbuf分配給發(fā)送緩沖區(qū)并將64k數(shù)據(jù)中的4k寫入發(fā)送緩沖區(qū),剩余60k數(shù)據(jù)將被寫入。然后,TCP層阻止發(fā)送線程,直到接收到下一個ACK。當TCP層接收到下一個ACK時,TCP觸發(fā)內(nèi)核以釋放保持與該ACK相關(guān)聯(lián)的數(shù)據(jù)的mbuf。接下來,TCP層喚醒發(fā)送線程,該發(fā)送線程觸發(fā)內(nèi)核以試圖從釋放的存儲器分配新的mbuf,并將另一個4k寫入該新的mbuf。因此,對于其中ACK緩慢返回的64k發(fā)送套接字調(diào)用,在該示例中,TCP層可阻止和喚醒發(fā)送線程16次或更多次。\n如示例所示,盡管對于大數(shù)據(jù)寫入的單個發(fā)送套接字調(diào)用對于發(fā)送該數(shù)據(jù)的應(yīng)用是有效率的,但是當數(shù)據(jù)長度大于可用于分配的存儲器時,單個發(fā)送套接字調(diào)用沒有在TCP/IP協(xié)議棧內(nèi)被有效率地處理。具體地,為使TCP層通過當沒有另外的存儲器可用于分配時阻止線程并然后每當接收到ACK時喚醒線程來處理該發(fā)送線程,會低效率地鎖定大量CPU、總線和存儲器資源,并且對于每次喚醒僅寫一部分數(shù)據(jù)。\n此外,由于TCP在每次接收到ACK并且釋放存儲器時低效率地觸發(fā)單獨的mbuf分配,所以每個mbuf被添加到鏈中。當mbuf鏈增加時,定位mbuf以釋放存儲器變得更加費時從而低效率。另外,當用于單個發(fā)送套接字調(diào)用的數(shù)據(jù)被寫入多個鏈接的mbuf時,為了將數(shù)據(jù)推入網(wǎng)絡(luò),TCP層必須將被鏈接的mbuf的多個指針傳遞給網(wǎng)絡(luò)層和鏈路層。對于包括用于實際上將數(shù)據(jù)包放置在網(wǎng)絡(luò)上的適配器硬件的鏈路層,通過來自由TCP層傳遞下來的指針對該數(shù)據(jù)進行直接存儲器訪問(DMA)并在適配器級排隊該數(shù)據(jù);但是,執(zhí)行對被指向的鏈接的mbuf執(zhí)行直接存儲器訪問(DMA)是低效率的,因為適配器僅將連續(xù)數(shù)據(jù)排隊,因此需要另外的存儲器管理以將被鏈接的mbuf復制到連續(xù)數(shù)據(jù)中。\n因此,鑒于上文所述,有益的是使傳輸層能夠響應(yīng)發(fā)送套接字調(diào)用,從而當存儲池沒有包括足夠的存儲器可用于分配給對于發(fā)送套接字調(diào)用長度足夠大的mbuf時,傳輸層阻止該發(fā)送線程,直到有足夠的存儲器可用于分配單個mbuf以便對于發(fā)送套接字調(diào)用一次性地寫入數(shù)據(jù)。\n發(fā)明內(nèi)容\n因此,本發(fā)明提供了一種用于在網(wǎng)絡(luò)協(xié)議棧的傳輸層有效率地處理接收到的發(fā)送套接字調(diào)用的方法、系統(tǒng)和程序。\n在一個實施例內(nèi),傳輸層從應(yīng)用層接收到對指定長度的數(shù)據(jù)的發(fā)送套接字調(diào)用。響應(yīng)于檢測到對于至少該指定長度沒有足夠的存儲器可用于對傳輸層內(nèi)的緩沖區(qū)的單個存儲器分配,傳輸層阻止該發(fā)送套接字調(diào)用。傳輸層只有在檢測到對于至少該指定長度存在足夠的存儲器可用于傳輸層的緩沖區(qū)內(nèi)的單個存儲器分配時才喚醒發(fā)送套接字調(diào)用,其中喚醒該發(fā)送套接字調(diào)用觸發(fā)內(nèi)核在緩沖區(qū)內(nèi)執(zhí)行單個存儲器分配,并一次性地將數(shù)據(jù)寫入該單個存儲器分配。\n應(yīng)用層可在發(fā)送套接字內(nèi)設(shè)置標志,該標志要求對于該發(fā)送套接字調(diào)用僅進行單個存儲器分配。傳輸層被使能檢測該標志。\n響應(yīng)于阻止該發(fā)送套接字調(diào)用,傳輸層可將最小存儲器分配大小設(shè)定為該指定長度,其中該傳輸層僅在檢測到對于該最小存儲器分配大小存在足夠的存儲器時才自動喚醒該發(fā)送套接字調(diào)用?;蛘呖蛇x擇的,傳輸層可將與最小存儲器分配大小相獨立的被阻止的線程大小設(shè)定該指定長度,其中該傳輸層僅在檢測到對于該被阻止的線程大小存在足夠的存儲器時才自動喚醒該發(fā)送套接字調(diào)用。\n可用于分配給緩沖區(qū)的存儲器被保持在存儲池內(nèi),該存儲池被指定用于在傳輸層在多個緩沖區(qū)之間分配。從存儲池到一緩沖區(qū)的單個存儲器分配是一mbuf。傳輸層可檢測到接收該數(shù)據(jù)的系統(tǒng)可接收的最大段大小,并將全部可分配給發(fā)送套接字緩沖區(qū)的存儲器的最大量設(shè)定為大于該最大段大小的量。\n附圖說明\n在所附權(quán)利要求內(nèi)闡述了本發(fā)明的被認為是新穎特征的特性。但是,本發(fā)明的本身以及其優(yōu)選使用模式、另外的目標和優(yōu)點可通過在結(jié)合附圖閱讀時參照下文對說明性實施例的詳細說明最好地理解,附圖中:\n圖1是示出其中可實現(xiàn)本發(fā)明的計算系統(tǒng)的網(wǎng)絡(luò)的圖示;\n圖2是示出通信地連接到其中可實現(xiàn)本發(fā)明的網(wǎng)絡(luò)的計算系統(tǒng)的一個實施例的框圖;\n圖3是示出用于在網(wǎng)絡(luò)協(xié)議棧內(nèi)有效率地處理發(fā)送套接字調(diào)用的傳輸層的圖示;以及\n圖4是示出用于在網(wǎng)絡(luò)協(xié)議棧的傳輸層內(nèi)有效率地處理傳送套接字調(diào)用的過程和程序的高層邏輯流程圖。\n具體實施方式\n現(xiàn)在參照附圖,圖1示出其中可實現(xiàn)本發(fā)明的計算系統(tǒng)的網(wǎng)絡(luò)的圖示。分布式網(wǎng)絡(luò)100是其中可實現(xiàn)本發(fā)明的計算機的網(wǎng)絡(luò)。分布式網(wǎng)絡(luò)100包括網(wǎng)絡(luò)102,其是用于在分布式網(wǎng)絡(luò)100內(nèi)連接在一起的各種設(shè)備和計算機之間提供通信鏈路的介質(zhì)。網(wǎng)絡(luò)102可包括一種或多種類型的連接,包括但不局限于永久連接例如電線或光纜、通過電話連接實現(xiàn)的臨時連接、和無線傳輸連接。\n在所示示例內(nèi),服務(wù)器104連接到網(wǎng)絡(luò)102。另外,客戶機108、110和112也連接到網(wǎng)絡(luò)102。這些客戶機108、110和112以及服務(wù)器104可以是多種計算系統(tǒng)中的任何一種。在其他實施例內(nèi),附加的或替代的客戶機和服務(wù)器也可連接到網(wǎng)絡(luò)102。\n另外,在所示示例內(nèi),服務(wù)器104向客戶機108、110和112提供數(shù)據(jù),其中客戶機108、110和112是在客戶機/服務(wù)器環(huán)境內(nèi)服務(wù)器104的客戶機。術(shù)語“客戶機”和“服務(wù)器”用于指計算系統(tǒng)作為數(shù)據(jù)的接受者(客戶機)或數(shù)據(jù)的提供者(服務(wù)器)的一般角色。另外,服務(wù)器104和客戶機108、110和112中的每一個可用作“客戶機”和“服務(wù)器”兩者,并且可使用計算系統(tǒng)例如圖2的計算系統(tǒng)200實現(xiàn)。此外,服務(wù)器104和客戶機108、110和112還可進行對等網(wǎng)絡(luò)通信。\n分布式網(wǎng)絡(luò)100的客戶機/服務(wù)器環(huán)境可在許多不同的網(wǎng)絡(luò)體系結(jié)構(gòu)內(nèi)實現(xiàn)。在一個示例內(nèi),分布式網(wǎng)絡(luò)100是因特網(wǎng),其中網(wǎng)絡(luò)102代表使用基于包交換的協(xié)議套以相互通信的網(wǎng)絡(luò)和網(wǎng)關(guān)的世界范圍的集合。基于包交換的協(xié)議套的一個示例是傳輸控制協(xié)議/網(wǎng)際協(xié)議(TCP/IP)協(xié)議套。分布式網(wǎng)絡(luò)100還可在另外的或其他類型的網(wǎng)絡(luò)體系結(jié)構(gòu)例如內(nèi)聯(lián)網(wǎng)、局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)內(nèi)實現(xiàn)。在其他實施例內(nèi),圖1所示的網(wǎng)絡(luò)體系結(jié)構(gòu)和系統(tǒng)可改變。此外,本領(lǐng)域內(nèi)的那些普通技術(shù)人員將理解,所示示例并不是意味著對本發(fā)明的結(jié)構(gòu)限制。\n在一個示例內(nèi),服務(wù)器104可同時從每個客戶機系統(tǒng)108、110和112接收到多個訪問相同應(yīng)用或資源的通信請求。服務(wù)器104可通過最初調(diào)用多個等待接受通信請求的線程來同時服務(wù)于這些多個請求。服務(wù)器104打開一個新的套接字以處理每個請求。如下文將說明的,當在服務(wù)器104內(nèi)的應(yīng)用接收到請求并通過發(fā)送套接字調(diào)用響應(yīng)以發(fā)送數(shù)據(jù)時,包交換協(xié)議棧內(nèi)的傳輸層阻止每個寫線程且不會喚醒寫線程,直到單個緩沖區(qū)分配能夠接收套接字緩沖區(qū)內(nèi)的整個數(shù)據(jù)寫。通過阻止發(fā)送線程直到存儲器可用于套接字緩沖區(qū)內(nèi)的、大得足以接收發(fā)送套接字調(diào)用的長度的單個緩沖區(qū)分配,服務(wù)器104更有效率地響應(yīng)于其大小超過在請求時可用于在套接字緩沖區(qū)內(nèi)的分配的存儲器的發(fā)送套接字調(diào)用。\n現(xiàn)在參照圖2,框圖示出其中可實現(xiàn)本發(fā)明的計算系統(tǒng)的一個實施例。本發(fā)明可在多種系統(tǒng)包括多種通信地連接到包交換網(wǎng)絡(luò)例如網(wǎng)絡(luò)102的計算系統(tǒng)內(nèi)執(zhí)行。\n計算機系統(tǒng)200包括總線222或其他的用于在計算機系統(tǒng)200內(nèi)傳遞信息的通信設(shè)備,和耦合到總線222的用于處理信息的至少一個處理設(shè)備例如處理器212??偩€222優(yōu)選地包括低時延和較高時延路徑,所述路徑由橋和適配器連接并在計算機系統(tǒng)200內(nèi)被多個總線控制器控制。當實現(xiàn)為服務(wù)器時,計算機系統(tǒng)200可包括被設(shè)計為提高網(wǎng)絡(luò)服務(wù)能力的多個處理器。當多個處理器共享總線222時,可實現(xiàn)另外的用于管理總線訪問和鎖定的控制器(未示出)。\n處理器212可以是通用處理器例如IBM的PowerPCTM處理器,該處理器在正常操作期間,在操作系統(tǒng)260、應(yīng)用軟件270、中間件(未示出)和可從動態(tài)存儲設(shè)備例如隨機存取存儲器(RAM)214、靜態(tài)存儲設(shè)備例如只讀存儲器(ROM)216,數(shù)據(jù)存儲設(shè)備例如大容量存儲設(shè)備218或其他數(shù)據(jù)存儲介質(zhì)訪問的其他代碼的控制下處理數(shù)據(jù)。操作系統(tǒng)260可被稱為內(nèi)核。另外,多個操作系統(tǒng)可在計算機系統(tǒng)200內(nèi)運行。在一個實施例內(nèi),操作系統(tǒng)260和中間件可控制如圖4的流程圖內(nèi)所示的經(jīng)由網(wǎng)絡(luò)102在計算機系統(tǒng)200和至少一個其他計算機系統(tǒng)之間傳送的寫請求操作,以及文中所述的其他操作。或者可選擇的,本發(fā)明的步驟可由包含用于執(zhí)行所述步驟的硬連線邏輯的特定硬件部件執(zhí)行,或由被編程的計算機部件和定制硬件部件的任何組合執(zhí)行。\n本發(fā)明可被提供為被包含在機器可讀介質(zhì)上的計算機程序產(chǎn)品,該介質(zhì)上存儲有用于將計算機系統(tǒng)200編程以執(zhí)行根據(jù)本發(fā)明的過程的機器可執(zhí)行指令。文中使用的術(shù)語“機器可讀介質(zhì)”包括參與向處理器212或計算機系統(tǒng)200的其他部件提供指令以便執(zhí)行的任何介質(zhì)。這種介質(zhì)可采取任何形式,包括但不局限于非易失性介質(zhì)、易失性介質(zhì)和傳輸介質(zhì)。非易失性介質(zhì)的普通形式包括例如軟盤(floppy?disk)、軟盤(diskette)、硬盤、磁帶或任何其他磁介質(zhì)、光盤(CD-ROM)或任何其他光介質(zhì)、穿孔卡或任何其他的具有孔圖案的物理介質(zhì)、可編程ROM(PROM)、可擦除PROM(EPROM)、電EPROM(EEPROM)、閃速存儲器、任何其他存儲器芯片或盒、或計算機系統(tǒng)400可從中讀取并且適于存儲指令的任何其他介質(zhì)。在本實施例中,非易失性介質(zhì)的示例是大容量存儲設(shè)備218,其被示為計算機系統(tǒng)200的內(nèi)部部件,但是應(yīng)理解也可由外部設(shè)備提供。易失性介質(zhì)包括動態(tài)存儲器例如RAM?214。傳輸介質(zhì)包括同軸電纜、銅線或光纖,包括構(gòu)成總線222的線路。傳輸介質(zhì)也可表現(xiàn)為聲波或光波例如在射頻或紅外線數(shù)據(jù)通信期間生成的那些波。\n此外,本發(fā)明可作為計算機程序產(chǎn)品被下載,其中程序指令可作為包含在載波或其他傳播介質(zhì)內(nèi)的數(shù)據(jù)信號,經(jīng)由網(wǎng)絡(luò)102到網(wǎng)絡(luò)鏈路234(例如調(diào)制解調(diào)器或網(wǎng)絡(luò)連接)到耦合到總線222的通信接口232,而從遠程計算機例如服務(wù)器240被傳送到請求計算機系統(tǒng)200。通信接口232提供了耦合到網(wǎng)絡(luò)鏈路234的雙向數(shù)據(jù)通信,所述網(wǎng)絡(luò)鏈路可連接到例如局域網(wǎng)(LAN)、廣域網(wǎng)(WAN),或直接連接到因特網(wǎng)服務(wù)提供商(ISP)。具體地,網(wǎng)絡(luò)鏈路234可提供與一個或多個網(wǎng)絡(luò)例如網(wǎng)絡(luò)102的有線和/或無線網(wǎng)絡(luò)通信。此外,盡管未示出,但是通信接口232可包括軟件例如設(shè)備驅(qū)動器、硬件例如適配器、以及其他使得可進行通信的控制器。當實現(xiàn)為服務(wù)器時,計算機系統(tǒng)100可包括可經(jīng)由例如連接到輸入/輸出控制器的多個外設(shè)部件互連(PCI)總線橋訪問的多個通信接口。這樣,計算機系統(tǒng)200允許經(jīng)由多個單獨的端口連接到多個客戶機,并且每個端口也可支持與多個客戶機的多個連接。\n網(wǎng)絡(luò)鏈路234和網(wǎng)絡(luò)102都使用可承載數(shù)字數(shù)據(jù)流的電、電磁或光信號。通過各個網(wǎng)絡(luò)的信號和網(wǎng)絡(luò)鏈路234上的以及通過通信接口232的、承載到和來自計算機系統(tǒng)200的數(shù)字數(shù)據(jù)的信號可以這傳送信息的載波的形式。\n另外,計算機系統(tǒng)200可包括有助于輸入和輸出的多個外設(shè)部件。這些外設(shè)部件都連接到耦合到多層總線222之一的多個控制器、適配器和擴展槽例如輸入/輸出(I/O)接口226。例如,輸入設(shè)備224可包括例如經(jīng)由控制輸入的I/O接口226在總線222上被通信地使能的麥克風、鍵盤、鼠標或其他輸入外設(shè)部件。另外,例如,經(jīng)由用于控制輸出的I/O接口226在總線222上被通信地使能的顯示設(shè)備220可包括例如一個或多個圖形顯示設(shè)備,但是也可包括其他輸出接口例如音頻輸出接口。在本發(fā)明的其他可選擇實施例內(nèi),可添加附加的或替代的輸入和輸出外設(shè)部件。\n本領(lǐng)域內(nèi)的那些普通技術(shù)人員將理解圖2內(nèi)所示的硬件可改變。此外,本領(lǐng)域內(nèi)的那些普通技術(shù)人員將理解,所示示例并不是意味著本發(fā)明的結(jié)構(gòu)限制。\n現(xiàn)在參照圖3,圖示示出用于在網(wǎng)絡(luò)協(xié)議棧內(nèi)有效率地處理發(fā)送套接字調(diào)用的傳輸層的一個實施例。在該示例內(nèi),參照發(fā)送調(diào)用說明了TCP/IP協(xié)議棧300的元件的交互。在示例內(nèi),協(xié)議棧300的層包括應(yīng)用層302、套接字層304、TCP層306、網(wǎng)絡(luò)層308和鏈路層314。套接字層304和TCP層306被單獨示出,但是也可被認為是傳輸層的一部分。應(yīng)理解,使得可進行包交換通信的其他協(xié)議??蓪崿F(xiàn)本發(fā)明,并且附加的或替代的層可在協(xié)議棧300內(nèi)實現(xiàn)。\n在示例內(nèi),應(yīng)用層302將形式為send()命令的發(fā)送套接字調(diào)用傳遞給套接字層304。在示例內(nèi),如標號320所示,send()命令可包括多個參數(shù),包括但不局限于套接字標識符、緩沖區(qū)標識符、數(shù)據(jù)長度和標志。在本發(fā)明的一個實現(xiàn)內(nèi),標志參數(shù)包括一次性地寫發(fā)送套接字調(diào)用的所有數(shù)據(jù)的設(shè)置。例如,當在send()命令內(nèi)設(shè)置名為MSG_SNDALL的標志時,僅當存在足夠的空間可用于一次將用于發(fā)送套接字調(diào)用的所有數(shù)據(jù)寫入套接字層304內(nèi)的發(fā)送緩沖區(qū)322時,該數(shù)據(jù)才被寫入發(fā)送緩沖區(qū)322,以便經(jīng)由網(wǎng)絡(luò)102傳輸給接收器。應(yīng)用層302可包括多種類型的應(yīng)用例如網(wǎng)絡(luò)應(yīng)用,和應(yīng)用層協(xié)議例如HTTP協(xié)議、SMTP、FTP和域名系統(tǒng)(DNS)。\n另外,在該示例內(nèi),對于將一次性地被寫入發(fā)送緩沖區(qū)322的發(fā)送套接字調(diào)用內(nèi)的數(shù)據(jù),內(nèi)核必須分配足以保持發(fā)送套接字調(diào)用內(nèi)的數(shù)據(jù)的長度的單個mbuf。在該實施例內(nèi),mbuf例如mbuf?340、342和344是各被內(nèi)核從mbuf池324單獨分別分配給發(fā)送緩沖區(qū)322的存儲塊。在該示例內(nèi),內(nèi)核將每個分配的mbuf添加到一mbuf鏈中,其中每個mbuf均被單獨的指針所指向,例如鏈接的mbuf?340、342和344。應(yīng)理解,作為對鏈接的附加或作為鏈接的替代,內(nèi)核可實現(xiàn)其他存儲器分配管理結(jié)構(gòu)。另外,應(yīng)理解,盡管參照控制從mbuf池324到發(fā)送緩沖區(qū)322的存儲器分配的內(nèi)核說明了本實施例,但與內(nèi)核分離的分配資源也可控制存儲器分配。\n具體地,mbuf池324指為向套接字層304內(nèi)的緩沖區(qū)進行分配而留出的存儲器。除了發(fā)送緩沖區(qū)322外,套接字層304可包括附加的發(fā)送緩沖區(qū)、接收緩沖區(qū)、和其他類型的用于保持數(shù)據(jù)的緩沖區(qū)。另外,套接字層304可包括多個打開的套接字??衫斫?,可以有多個mbuf池可用,一mbuf池可由多個單獨的套接字層共享,以及可實現(xiàn)其他存儲器分配構(gòu)造。\n控制塊326可包括用于限制存儲器從mbuf池324到套接字層304內(nèi)的緩沖區(qū)的分配。例如,max_sendbuffer?330指示內(nèi)核可從mbuf池324一次分配到發(fā)送緩沖區(qū)322的最大存儲器總量。在另一示例中,在某些協(xié)議棧例如Berkeley軟件分發(fā)(BSD)或BSD派生協(xié)議棧中,一低水位標記328設(shè)置用于內(nèi)核為發(fā)送緩沖區(qū)322內(nèi)的每個mbuf分配的最小存儲器量。可理解,控制塊326內(nèi)的附加的或替代的設(shè)置可限制和調(diào)整從mbuf池324的存儲器分配。此外,盡管本實施例是參照套接字層304和TCP層306可訪問的控制塊326說明的,在其他實施例中,每一層可訪問單獨的控制塊或僅訪問控制塊內(nèi)的特定設(shè)置。\n返回該示例,在套接字層304接收到的每個發(fā)送套接字調(diào)用被傳遞給TCP層306。通常,TCP層306將消息從應(yīng)用層302傳送到客戶系統(tǒng),并將從客戶系統(tǒng)接收到的消息傳送給應(yīng)用層302。具體地,TCP層306將數(shù)據(jù)從發(fā)送緩沖區(qū)322傳送給客戶系統(tǒng)。\n在一個實施例中,計數(shù)器remaining_sendbuffer?332指示被釋放到mbuf池324的、可被分配給發(fā)送緩沖區(qū)322的當前存儲器量。在一些實施例內(nèi),其他計數(shù)器可指示可用于分配給mbuf的存儲器,或者可能需要對內(nèi)核的調(diào)用以訪問可用于分配給mbuf的存儲器量。\n在該示例內(nèi),在TCP層306接收到具有設(shè)定的MSG_SNDALL標志的發(fā)送套接字調(diào)用時,TCP層306檢查計數(shù)器remaining_sendbuffer?332,以檢測mbuf池324內(nèi)是否有足夠的空間可用于分配大得足以保持發(fā)送套接字調(diào)用內(nèi)的數(shù)據(jù)長度的mbuf。如果存在足夠的空間可用,則TCP層306觸發(fā)內(nèi)核以在發(fā)送緩沖區(qū)322內(nèi)為發(fā)送套接字調(diào)用分配mbuf塊,并將數(shù)據(jù)寫入發(fā)送緩沖區(qū)322內(nèi)的mbuf。\n對于寫入發(fā)送緩沖區(qū)322的mbuf塊的數(shù)據(jù),如標號418所示,TCP層306控制該數(shù)據(jù)以包為單位到網(wǎng)絡(luò)的傳輸。首先,TCP層306將數(shù)據(jù)在包大小的段中傳遞給網(wǎng)絡(luò)層308。如標號316所示,網(wǎng)絡(luò)層308控制包沿通過鏈路層341的網(wǎng)絡(luò)鏈路到接收系統(tǒng)例如如圖1所示的客戶機108、110或112之一的發(fā)送。盡管未示出,但是網(wǎng)絡(luò)層308可運行IP協(xié)議。鏈路層314可包括控制適配器312的設(shè)備驅(qū)動器310。適配器312可包括例如網(wǎng)絡(luò)接口卡。\n響應(yīng)于從發(fā)送系統(tǒng)接收到包,接收系統(tǒng)返回確認(ACK),如標號318所示。ACK例如ACK?318被上推到TCP層306。TCP層306接收到每個ACK并調(diào)用內(nèi)核以從發(fā)送緩沖區(qū)322釋放相關(guān)聯(lián)的mbuf。當為每個ACK釋放存儲器時,TCP層306可調(diào)整remaining_sendbuffer?332內(nèi)的記數(shù)以指示該調(diào)整。\n或者可選擇的,當TCP層306接受到具有設(shè)定的MSG_SNDALL標志的發(fā)送套接字調(diào)用,并且TCP層306確定沒有足夠的空間可用于分配對于發(fā)送套接字調(diào)用長度足夠大的單個mbuf時,則TCP層306阻止發(fā)送線程,并在被阻止的線程計數(shù)334內(nèi)設(shè)定這樣的設(shè)置,即不喚醒發(fā)送線程,直到在mbuf池324內(nèi)存在足夠的空間可用于為發(fā)送套接字調(diào)用長度分配單個mbuf。對于接收到的每個ACK,TCP層306可從remaining_sendbuffer?332檢測到是否存在足夠的空間可用于為發(fā)送套接字調(diào)用長度分配單個mbuf。\n在一個示例中,如果發(fā)送套接字調(diào)用的長度為64千字節(jié)(k),并且如remaining_sendbuffer?332內(nèi)指示的,mbuf池324僅包括4k可用于分配給發(fā)送緩沖區(qū)322,則TCP層306阻止發(fā)送線程,并在被阻止的線程計數(shù)334內(nèi)設(shè)定64k的閾值,從而直到接收到足夠的、將remaining_sendbuffer?332增加到被阻止的線程計數(shù)334內(nèi)的閾值的ACK,TCP層306不喚醒被阻止的發(fā)送線程。當TCP層306檢測到remaining_sendbuffer?332達到匹配被阻止的線程計數(shù)324內(nèi)的閾值的計數(shù)時,則TCP層306喚醒發(fā)送線程,該線程觸發(fā)內(nèi)核分配至少64k的mbuf并將64k的數(shù)據(jù)寫入mbuf。\n在一個實施例內(nèi),作為設(shè)定被阻止的線程計數(shù)334的替代,套接字層304可將低水位標記設(shè)定為發(fā)送套接字調(diào)用長度,其中低水位標記330指定最小的mbuf分配大小,并且TCP層306被設(shè)定為不喚醒發(fā)送線程,直到最小mbuf分配大小可用。遵循前面的示例,響應(yīng)于接收到長度為64k的發(fā)送套接字調(diào)用,套接字層304會將低水位標記330設(shè)定為64k。因此,在協(xié)議棧已根據(jù)低水位標記330阻止發(fā)送線程的情況下,在發(fā)送套接字調(diào)用內(nèi)包含標志并指導套接字層304將低水位標記330更新為發(fā)送套接字調(diào)用長度,將使能本發(fā)明而不用向控制塊326添加另外的設(shè)置或計數(shù)器。在其他實施例內(nèi),控制塊326可包括附加的或替代的設(shè)置和計數(shù)器,應(yīng)用層302可設(shè)定替代的標志或發(fā)送其他命令,并且套接字層304或TCP層306可訪問附加的設(shè)置和計數(shù)器,并響應(yīng)于替代的標志或命令以控制將數(shù)據(jù)消息寫入連續(xù)數(shù)據(jù)空間以用于在包交換協(xié)議棧內(nèi)傳輸。\n根據(jù)一個優(yōu)點,通過僅當內(nèi)核可分配至少為發(fā)送套接字調(diào)用長度的單個mbuf時才喚醒發(fā)送線程來控制發(fā)送套接字調(diào)用,TCP層306不再每當接收到ACK時無效率地喚醒發(fā)送線程。具體地,針對大的發(fā)送套接字調(diào)用僅喚醒發(fā)送線程一次減少了執(zhí)行與喚醒發(fā)送套接字調(diào)用相關(guān)聯(lián)的附加操作的次數(shù)。盡管未示出,TCP層306通過調(diào)用內(nèi)核執(zhí)行喚醒來喚醒被阻止的發(fā)送套接字調(diào)用。接下來,內(nèi)核確定CPU是否可用。一旦CPU可用,則內(nèi)核在CPU上加鎖并等待套接字變?yōu)榭捎?。具體地,傳入的ACK可具有高于寫入套接字層304的優(yōu)先級,從而觸發(fā)在試圖獲得套接字鎖定的不同的ACK之間的套接字鎖定爭用,并導致在套接字可用于發(fā)送套接字調(diào)用之前顯著的延遲。一旦套接字變?yōu)榭捎茫瑒t內(nèi)核獲得用于發(fā)送套接字調(diào)用的套接字鎖定。接下來,內(nèi)核確定什么空間可用于mbuf分配并控制使用該可用空間從mbuf池224到發(fā)送緩沖區(qū)332的mbuf分配。最后,內(nèi)核將用于發(fā)送線程的數(shù)據(jù)寫入被分配的mbuf。因此,考慮到實際執(zhí)行發(fā)送套接字調(diào)用操作所需的附加操作,這些操作中的每一個僅執(zhí)行一次而不是每次接收到ACK時都執(zhí)行,可更有效地使用內(nèi)核、總線和CPU資源,并減小套接字鎖定競用。\n根據(jù)另一個優(yōu)點,通過僅在內(nèi)核可一次性地分配至少為發(fā)送套接字調(diào)用長度的單個mbuf并寫數(shù)據(jù)時才喚醒發(fā)送線程來控制發(fā)送套接字調(diào)用,內(nèi)核不再被無效率地觸發(fā)以在TCP層306每次接收到ACK時分配單獨的mbuf。僅為每個發(fā)送套接字調(diào)用分配單個mbuf減小了當TCP層306將用于發(fā)送套接字調(diào)用的數(shù)據(jù)推入網(wǎng)絡(luò)所需的操作,并減小了當TCP層306接收到針對該數(shù)據(jù)的ACK時所需的操作。\n在第一示例中,為每個發(fā)送套接字調(diào)用分配單個mbuf減小了TCP層306將數(shù)據(jù)推入網(wǎng)絡(luò)所需的操作。返回當MSG_SNDALL標志沒有被設(shè)定時的TCP性能的限制,TCP層306為每個ACK喚醒發(fā)送線程,并且結(jié)果,對單個發(fā)送套接字調(diào)用分配多個mbuf且執(zhí)行多個數(shù)據(jù)寫。所述多個mbuf被鏈接且每個mbuf被一個指針引用。當存在針對單個發(fā)送套接字調(diào)用的多個mbuf的多個指針時,TCP層306必須將所有指針傳遞到網(wǎng)絡(luò)層308和鏈路層314,從而需要附加的資源。此外,為使鏈路層314將來自多個mbuf的發(fā)送套接字調(diào)用數(shù)據(jù)排隊,必須通過DMA操作執(zhí)行附加的存儲器管理操作,以將多個mbuf轉(zhuǎn)換成鏈路層314的連續(xù)數(shù)據(jù)需求。相反,當MSG_SNDALL標志被設(shè)定時,TCP層306僅在有足夠的空間可用于分配至少為發(fā)送套接字調(diào)用長度的單個mbuf時才喚醒發(fā)送線程,并因此僅有一個被傳遞到網(wǎng)絡(luò)層308和鏈路層314的用于發(fā)送套接字調(diào)用的指針。另外,鏈路層314可將連續(xù)數(shù)據(jù)的單個mbuf排隊而不執(zhí)行附加的存儲器管理操作,從而允許當將數(shù)據(jù)排隊以通過適配器312輸出時可進行更有效的DMA操作。\n另外,僅為每個發(fā)送套接字調(diào)用分配單個mbuf使得TCP層306可更有效率地利用例如TCP分段卸載的服務(wù)。在一個示例中,適配器312可提供TCP分段卸載選項,其允許TCP層306將數(shù)據(jù)分段卸載到適配器312。TCP層306通常執(zhí)行將數(shù)據(jù)分段到由MSS限制的段內(nèi)的數(shù)據(jù)分段。在一個示例內(nèi),通過TCP層306確定鏈路層314可發(fā)送以及接收器可接收的最大幀長度(也被成為最大傳送單元(MTU)),然后設(shè)定MSS以確保TCP段和網(wǎng)絡(luò)層308添加的IP數(shù)據(jù)可放進單個幀內(nèi),來設(shè)定MSS。對于TCP分段卸載,TCP層306將數(shù)據(jù)從單個mbuf塊推給適配器312以將分段過程卸載到適配器312。ACK通常確認兩個(2)包或2MSS。因此,當TCP層306調(diào)用內(nèi)核以釋放存儲器時,與ACK內(nèi)的2MSS相關(guān)聯(lián)的存儲器被釋放。通過為發(fā)送套接字調(diào)用設(shè)定MSG_SNDALL,對于大于2MSS的寫,TCP層306僅需要在TCP分段卸載請求內(nèi)將針對一個mbuf的指針傳遞給鏈路層314。\n在第二示例中,為每個發(fā)送套接字調(diào)用分配單個mbuf減少了TCP層306接收到ACK時所需的操作。如果MSG_SNDALL沒有被設(shè)定,則很可能每個mbuf將被設(shè)定為大小與每個ACK的相關(guān)聯(lián)的數(shù)據(jù)相等,并且可為單個發(fā)送套接字調(diào)用分配多個mbuf。當接收每個ACK時,TCP層306將觸發(fā)釋放相關(guān)聯(lián)的數(shù)據(jù)和mbuf。但是,當針對單個發(fā)送套接字調(diào)用鏈接許多較小的mbuf時,內(nèi)核必須首先遍歷鏈以定位相關(guān)聯(lián)的mbuf,并然后執(zhí)行消耗CPU和套接字資源以將每個mbuf釋放回mbuf池324的操作。相反,當MSG_SNDALL被設(shè)定時,則對于大于ACK大小的發(fā)送套接字調(diào)用長度,相關(guān)聯(lián)的mbuf將大于ACK大小。當TCP層306接收到針對與MSG_SNDALL被設(shè)定的發(fā)送套接字調(diào)用相關(guān)聯(lián)的數(shù)據(jù)的ACK時,將僅有一個mbuf與該發(fā)送套接字調(diào)用相關(guān)聯(lián),從而除去了識別用于發(fā)送套接字調(diào)用的哪個mbuf與ACK相關(guān)聯(lián)的步驟。此外,當TCP層306接收到針對與MSG_SNDALL被設(shè)定的發(fā)送套接字調(diào)用相關(guān)聯(lián)的數(shù)據(jù)的ACK時,為每個ACK移動mbuf內(nèi)的指針,從而需要最少的內(nèi)核資源,直到到達mbuf的末端并且對于發(fā)送套接字調(diào)用需要單個mbuf釋放操作。\n考慮到上述優(yōu)點,重要地應(yīng)指出,max_sendbuffer?330可被設(shè)定以進一步提高效率,其中應(yīng)用被使能以設(shè)定MSG_SNDALL標志。具體地,max_sendbuffer?330可設(shè)定為是接收器的窗口的2倍或3倍的量,其可以是MSS的兩倍或3倍,從而當套接字層304等待空間變?yōu)榭捎靡员銖椭茢?shù)據(jù)時,TCP層306不會缺乏數(shù)據(jù)來發(fā)送。\nTCP層306的另一個功能是檢測包何時已被丟失并重傳丟失的包。在一個示例中,TCP層306可實現(xiàn)“快速重傳”功能。在“快速重傳”功能下,TCP層306即使在包丟失之后仍繼續(xù)發(fā)送包。具體地,TCP層306檢測重復確認的數(shù)量何時達到快速重傳閾值,例如三個重復確認。當達到閾值時,則TCP層306推斷重復確認內(nèi)指示的包已丟失并自動重傳丟失的包。將max_sendbuffer?330的大小設(shè)定為MSS的兩倍或三倍在考慮到“快速重傳”功能時也是重要的,這樣可存在足夠的空間來保持另外的包,以便即使在丟失包之后TCP層306仍繼續(xù)發(fā)送包。\n現(xiàn)在參照圖4,高層邏輯流程圖示出用于在網(wǎng)絡(luò)協(xié)議棧的傳輸層內(nèi)有效率地處理發(fā)送套接字調(diào)用的過程和程序。如圖所示,過程在塊400處開始并此后前進到塊402。塊402示出傳輸層檢測到MSG_SNDALL被設(shè)定的發(fā)送套接字調(diào)用,并且過程轉(zhuǎn)到塊404。\n塊404示出確定發(fā)送套接字調(diào)用的長度是否大于可用于從mbuf池分配到套接字緩沖區(qū)的mbuf空間。如果存在足夠的可用空間,則過程轉(zhuǎn)到塊416。塊416示出觸發(fā)內(nèi)核以處理發(fā)送套接字調(diào)用,這包括分配對于套接字調(diào)用長度足夠的mbuf并將數(shù)據(jù)寫入mbuf,并且過程結(jié)束。\n返回塊404,如果不存在足夠的可用空間,則過程轉(zhuǎn)到塊406。塊406示出阻止發(fā)送線程,并設(shè)定控制塊僅在存在足夠的空間可用于對于發(fā)送套接字調(diào)用長度是足夠的單個mbuf時喚醒發(fā)送線程。接下來,塊408示出確定是否在傳輸層檢測到ACK。當檢測到ACK時,過程轉(zhuǎn)到塊410。塊410示出觸發(fā)內(nèi)核以釋放用于與ACK相關(guān)聯(lián)的數(shù)據(jù)的mbuf,并且過程轉(zhuǎn)到塊412。\n塊412示出確定傳輸層現(xiàn)在是否檢測到足夠的空間可用于被阻止的發(fā)送mbuf分配。如果目前仍沒有足夠的空間,則過程轉(zhuǎn)到塊408。如果有足夠的空間可用,則過程轉(zhuǎn)到塊414。塊414示出喚醒發(fā)送線程,并且過程轉(zhuǎn)到塊416并且如前文所述地前進。\n盡管參照優(yōu)選實施例具體地示出和說明了本發(fā)明,但是本領(lǐng)域內(nèi)的那些技術(shù)人員將理解,可在形式和細節(jié)上做出許多改變而不背離本發(fā)明的精神和范圍。
法律信息
- 2020-10-30
未繳年費專利權(quán)終止
IPC(主分類): H04L 29/08
專利號: ZL 200610146574.5
申請日: 2006.11.15
授權(quán)公告日: 2010.10.13
- 2015-08-19
專利權(quán)的轉(zhuǎn)移
登記生效日: 2015.07.28
專利權(quán)人由國際商業(yè)機器公司變更為國際商業(yè)機器(中國)有限公司
地址由美國紐約變更為201203 上海市浦東新區(qū)張江高科技園區(qū)科苑路399號張江創(chuàng)新園10號樓7層
- 2010-10-13
- 2007-08-15
- 2007-06-20
引用專利(該專利引用了哪些專利)
序號 | 公開(公告)號 | 公開(公告)日 | 申請日 | 專利名稱 | 申請人 |
1
| |
2005-03-02
|
2004-08-05
| | |
2
| |
2005-11-16
|
2004-05-12
| | |
被引用專利(該專利被哪些專利引用)
序號 | 公開(公告)號 | 公開(公告)日 | 申請日 | 專利名稱 | 申請人 | 該專利沒有被任何外部專利所引用! |