视频国产一区二区三区-久精品视频在线-HD免费看片,欧美一级少妇,闺房里的呻吟h玉势,tai9国产一区二区

0731-84728105
15116127200
二層交換機(jī)原型設(shè)計與實現(xiàn)(八)
發(fā)布時間:2021-06-21
     在二層交換機(jī)環(huán)境下,當(dāng)通信雙方持續(xù)交互數(shù)據(jù)時,會不斷命中雙方主機(jī)的MAC轉(zhuǎn)發(fā)表項,使其處于一個熱狀態(tài)。當(dāng)某一主機(jī)長時間不與外界聯(lián)系時,該主機(jī)的MAC轉(zhuǎn)發(fā)表項就會長時間不被使用,其為冷狀態(tài)。MAC地址老化意思就是MAC轉(zhuǎn)發(fā)表項長時間不用到,觸發(fā)老化機(jī)制將其從表項中清除。表項到底要到多冷的狀態(tài),具體是多長時間不用到才被老化,這個時間叫做老化時間。
     MAC地址為什么要老化?要做老化的主要原因是MAC轉(zhuǎn)發(fā)表項不夠用,換更大容量則比較費錢。產(chǎn)品在有限的資源下總是想干點更大的事情。出發(fā)點是好的,現(xiàn)實也是允許的。交換機(jī)允許做老化是跟他的應(yīng)用場景、網(wǎng)絡(luò)通信模型相關(guān)的。流量交互越密集、節(jié)點分布越離散對MAC轉(zhuǎn)發(fā)表的容量要求越大,反之容量可以較小。老化就是在容量和時間的兩個維度上做出的一種優(yōu)化策略,核心是一種對成本的優(yōu)化考慮。將理論的容量大小縮減,調(diào)整老化的時間長短,使其達(dá)到一個均衡穩(wěn)定狀態(tài)。這一狀態(tài)是指網(wǎng)絡(luò)的通信服務(wù)質(zhì)量是可被接受的。一味的調(diào)小轉(zhuǎn)發(fā)表容量和縮短老化時間,會讓網(wǎng)絡(luò)通信產(chǎn)生不可容忍的服務(wù)質(zhì)量。故在不同的應(yīng)用場景下,交換機(jī)的MAC轉(zhuǎn)發(fā)表容量不同、老化時間也不盡相等。
     MAC地址老化是以時間為參考進(jìn)行處理的,故在MAC轉(zhuǎn)發(fā)表字段中需要新設(shè)置時間戳字段,用以記錄MAC轉(zhuǎn)發(fā)表項的最新使用時間。MAC轉(zhuǎn)發(fā)表項的定義修改如下:

struct row_port_mac
{
      u8 port;
      u8 pad;/*內(nèi)存對齊*/
      u8 mac[MAC_LEN];
      struct timeval tv;/*記錄MAC最新更新時間*/
}

     1)老化方法
     每次MAC查表命中都要進(jìn)行MAC表項的時間更新,MAC轉(zhuǎn)發(fā)表的老化要根據(jù)表項的更新時間來判斷,與當(dāng)前檢查時間相比較,如果超過了預(yù)先設(shè)定的閥值則將該表項老化。老化在交換機(jī)中的具體實現(xiàn)是怎樣的?以下講述兩種方法。一種是傳統(tǒng)較好理解的老化線程方法;另一種是本平臺實現(xiàn)場景下的最大化資源優(yōu)化方法——X方法。
     老化線程的方法是指,通過啟動額外的專門線程,負(fù)責(zé)掃描整個MAC轉(zhuǎn)發(fā)表,逐項比較表項時間是否達(dá)到老化要求,從而做出正確的老化行為。該方法的實現(xiàn)方法即是線程循環(huán)、遍歷表項、比較時間、清除表項、休眠、進(jìn)入下次循環(huán)。該方法實現(xiàn)簡單,也比較適合硬件實現(xiàn)。
     X方法是指不采用額外線程輪詢遍歷的方式實現(xiàn)老化,那不遍歷,不判斷如何才能老化呢?這就是前面定語描述的,在本平臺實現(xiàn)場景下的實現(xiàn)基礎(chǔ)上完成老化功能。我們可以回顧一下,前面的二層交換功能中的MAC地址學(xué)習(xí)過程。將新MAC地址學(xué)習(xí)與查找匹配優(yōu)化到了一起實現(xiàn),這一實現(xiàn)過程中其實就存在遍歷與判斷的邏輯,那我們只要將此功能稍加調(diào)整,便可實現(xiàn)老化功能。核心實現(xiàn)方法如下:
       a. 在MAC學(xué)習(xí)查找過程中,匹配到表項則更新時間;
       b. 未匹配時,負(fù)責(zé)查找一個未使用空間時的判斷改為尋找一個使用時間超過閥值的判斷。
     1)老化代碼實現(xiàn)
     老化判斷函數(shù),老化時間用戶可自己定義大小。

#define AGING_TIME 30 /*老化超時時間長度,單位秒*/
int aging_match(int idx,struct timeval *now)
{
       return obx_mac_tbl->row[idx].tv.tv_sec + AGING_TIME < now->tv_sec;
}

     修改MAC學(xué)習(xí)與查找功能,將原來的查找空MAC表項改為查找可老化表項,如果表項是空,則其時間字段為零,也會是需要被老化的表項。

/*else if(j == -1 && !ether_addr_equal((u8 *)&zero_mac,obx_mac_tbl->row[i].mac))*/
else if(j == -1 && aging_match(i,&now))
{
      j = i;/*記錄第一個可老化表項位置*/
      /*記錄第一個找到為空白表項位置*/
}

     上述老化有何優(yōu)勢?不需要額外的線程資源,不需要更多的輪詢遍歷所有MAC表項。通過轉(zhuǎn)發(fā)過程中觸發(fā)式的完成老化功能。有數(shù)據(jù)交換了,進(jìn)入到該MAC學(xué)習(xí)流程,若匹配上了,則更新時間返回;若沒有匹配上MAC地址,則最壞情況是全表遍歷并找到一個老化表項。
     我們并不是要突出該方法的好處,真實的硬件也不會這么實現(xiàn)。但在一個抽象的環(huán)境中,方案應(yīng)該具備普適性,而在面向一個具體的場景時,方法可具特異性,這樣就可以使解決方案更符合場景需求,達(dá)到最優(yōu)解狀態(tài)。
     1)端口斷開對老化影響
     MAC表老化除了表項不夠用外還有一種情況就是端口發(fā)生變化,如從UP狀態(tài)變成DOWN狀態(tài),發(fā)生的原因有多種。但最壞的情況是原來連接到端口的網(wǎng)絡(luò)可能會發(fā)生變化,如用戶將網(wǎng)絡(luò)連接端口進(jìn)行了更換。由此帶來的問題的,基于原來的端口轉(zhuǎn)發(fā)表項全部會失效或帶來錯誤,會嚴(yán)重影響網(wǎng)絡(luò)的通信。雖然切換端口會影響網(wǎng)絡(luò),但如果不做端口老化,則會延長影響時間。故在交換機(jī)的端口發(fā)生DOWN的事件后,必須將該端口轉(zhuǎn)發(fā)輸出的所有MAC表項內(nèi)容清除,全部老化掉。
     2)MAC轉(zhuǎn)發(fā)表硬件卸載
     二層交換機(jī)的基本設(shè)計基本上只講到這為止,但這畢竟只是一個軟件的二層交換,其性能無法達(dá)到我們真實場景測試驗證的要求。FAST架構(gòu)是一個平臺無關(guān)的軟硬件協(xié)同處理架構(gòu),在FAST架構(gòu)下,我們可以非常容易的將MAC轉(zhuǎn)發(fā)表卸載到硬件實現(xiàn)。由軟件實現(xiàn)MAC地址的學(xué)習(xí),然后將其配置到硬件流表,后續(xù)該MAC地址的分組便可直接在硬件完成交換功能,從而可以達(dá)到線速轉(zhuǎn)發(fā)能力。下一篇文件我們將講述如何在FAST架構(gòu)下將二層交換的MAC轉(zhuǎn)發(fā)表卸載到硬件。
      歡迎您和學(xué)生們加入FAST開源項目群溝通與探討,一起體驗不一樣的系統(tǒng)設(shè)計過程。請先加微信號15116127200后邀請入群。

關(guān)注FAST開源社區(qū)
FAST一一開源、開放、高速、高效、可編程、可定義!軟硬件協(xié)同并行處理。