tcp減壓引擎,第一次聽說這個名詞,但是并不是一個新的概念了,若幹年前聽說過裝置廠商在研究在fpga之中實作tcp stack,但是後來沒有聽到任何的産品出來,應該是路由裝置to host的traffic不多,而對于fw裝置,中間的tcp proxy實作過于複雜,工程上不可能實作。
現在的所謂toe實作我了解主要用于host的interface之中,用于為gbits以及10gbits接口場景中為cpu減壓,例如部署在資料中心内部的伺服器,cpu雖然越來越快,但是對于洶湧澎湃的traffic來說,還是有些力不從心。

上面是toe應用前後協定棧的差别,我覺得畫的有點絕對,tcp stack不太可能完全實作在interface之中,其實toe主要實作如下的offload:
1.tcp/ip checksum offload
cpu可以不用計算checksum而由網卡計算
2.cpu不用考慮資料的分段了,估計是直接将socket送過來的buf交給網卡。
如果是僅僅實作上述功能toe是很可能工程化實作的。
在另一篇文檔中提到了toe的一些優勢,但是我的分析,這個可能是要實作top替代整個tcp之後的優勢。
1.減少中斷:不用每個封包都産生中斷,如果10g接口這個對于cpu是很大的開銷。
2.減少memory拷貝次數,很多時候網卡的buffer和app的可以直接共享。
3.協定處理的節約,這個是當然的了。
顯而易見toe有一些問題。
1.沒有标準,導緻協定棧實作困難,無法标準化的進行剪裁
2.硬體中實作,有bug怎麼辦?
我們知道,用tcp/ip協定處理網絡流量,要占用大量伺服器資源。為了減輕伺服器的壓力,一種稱為tcp減負引擎(tcp offload engine :toe)的技術應運而生。tcp減負引擎一般由軟硬兩部分元件構成,将傳統的tip/ip協定棧的功能進行延伸,把網絡資料流量的處理工作全部轉到網卡上的內建硬體中進行,伺服器隻承擔tcp/ip控制資訊的處理任務。這種為伺服器減輕負擔的技術,得到了大多數廠商的肯定。
普通網卡用軟體方式進行一系列tcp/ip相關操作,是以,會在三個方面增加伺服器的負擔,這三個方面是:資料複制、協定處理和中斷處理。
網絡上每個應用程式在收發大量資料包時,要引發大量的網絡i/o中斷,對這些i/o中斷信号進行響應,成了伺服器的沉重負擔。比如,一個典型的 64kbps的應用程式在向網絡發送資料時,為了将這些資料裝配成以太網的資料包,并對網絡接收确認信号進行響應,要在伺服器和網卡間觸發60多個中斷事件,這麼高的中斷率和協定分析工作量已經是相當可觀的了。雖然某些網絡作業系統具有中斷捆綁功能,能夠有效減少中斷信号的産生,但卻無法減少伺服器和網卡間響應事件的處理總量。
tcp減負引擎網卡的工作原理與普通網卡不同。普通網卡處理每個資料包都要觸發一次中斷,tcp 減負引擎網卡則讓每個應用程式完成一次完整的資料處理程序後才觸發一次中斷,顯著減輕伺服器對中斷的響應負擔。還是以64kbps的應用程式為例,應用程式向網絡發送資料全部完成後,才向伺服器發送一個資料通道減負事件中斷,資料包的處理工作由tcp減負引擎網卡來做,而不是由伺服器來做,進而消除了過于頻繁的中斷事件對伺服器的過度幹擾。網絡應用程式在收發資料時,經常是同一資料要複制多份,在這種情形下,tcp減負引擎網卡發揮的效益最明顯。
普通網卡通過采用支援校驗功能的硬體和某些軟體,能夠在一定程度上減少發送資料的複制量,但卻無法減少接收資料的複制量。對大量接收資料進行複制通常要占用大量的機器工作周期。普通網卡先将接收到的資料在伺服器的緩沖區中複制一份,經系統處理後配置設定給其中一個tcp連接配接,然後,系統再将這些資料與使用它的應用程式相關聯,并将這些資料由系統緩沖區複制到應用程式的緩沖區。tcp減負引擎網卡在接收資料時,在網卡内進行協定處理,是以,它不必将資料複制到伺服器緩沖區,而是直接複制到應用程式的緩沖區,這種“零拷貝”方式避免了網卡和伺服器間的不必要的資料往複拷貝。
tcp減負引擎網卡能顯著減輕由資料大量移動造成的伺服器過載負擔。實測證明,對于檔案伺服器和以内容服務為主的伺服器應用環境來說,如果用tcp減負引擎網卡代替普通網卡,相當于為伺服器增加了一個cpu