国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于可編程數(shù)據(jù)平面的DLB算法實現(xiàn)

2021-11-03 08:00劉熙
電子技術(shù)與軟件工程 2021年16期
關(guān)鍵詞:掩碼哈希權(quán)值

劉熙

(銳捷網(wǎng)絡(luò)股份有限公司 福建省福州市 350002)

1 引言

近年來,數(shù)據(jù)平面可編程技術(shù)的發(fā)展,為網(wǎng)絡(luò)領(lǐng)域的發(fā)展注入了新的活力。在高性能轉(zhuǎn)發(fā)領(lǐng)域,支持協(xié)議無關(guān)的交換架構(gòu)PISA(Protocol Independent Switch Architecture)的可編程轉(zhuǎn)發(fā)芯片,結(jié)合P4(Programming Protocol-Independent Packet Processors)這樣的高級語言,使得網(wǎng)絡(luò)擁有者、工程師、架構(gòu)師及管理員可以自上而下地定義數(shù)據(jù)包的完整處理流程[1]。程序員通過編程,可以將交換機變?yōu)橐粋€架頂交換機(Top-Of-Rack,TOR)、一道防火墻或一個負(fù)載平衡器,或者支持新的自動診斷功能和新的擁塞控制算法等[1]。

PISA 架構(gòu)(如圖1)主要由可編程的報文解析器(PARSER)、可編程的匹配動作單元模塊(MATCH-ACTION UNIT,簡稱MAU)和報文組裝模塊(DEPARSER)構(gòu)成[1,2,3]。在流水線入口,可編程的報文解析器負(fù)責(zé)對數(shù)據(jù)包進(jìn)行預(yù)處理和解析。可編程的匹配動作單元模塊主要用于各種查找表操作,芯片內(nèi)部包含多級匹配動作單元并以流水線的方式組合而成。每級匹配動作單元內(nèi)都包含一定數(shù)量的哈希資源、SRAM 資源、TCAM 資源和ALU 資源等。哈希資源可以用于實現(xiàn)各自查找表算法,SRAM 資源可以用來實現(xiàn)精確匹配表的存儲與查找,TCAM 資源則可以用來實現(xiàn)模糊匹配表的存儲與查找,ALU 資源可以實現(xiàn)內(nèi)部的相關(guān)控制,具備邏輯與或的運算能力和加減的運算能力,從而實計數(shù)(Counter)、流量計(Meter)以及寄存器(Register)的功能。報文組裝模塊則將查表結(jié)果作用于報文之上,增加一些新的報文頭部,或刪除一些報文頭部,或修改已有報文頭部中的一些字段,并將處理完成的報文提交給緩存管理模塊入隊,調(diào)度模塊則根據(jù)選擇的調(diào)度算法將報文調(diào)度出隊,經(jīng)過下行流水線處理最終由出口端口轉(zhuǎn)發(fā)給下一跳設(shè)備。

圖1:PISA 架構(gòu)

2 概述

2.1 網(wǎng)絡(luò)負(fù)載均衡

負(fù)載均衡(Load Balance,簡稱LB),是指將負(fù)載(工作任務(wù))進(jìn)行平衡、分?jǐn)偟蕉鄠€操作單元上進(jìn)行運行,從而協(xié)同完成工作任務(wù),達(dá)到提高系統(tǒng)的吞吐量、減小響應(yīng)時間、優(yōu)化系統(tǒng)資源的效果。而網(wǎng)絡(luò)的負(fù)載均衡是指對網(wǎng)絡(luò)上的負(fù)載情況進(jìn)行平衡分配的一種處理方法。通過采用某些負(fù)載均衡算法實現(xiàn)多路徑的選擇,使得各路徑的負(fù)載分配均等,從而提高網(wǎng)絡(luò)的資源的利用率。

網(wǎng)絡(luò)技術(shù)中,通常采用等價多鏈路(Equal Cost Multi Path,ECMP)或鏈路聚合(Link Aggregation,LAG)實現(xiàn)負(fù)荷分擔(dān)和鏈路備份。其中,ECMP 的原理是,為一個目的地址配置多條相同開銷的物理鏈路組成ECMP,發(fā)往該目的地址的報文可以通過該ECMP包含的多條物理鏈路進(jìn)行轉(zhuǎn)發(fā),若某條物理鏈路出現(xiàn)故障,則可以使用其它物理鏈路代替出現(xiàn)故障的物理鏈路完成報文的轉(zhuǎn)發(fā);LAG的原理是,將連接到同一網(wǎng)絡(luò)設(shè)備的多條物理鏈路匯聚成LAG,發(fā)往該網(wǎng)絡(luò)設(shè)備的報文可以通過該LAG 包含的多條物理鏈路進(jìn)行轉(zhuǎn)發(fā),若某條物理鏈路出現(xiàn)故障,則可以使用其它物理鏈路代替出現(xiàn)故障的物理鏈路完成報文的轉(zhuǎn)發(fā)。

從ECMP 或LAG 包含的多條物理鏈路中選取一條物理鏈路轉(zhuǎn)發(fā)報文的過程即為負(fù)載均衡。目前常用的負(fù)載均衡方法是,接收到報文后,基于該報文的目的地址確定該報文的出口為ECMP 或LAG 時,基于該報文的IP 五元組信息(IP 源地址、IP 目的地址、IP 協(xié)議號,四層協(xié)議源端口、四層協(xié)議目的端口)計算該報文的哈希值,將該報文的哈希值與該報文的出口包含的物理出口總數(shù)進(jìn)行取模運算,最后根據(jù)取模運算結(jié)果,從該報文的出口包含的所有物理出口中選取一個物理出口轉(zhuǎn)發(fā)該報文。

這種基于IP 五元組的哈希值的負(fù)載均衡方法,也叫逐流均衡。這種均衡方法,對于同一個流,所有報文都走相同的物理端口,因此數(shù)據(jù)包的傳輸是保序的,對于TCP 這樣要求嚴(yán)格保序的通信協(xié)議來說非常適合。但是,可能存在多個數(shù)據(jù)流的報文的哈希值相同或者多個數(shù)據(jù)流的報文的哈希值不同但基于哈希值選擇的物理出口相同的問題,從而導(dǎo)致該多個數(shù)據(jù)流的報文通過同一個物理出口進(jìn)行轉(zhuǎn)發(fā)處理,進(jìn)而造成局部物理出口的負(fù)載過重。

還有一種符合均衡方法,叫逐包均衡。指采用輪詢方式,將報文在所有等價路徑上輪流發(fā)送。這種均衡方式的優(yōu)點很明顯,所有等價路徑的網(wǎng)絡(luò)負(fù)載可以實現(xiàn)均等。但是缺點也很明顯,即:不同路徑的網(wǎng)絡(luò)時延可能不同,最終可能造成報文序列的亂序,這對像TCP 這樣要求強序傳輸?shù)膮f(xié)議來說是致命的。

如何在報文傳輸保序和網(wǎng)絡(luò)負(fù)載均衡之間找到一個平衡支點,這就是動態(tài)負(fù)載均衡(Dynamic Load Balance,簡稱DLB)要解決的問題。

2.2 Flowlet原理

網(wǎng)絡(luò)通信中,大多數(shù)流量是TCP 流量。TCP 通信采用滑動窗口方式發(fā)送,為了性能考慮,報文會根據(jù)窗口大小以批量方式發(fā)送,因此TCP 報文實際上是以Burst 方式發(fā)送出來的。對于每個TCP 流,每次burst 之間存在時間間隙。當(dāng)這種間隙足夠大的時候,可以進(jìn)行TCP 流的底層鏈路的切換。此時,舊鏈路上的packet 均已經(jīng)離開了鏈路或者至少將要離開鏈路,因此切換鏈路將不會造成亂序,不會破壞TCP 的強序要求[4,5]。而這種Burst 發(fā)送的多個報文,業(yè)界稱之為Flowlet[4,5,6],意為微小的流。

由于存在burst 和對應(yīng)的間隙,一個TCP Flow 可以切割為若干個TCP Flowlet,屬于同一個Flowlet 的報文必須選擇相同的鏈路,屬于不同F(xiàn)lowlet 的報文可以選擇走不同的鏈路。如圖2所示。

圖2:Flowlet 示意圖

2.3 DLB均衡算法實現(xiàn)

DLB 技術(shù)是一種在滿足TCP 保序傳輸要求的前提下提高網(wǎng)絡(luò)負(fù)載均衡效果的技術(shù)?;诳删幊绦酒瑢崿F(xiàn)的DLB算法,包括兩大模塊:

(1)均衡模塊:利用Flowlet 原理對流量的負(fù)載進(jìn)行動態(tài)調(diào)整,選擇最優(yōu)路徑調(diào)度新的Flowlet;

(2)監(jiān)控模塊:在轉(zhuǎn)發(fā)面對鏈路進(jìn)行負(fù)載監(jiān)控,實時更新最優(yōu)路徑信息。

DLB算法原理圖如圖3所示,DLB算法的整體處理流程如下:

圖3:DLB算法原理圖

均衡模塊(在報文入口方向):

(1)DLB 分組:根據(jù)報文的源口信息、目的信息(LAG 或者ECMP)等信息進(jìn)行匹配查找,獲取報文對應(yīng)的DLB 分組信息,DLB 分組信息包括:

①分組標(biāo)識(DLB_ID):分組標(biāo)識采用數(shù)值來表示,比如自然數(shù)1,2,3,4 等。不同分組的標(biāo)識不同。

②分組掩碼(MASK):包括高位掩碼(HI_MASK)和低位掩碼(LO_MASK),這兩個掩碼和生成FlowID 有關(guān)。高位掩碼用于設(shè)定FlowID 的區(qū)間,低位掩碼用于設(shè)定FlowID 的區(qū)間偏移量。不同分組的分組掩碼是不同的。

③Flowlet 老化時間(IDLE_Timeout):老化時間是一個相對時間戳,可以根據(jù)轉(zhuǎn)發(fā)場景需要設(shè)置此老化時間的大小。比如100μ 秒。

(2)計算FLOW_ID:

①計算報文的HASH 值。對于IP 報文,一般根據(jù)報文的五元組信息,計算出對應(yīng)的哈希值;對于非IP報文,可以根據(jù)其他信息(比如MPLS 報文可以根據(jù)MPLS 標(biāo)簽)計算報文的哈希值。

②根據(jù)公式 FLOW_ID = HI_MASK | (HASH & LO_MASK),先將Hash 值和分組低位掩碼進(jìn)行按位與運算,然后再和分組高位掩碼進(jìn)行按位或運算,最終得到報文的FLOW_ID。

(3)Flowlet 老化判斷:

①獲取報文當(dāng)前的的時間戳Cur_Timestamp;

②使用報文的FLOW_ID 作為索引,從寄存器數(shù)組Flowlet_TSTAMP 獲取記錄的上一次轉(zhuǎn)發(fā)報文的時間戳LAST_Timestamp。

③判斷不等式Cur_Timestamp>LAST_Timestamp + IDLE_Timeout 是否成立,如果成立則說明Flowlet 已老化(當(dāng)前的報文視為新的Flowlet),反之則說明Flowlet 沒有老化(當(dāng)前的報文視為舊的Flowlet)。

(4)選擇最優(yōu)路徑:對于新的Flowlet 情況,采用輪詢方式為報文選擇新的路徑。算法如下:

①使用報文的DLB_ID 作為索引,從寄存器數(shù)組PREF_PATH_SET 獲取優(yōu)選路徑集合對應(yīng)的端口位圖(PREF_PORTMAP),位圖中非0 的bit 位表示對應(yīng)的端口為可用物理端口。比如0b10101011,表示物理端口1、2、4、6、8 為可用端口。

②根據(jù)DLB_ID,從寄存器數(shù)組SN_GEN 獲取一個在一定范圍內(nèi)遞增且超過范圍則重置的序列號SN。比如SN 可以取值1 ~127,則SN 值超過127 時重新置0。

③根據(jù)PREF_PORTMAP 和SN,選擇最優(yōu)出口。比如,當(dāng)PREF_PORTMAP 值為0b10101011,SN 值為1 時,選擇第一個物理口;當(dāng)PREF_PORTMAP 值為0b10101011,SN 值為2 時,選擇第二個物理口。由于SN 值是遞增的,因此為新的Flowlet 分配到的優(yōu)選出口是依次輪詢分配的。

④當(dāng)最優(yōu)路徑不存在時,即PREF_PORTMAP 值為全0,此時從候選路徑集合中基于SN 值選擇端口。候選路徑集合為所有可用的等價成員口集合。

(5)保存轉(zhuǎn)發(fā)路徑:

①對于新的Flowlet 情況,以FLOW_ID 作為索引,將選擇的出口信息更新到寄存器數(shù)組Flowlet Path 對應(yīng)成員。

②對于舊的Flowlet 情況,以FLOW_ID 作為索引,從寄存器數(shù)組Flowlet Path 對應(yīng)成員獲取保存的出口信息。

監(jiān)控模塊1(在報文的出口方向)

(1)出口測速:

①利用計量器資源,為每個物理端口進(jìn)行實時測速。比如,采用單桶令牌的計量器,當(dāng)端口的報文速率超過配置的速率閾值時,計量器執(zhí)行結(jié)果為紅色;當(dāng)端口的報文速率低于配置的速率閾值時,計量器執(zhí)行結(jié)果為綠色。

②為了使測速結(jié)果更穩(wěn)定,還可以采用多次測量取平均顏色的做法。比如每輪累計統(tǒng)計1000 個報文的計量器顏色總量,當(dāng)紅色總量(比如600 個)大于綠色總量(比如400 個)時判定平均顏色為紅色。

(2)權(quán)值計算和變化確認(rèn):

①根據(jù)端口的計量器顏色信息和端口的出口隊列深度(可選),調(diào)整端口的轉(zhuǎn)發(fā)優(yōu)先級。比如發(fā)現(xiàn)端口的計量器顏色為紅色且出口隊列深度超過配置的閾值時,降低端口的轉(zhuǎn)發(fā)優(yōu)先級,需要將它從優(yōu)選路徑中移除。當(dāng)發(fā)現(xiàn)端口的計量器顏色恢復(fù)為綠色且出口隊列深度低于配置的閾值時,提高端口的轉(zhuǎn)發(fā)優(yōu)先級。

②用一組寄存器PORT_PRIORITY 保存端口上一次的權(quán)值信息。比較當(dāng)前的權(quán)值信息與寄存器保存的上一次權(quán)值信息是否發(fā)生變化,如果有變化則更新權(quán)值信息,并返回權(quán)值變化確認(rèn)(設(shè)置PRIORITY_ACK 為1)。

(3)鏡像反饋:當(dāng)端口的權(quán)值發(fā)生變化時,觸發(fā)一個用于調(diào)整最優(yōu)路徑的PREF 報文鏡像。

①獲取出端口的對應(yīng)DLB 的物理成員口位圖,比如第一個物理成員口對應(yīng)位圖可以表示為0b0000 0001,第二個物理成員口對應(yīng)的位圖0b0000 0010。

②觸發(fā)一個指向回環(huán)口的鏡像報文。鏡像報文的頭部封裝這些信息:DLB ID、物理成員口位圖、端口權(quán)值。

監(jiān)控模塊2(在報文的回環(huán)口入口方向):

更新最優(yōu)路徑:回環(huán)口收到PREF 報文鏡像后,從報文中提取DLB ID、物理成員口位圖、端口權(quán)值這些信息,更新PREF_PATH_SET 的最優(yōu)路徑信息。將端口權(quán)值低于最優(yōu)路徑權(quán)值的物理成員口對應(yīng)位圖,從最優(yōu)路徑的位圖中移除;將端口權(quán)值高于或等于最優(yōu)路徑權(quán)值的物理成員口對應(yīng)位圖,添加到最優(yōu)路徑的位圖中。

3 結(jié)語

借助可編程芯片,我們在數(shù)據(jù)平面實現(xiàn)了DLB算法,通過均衡模塊和監(jiān)控模塊的配合,在確保數(shù)據(jù)流中的報文不會出現(xiàn)亂序的情況下,有效地改善了負(fù)載均衡效果,提高了網(wǎng)絡(luò)轉(zhuǎn)發(fā)性能??删幊探粨Q芯片作為一種新的技術(shù),為未來網(wǎng)絡(luò)的發(fā)展注入了新的活力,很多傳統(tǒng)交換芯片無法實現(xiàn)或難以實現(xiàn)的功能和應(yīng)用可通過可編程交換芯片快速得到實現(xiàn),極大提升了轉(zhuǎn)發(fā)面功能的迭代更新,加速網(wǎng)絡(luò)領(lǐng)域的創(chuàng)新。

猜你喜歡
掩碼哈希權(quán)值
一種融合時間權(quán)值和用戶行為序列的電影推薦模型
CONTENTS
低面積復(fù)雜度AES低熵掩碼方案的研究
基于布爾異或掩碼轉(zhuǎn)算術(shù)加法掩碼的安全設(shè)計*
基于權(quán)值動量的RBM加速學(xué)習(xí)算法研究
基于維度分解的哈希多維快速流分類算法
基于掩碼的區(qū)域增長相位解纏方法
基于掩碼的AES算法抗二階DPA攻擊方法研究
基于同態(tài)哈希函數(shù)的云數(shù)據(jù)完整性驗證算法
一種基于Bigram二級哈希的中文索引結(jié)構(gòu)
文安县| 顺昌县| 旺苍县| 恩平市| 慈溪市| 德清县| 乃东县| 宁安市| 大竹县| 保定市| 淅川县| 堆龙德庆县| 遂宁市| 丁青县| 隆尧县| 额济纳旗| 湖北省| 耒阳市| 广昌县| 平阴县| 滨海县| 宁河县| 宝坻区| 攀枝花市| 盐池县| 社旗县| 三河市| 江陵县| 汽车| 云霄县| 巩留县| 桂东县| 甘泉县| 广灵县| 宁都县| 博乐市| 呼玛县| 青田县| 龙泉市| 武乡县| 中卫市|