系統(tǒng)之家 - 系統(tǒng)光盤(pán)下載網(wǎng)站!

當(dāng)前位置:系統(tǒng)之家 > 系統(tǒng)教程 > Linux TSO實(shí)現(xiàn)原理

Linux系統(tǒng)TSO的實(shí)現(xiàn)原理

時(shí)間:2015-09-14 14:18:09 作者:zhijie 來(lái)源:系統(tǒng)之家 1. 掃描二維碼隨時(shí)看資訊 2. 請(qǐng)使用手機(jī)瀏覽器訪問(wèn): https://m.xitongzhijia.net/xtjc/20150914/57640.html 手機(jī)查看 評(píng)論

  所謂的TSO就是TCP Segment Offload,TSO的原理說(shuō)起來(lái)也不算太難,就是利用網(wǎng)卡實(shí)現(xiàn)TCP分段,從而達(dá)到縮短CPU周期的目的。本文就來(lái)介紹一下Linux系統(tǒng)TSO的實(shí)現(xiàn)原理。

  TSO的原理幾乎每個(gè)人都知道,事實(shí)上它是怎么實(shí)現(xiàn)的這個(gè)問(wèn)題也不難,難的是細(xì)節(jié)。在做完了正事之后,我想把這個(gè)原理展現(xiàn)出來(lái),當(dāng)然可能和實(shí)際的實(shí)現(xiàn)有超級(jí)大的出入,不管怎樣,它是一個(gè)原理框圖,仔細(xì)觀察,應(yīng)該也能自己實(shí)現(xiàn)一個(gè)比我這個(gè)更好的TSO了。

  這個(gè)設(shè)計(jì)是一個(gè)數(shù)字邏輯,時(shí)序電路的范疇,而這個(gè)領(lǐng)域十分地高大上,并不是普通的軟件程序員能hold住的,像我這樣的半瓶子也一樣。所以我依然是按照老樣子,試圖直接給出一個(gè)結(jié)果,而不是要求聽(tīng)書(shū)的人事先做一些準(zhǔn)備,往往在人們做這些準(zhǔn)備工作的時(shí)候,就已經(jīng)厭倦放棄了。

  基礎(chǔ)知識(shí)不難,就是一些門(mén)電路,與門(mén),非門(mén),比較器,譯碼器,觸發(fā)器之類的,這些東西隨便找一本計(jì)算機(jī)組成原理,都很齊全。關(guān)鍵是怎么組合它們,這是另一個(gè)領(lǐng)域的編程。此時(shí),我想起了15年前我的高中物理老濕劉丹青在講電路的時(shí)候說(shuō)過(guò)的一句話:讓電流流一下。這句話在科班人看來(lái)完全不符合電路設(shè)計(jì)的基本原則,他們可能更傾向于首先建模,然后分析,然后使用描述語(yǔ)言VHDL寫(xiě)出代碼,最后再給出電路,我覺(jué)得這適合于設(shè)計(jì)本身,但是不適合于對(duì)一個(gè)門(mén)外漢講述其精彩。對(duì)于一個(gè)門(mén)外漢來(lái)講,他唯一所知道的就是,讓電流流一下,然后沖過(guò)這個(gè)門(mén),沖過(guò)那個(gè)管,好了,高電平變成低平了。。。

  在一張白紙上,畫(huà)出一堆的門(mén)電路,然后隨性隨意組合它們,慢慢的,我突然發(fā)現(xiàn),這個(gè)電路就是TSO的框架了。我記得上周幫人固化了路由轉(zhuǎn)發(fā)表,然而那種固化行為可能會(huì)因?yàn)槌杀具^(guò)高而被pass掉,畢竟如今的軟實(shí)現(xiàn)已經(jīng)夠用了吧。所以只有核心傳輸網(wǎng)才需要這種固化的轉(zhuǎn)發(fā)表,然而TSO卻是服務(wù)器領(lǐng)域的首推,服務(wù)器太多了,遠(yuǎn)比核心轉(zhuǎn)發(fā)設(shè)備多,它們的CPU需要減負(fù),確實(shí),CPU去計(jì)算一些固定模式的東西,有點(diǎn)浪費(fèi),它應(yīng)該花更多的精力去處理一些不可控的東西。所以TCP分段這種事情自然而然就由網(wǎng)卡代勞了。你,我,他,我們都遇到過(guò)TSO,但是我們只會(huì)開(kāi)啟,關(guān)閉它,如果你想知道它到底是怎么Offload的,請(qǐng)看下圖,讓電流流一流:

Linux系統(tǒng)TSO的實(shí)現(xiàn)原理

  TCP分段和IP分片的區(qū)別很大,這個(gè)事你一定要明白。然后才可以看懂上面的圖。

  以上的解析只是一個(gè)特例,事實(shí)上,所有的硬件加速機(jī)制無(wú)非都是一樣的機(jī)制。當(dāng)我在看Intel千兆/萬(wàn)兆網(wǎng)卡的手冊(cè)時(shí),我想到在芯片的內(nèi)部,這種電路的元件幾乎是海量的,實(shí)現(xiàn)了RSS,硬件hash分類等。這就是我所謂的江河泛濫,沿著溝壑瞬間吞噬大地,我們?cè)撊绾瓮跍咸钲,這不是本文的目的,本文只是描述了這種可能性。這也是這種專用電路和通用CPU之間的本質(zhì)區(qū)別。CPU存在著一個(gè)指令集,這意味著它是關(guān)注于外部如何調(diào)用的,而專用電路的關(guān)注點(diǎn)在于內(nèi)部的執(zhí)行邏輯,它幾乎不對(duì)外提供任何接口,唯一的就是設(shè)置幾個(gè)寄存器的值,比如MTU,數(shù)據(jù)包長(zhǎng)度,數(shù)據(jù)包頭長(zhǎng)度等,其它的執(zhí)行邏輯,外部無(wú)權(quán)過(guò)問(wèn)。這是串行編程和并行執(zhí)行的本質(zhì)區(qū)別。

  對(duì)于指令系統(tǒng),也有一些要說(shuō)的。在內(nèi)部控制邏輯上,有一個(gè)統(tǒng)一的指令分發(fā)系統(tǒng),實(shí)際上就是發(fā)射出一系列的0和1的組合,這個(gè)組合中的0和1作用于各種門(mén)電路,這些門(mén)電路接受了這些不同的輸入后,產(chǎn)生不同的輸出,然后再作為另外的門(mén)電路的輸入,造成不同的輸出,如此反復(fù)。。。難道事實(shí)不是這樣子嗎?你很難否則定。

  讓電流流一流,如果你覺(jué)得比較抽象,那就觀察洪水泛濫的過(guò)程吧,大河決堤的地點(diǎn)不同,造成的災(zāi)難也不同,關(guān)鍵在于決堤處的地勢(shì)以及其所連接的各種地形,這一切都是同時(shí)發(fā)生的,和電流一樣,水流在經(jīng)過(guò)一個(gè)彎道或者一道拱橋的時(shí)候,也會(huì)有一些延時(shí)和分流,這就可以類比電路中的各種門(mén)。

  好了,Linux系統(tǒng)TSO的實(shí)現(xiàn)原理就為大家介紹到這里了,是不是看得有點(diǎn)暈了,看明白文中的那個(gè)圖,就能看得更清楚一點(diǎn)了。

標(biāo)簽 TSO

發(fā)表評(píng)論

0

沒(méi)有更多評(píng)論了

評(píng)論就這些咯,讓大家也知道你的獨(dú)特見(jiàn)解

立即評(píng)論

以上留言僅代表用戶個(gè)人觀點(diǎn),不代表系統(tǒng)之家立場(chǎng)

其他版本軟件

熱門(mén)教程

人氣教程排行

Linux系統(tǒng)推薦

掃碼關(guān)注
掃碼關(guān)注

掃碼關(guān)注 官方交流群 軟件收錄