2011-09-11 39 views
5

任何人都可以解釋TCP中的TSO/LRO硬件功能是什麼,並且這些功能是否也對確認機制負責?任何人都可以解釋TCP中的TSO/LRO硬件功能是什麼?

+0

從未聽說過這些硬件功能。你能解釋一下嗎? – valdo

+0

也有維基百科:[TSO](http://en.wikipedia.org/wiki/Large_segment_offload)和[LRO](http://en.wikipedia.org/wiki/Large_receive_offload)。 –

回答

5

具有啓用了TSO的硬件的主機將TCP數據發送到NIC,而不用軟件分段數據。網卡將執行TCP分段(讀取 - 它將把大數據塊分成段)。支持LRO的NIC接收數據包並在將數據傳遞到本地軟件之前重新組裝它們。

LRO/TSO不直接負責確認機制(儘管它依賴於GBN)。請注意,只要涉及的所有接口都支持該技術,LRO/TSO就可安全地用於路由器和網橋。

+0

1.如果LRO/TSO不對應答機制負責,他們如何分段/重組數據包? 2.爲什麼所有涉及到的接口都支持LRO/TSO技術? –

+0

1.大接收卸載通過將來自單個數據流的多個傳入數據包彙集到更大的緩衝區之前工作,然後再通過網絡堆棧向上傳輸。它只是彙總它們,沒有任何驗證數據發送正確的方式。有算法可以在另一層解決這個問題。 2.如果我要告訴你1509GB的數據,你應該做的至少是知道這一點,並準備一個1509GB的緩衝區。這是LRO/TSO的簡單規則。 –

12

我知道這是一個古老的線程,但我覺得答案並不完整。

您首先必須瞭解的是,當涉及到網絡性能提升技術時,TSO是一個相當大的冰山一角。

我們來考慮一下基本的網絡接口。您的操作系統使用PIO(程序輸入/輸出,即一次一個字(通常是32位))將整個數據包發送到NIC(網絡接口卡),因爲它應該出現在線路上,但不包括幀檢查序列。

這些是傳輸數據的速度提升。

所以第一次提速是使用DMA(直接存儲器訪問),這允許處理器在硬件複製數據包時做其他事情。但操作系統仍然需要將分組數據複製到內存中並生成標題和校驗和。

第二個提升是讓硬件爲數據包的數據部分生成校驗和,操作系統仍然會將數據複製到它的內存空間並放在頭部之前。當操作系統正在生成頭文件時,它總是可以生成頭文件的校驗和。這看起來很複雜,但機制其實很簡單。硬件被告知當它到達位置XX時開始校驗和,並將校驗和放在數據包緩衝區的yy位置。

第三個提升是使用分散/聚集。這基本上意味着操作系統不會將數據複製到內存中,它會將頭部和數據部分的位置傳遞給驅動程序,並允許驅動程序收集數據以發送它。這需要硬件校驗和,如果操作系統需要校驗數據包,則需要先將數據複製到內存中。

第四個(在Linux中本地支持的最高級別的boost)是TSO。使用TSO時,操作系統爲硬件提供了一個頭文件模板,然後是一大塊數據(不超過64K),用於分割和校驗和,這意味着操作系統需要生成更少的頭文件,並且設置DMA的任何開銷也會被抽取。當數據包在線上時,它們符合正常的數據包規則,並且將與它們經過的交換機或路由器兼容。

接待是一個不同的故事。硬件校驗和在這裏更多是一種猜測而不是確定性,因此硬件將分組和校驗和分別傳遞給操作系統,並允許操作系統決定數據包是否正常。

Scatter/Gather對於接收來說非常多餘。(大接收卸載),硬件知道這些數據包的含義並沒有簡單的方法,所以LRO目前只是一種軟件構造,數據包被傳遞給操作系統,然後操作系統決定是否或不要連接數據並將大塊傳遞給應用程序或傳遞許多較小的塊。

關於網絡堆棧的一些注意事項。

軟件應該ALWAYS產生ACK數據包。它不會的唯一原因是如果您的NIC上有TOE(TCP卸載引擎)。我不知道任何本機支持這種操作系統的操作系統,這意味着您需要對其進行破解以使其兼容。

所以有一個完整的和漫長的反應,希望它可以幫助某人。

+4

如果你改進格式,它可以極大地幫助這個答案的可讀性! –

相關問題