113
windows
TOE(TCP/IP Offload Engine)網卡與一般網卡的區別
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 協議早已是網絡的標準語言。隨著Internet SCSI、Remote Diret Memory Access這些網絡存貯標準的問世和實用化,從某種意義上說,TCP/IP又成了一種存貯協議。
我們知道,用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
最後更新:2017-04-03 12:54:29