前言
解釋
- table:表,規則的集合
- small table、subtable:子表、小表,被分割後的表
- large table:原始表,待分割的表
- largest table:大表,規則數最多的表
- table size:表中規則的數量,表的大小
- bits:位,匹配符或數據包頭中的字符位
一句話總結
將原始規則表分割成均等的C個子表,(其中圖中最短路徑的長度是C的上界)然後使用彩虹路徑方法將子表放入交換機中,保證每條路徑上都要有所有的子表。
- decompose:如何分割使子表均等,且子表規則數最少→子表數最多,還要考略分割的質量(子表的大小是問題的關鍵)
- distribute:不同的拓撲圖路徑,如何考慮C,如何放入
一、Decomposition Rules
How to decompose a large table that contains all rules into a predetermined number of smaller tables.
將原始表分割成規定數量的子表。其中子表的大小應該近似均等。
- 定義每一個子表都代表一種顏色(color)
- 分割要滿足兩點:
- Order-oblivious訪問子表可以無序性(?);
- Semantically-invariant子表不會改變原始表的語義
- 有些規則不能分配,即表中的一些規則必須在指定的switch中(如r.p是講packet發到指定的switch端口),是不安全的
- 默認這裏表中的規則都是安全的,可以被分配的
- 兩種類型的規則:
- 默認規則(default rule):所有位都是*(通配符),優先級最低,用於如果沒有匹配到其他規則,
默認轉發到下一跳switch,執行默認動作。分解時忽視默認規則。 - 非默認規則(non-default rules):普通的規則
- 默認規則(default rule):所有位都是*(通配符),優先級最低,用於如果沒有匹配到其他規則,
如何具體分割表?
——>兩個分割方法:
- Pivot Bit Decomposition(PBD):基於軸點的分割
- Cut-Based Decomposition(CBD):基於切割的分解
PBD
迭代地,每次通過合適的軸點將表分割成兩個子表。直到①達到指定的c個子表,或者②子表的規則數沒有減少(即並沒有比分割前的表少)結束迭代。
- 注意這裏一次迭代會分割成兩個子表。兩個規則中最多的那個子表是最大子表。
——>什麼是軸點(pivot)?
- 指的是那些規則的位(bit)上是*的位點(e.g.如規則1*0,第二個位是軸點,規則可以被分解成100和110。)
- 注意一個規則上可以有多個軸點,即可以被分解成多個規則(e.g.一個規則有P個軸點,則可以被分解成2
P 中新規則。表同理。) - 可知不同的一些軸點,可能會得到不同的子表。所有子表的結果由待分表和軸點共同決定
——>如何選擇合適的軸點(bit)以滿足我們的目標?
目標:Our goal is to greedily minimize the maximum table size among all the small tables.
目標:最小化每個switch中最大子表的規則數量,來最大化子表(colors)的總量。
- 每次都選擇最大的表開始分解
- 分解軸點的選擇:首先依次遍歷該表中的所有bit[i,0-6]位(i代表第幾列,軸點),其實就是依次橫向預分解得到估計的最大子表(即兩個表中規則數最多的那個做代表),最後從所有最大子表中選擇規則數最少的那個作爲最少最大子表→得到相應的軸點i→得到相應的可分解規則R。以實現目標——子表規則數最少(理解:最大子表的規則數都是最少的了,還有神馬子表不是呢)
- 每次迭代根據PBD分割的兩個子表的規則數會大致相等
- 軸點(pivot)公式:
- 若得到的最少最大子表規則沒有減少,則拒絕該表的分割,跳到下一個表
——>例子1:
- 各bit[i,0-6]上的最大子表規則數分別爲:6、5、6、6 、6、 6
- Rule ϕ
2 has * in bit 1,and therefore it is duplicated to rule ϕ′2 = 001***0 and ϕ′′2 = 011***0. - first sub-table:ϕ
1 , ϕ′2 , ϕ6 and ϕ7 - second sub-table: ϕ′′
2 , ϕ3 , ϕ4 , ϕ5 and ϕ7
——> 證明
- 引理一:如果一個packet(h)在原始表中可以匹配一個非默認規則時→那麼在PBD中,h也可以匹配的非默認規則只在一個子表中,其他所有子表匹配非默認規則(證明略,沒看懂)
引理二:如果一個packet(h)在原始表中匹配的是默認規則時→那麼在PBD中,h可以匹配所有子表的默認規則
定理一:PBD可以保持原始表的語義,不管子表的被訪問順序
——>缺陷
- 若表規則數c不是2的整數倍數,會導致子表的規則數不均等了(?)
解決:取最大整數p,使p滿足p2 < c。一個子表取p2 ,另一個子表取c - p2 個 - 可能會出現最大子表規則數不理想,是理論上的c倍(定理二)
證明:假設有一個原始表(N個規則)如下:
01111
10111
11011
11101
11110
按照1到c-1bits分割成c個子表
結果:c-1個一個規則的子表,剩下一個最大子表規則數爲N-c+1(理想情況下:子表規則數N/c)
倍數約爲:(N-c+1)/(N/c)≈ c,N足夠大
CBD
根據**直接依賴圖**分割規則 ![這裏寫圖片描述](https://img-blog.csdn.net/20170312112937978?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzQ4MDU4MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ——>這裏的依賴關係如何定義的? 首先邊代表規則的依賴關係- 高→低
- u → v
- 這裏的依賴關係用|C
u, v |表示
規則依賴公式|C
(理解:規則依賴即規則的重疊部分,這裏C指的是低級規則對高級規則包含的通配符個數。依賴成本指的是若分割後需要添加的新節點(規則)的個數,注意與規則緩存中依賴成本是被依賴的規則數相區別。其實依賴本質上是一致的,只是量化的方式不一樣:規則緩存是一起放入依賴規則;規則放置是將依賴規則放入多個交換機,需要分割)
各邊上的權重(weight)代表分割這條邊的成本:w(u, v)= |C
——>分割的原理
通過消除兩規則之間的依賴關係來分割邊
for each bit i in C
我們將重寫|C
定理三: Using the above-mentioned edge breaking and node expansion operations, CBD can exactly emulate PBD.
CBD方法事PBD方法的擴展。
在PBD中,沒有packet可以都匹配兩個子表中的不同規則。CBD也同理。
——>如何分割呢?
目標:
步驟:迭代地進行,每次迭代的步驟
- 我首先 使用METIS 劃分(partition)出大小均爲c的子圖(子表),要使邊的權重最小化
- 根據劃分的質量(是否超過參數權重w
0 )來選擇:若超過。則expand one of the rules, and then go to the next iteration(?);若沒有超過,則結束分割所有的依賴邊(cut-edges,分割原理如上) - (?這部分沒有看懂,需要了解METIS算法)
二、RAINBOW PATH PROBLEM
how to spread the subtables in the network?
——>怎樣將分割的子表放到網絡中?
second subproblem is to ensure that each packet traverses all the types of small tables (i.e. all colors), so that the resulting setting would be semantically equivalent to a single lookup in the large table.
——>要使每個packet可以遍歷到所有的子表(colors)
each path must contain all c colors.
——>就相當於每個路徑(path)都必須要有所有的c個子表(colors)
定義一:the (G, P, c) RAINBOW PATH PROBLEM
將上述問題歸納成彩虹路徑問題,即是否存在一個方案γ:使每條路徑都能放入所有的子表。
- G:一個給定的網絡拓撲圖 G =(V, E)
- P:流的路徑集(path)P = {p
1 , … , pf }。其中 S(pi ) 代表路徑中的switch,L(pi )代表路徑中的鏈路 - c:分割後子表(colors)的數量
目標:我們的目標是最大化子表的數量(上一章已經介紹:通過最小化子表的大小來最大化子表數量)
——>怎麼判斷方案γ是否存在?
結合定義一和目標,子表(colors)的數量最多不能超過最短那條路徑(path)的容量。
如何具體判斷?我們將問題劃分爲下一節的幾點具體分析
The Rainbow Path Coloring
- The Rainbow Path Coloring in Trees 我們將網絡拓撲看作一顆無環樹(數據中心)
- single-source tree 單源樹:所有路徑都是從同一個節點出發
- general tree 一般情況的樹
- The Rainbow Path Coloring in General Graphs
- An Optimal Solver
- MULTICOLORED SWITCHES
下面具體分析各種情況下的方案γ(以下的分析是基於自己的理解得到的,如有錯誤之處請指正)
- (x,y)是set P上的最短路徑
- s是最短路徑的容量大小
1.single-source tree
單源樹:所有路徑都是從同一個節點x出發
可得定理五:
- a valid color assignment γ with s+1 colors
- 最短路徑P是通過對網絡拓撲圖BFS(廣度優先遍歷)得到的,時間複雜度O (m + n)
- 證明略,參考上圖a
2.general tree
一般情況下的樹。path的起始點x不再確定,→即(x,y)不一定在樹的一條分支上,→(x,y)可能有一部分有其他的path 共用。
可得定理六:
- a valid color assignment with ⌈ s/2 + 1⌉ colors
- 時間複雜度O (m + n)
- 證明(簡單理解,見上圖b):
- 首先 d(y′, x) = d(x, y) + d(y, y′) ,因爲樹是無環的
- ⌈ s/2 + 1⌉是怎麼得到的?p1, p2 將p分爲兩個path,假設p1的長度大於p2,可得 |S(p1)| ≥ ⌈ s/2 + 1⌉。即p只能在其中一部分放最多 ⌈ s/2 + 1⌉個規則
3.The Rainbow Path Coloring in General
一般情況下,網絡拓撲是複雜的圖。
思路: At each iteration, which corresponds to a new color, GREEDY continuously picks uncolored nodes one by one, until each path contains at least one of the picked nodes in this iteration.
在每次迭代中,我們總選擇那些①佔有最多路徑的(理解爲最重要的交匯點,貪心思想)②所在路徑還有未被顏色c染色的節點v(switch),用顏色c進行染色(即將子表放入switch中),直到每條路徑都染上了顏色c,然後進行下一次迭代。若發現某條路徑上節點都已被染色完,即顏色c染不上了,則終止迭代,方案失敗。
- 注,第一次迭代總會成功的
我們將算法分爲兩類:
- 1-GREEDY 每次只能選一個節點,滿足上面①②要求
- 定理七:時間複雜度O (n
2 *f)= f · ((n − 1) + (n − 2) + … + 1) - n是圖中的節點數(switch),f是路徑數 。
- 定理七:時間複雜度O (n
- q-GREEDY 每次可以選q個節點,其中至少要有一個節點滿足①要求(②是默認滿足的)
- 定理八:時間複雜度O ( n
q + 1 · f)
- 定理八:時間複雜度O ( n
——>僞代碼
- 3-16 第一個while循環是迭代操作,每次迭代使所有路徑都要染上顏色c,否則迭代失敗
- 6-16 第二個while循環是在迭代中,找到滿足條件①②的節點,進行染色。然後接着找下一個節點。時間t=((n − 1) + (n − 2) + … + 1)
——>例子2
當q=1時,γ(V1,V2,V4)=1
(1)V=V1,V2,V4,V3;P'=P=P1,P2,P3;V'=∅;
①Vº=V1
Pº=P1,P2
V=V/Vº=V2,V4,V3;V'=V1;P'=P3
②Vº=V2
Pº=P1,P3
V=V/Vº=V4,V3;V'=V1,V2;P'=∅
(2)V=V4,V3;P'=P=P1,P2,P3;V'=∅;
①Vº=V4
Pº=P2,P3
V=V/Vº=V3;V'=V1,V2,V4;P'=P1
②在V中找不到路徑集P'上的節點——>Vº=∅→迭代失敗
當q=2時,γ(V1,V2,V3,V4)=2
(1)V=V1,V2,V4,V3;P'=P=P1,P2,P3;V'=∅;
①Vº=V2,V3 //V3不是最大的
Pº=P1,P2,P3
V=V/Vº=V1,V4;V'=V2,V3;P'=∅
(2)V=V1,V4;P'=P=P1,P2,P3;V'=∅;
①Vº=V1,V4
Pº=P1,P2,P3
V=V/Vº=∅;V'=V1,V2,V3,V4;P'=∅
4.An Optimal Solver
動態規劃的思想
5.MULTICOLORED SWITCHES
在一個switch中可以分配多個 colors
有三點好處:
- 有利於大容量的switch
- 增加分配子表的靈活度
- ratio=switch中的子表/總的子表數
- 適用於短的路徑非常短,長路徑非常長的情況。
- 如果用 (G, P, c) 彩虹路徑的方法,爲了適應最短路徑→只能有較少數量的子表→導致子表非常大→不能充分利用長路徑的容量
定義二:(G, P, c, d)RAINBOW PATH PROBLEM
- 其中d表示每個switch裏能放最多d個colors
例子3
- 若是單節點的彩虹路徑,每個節點只能放一個相同顏色的color
- 若是多節點的彩虹路徑,則c=2。γ(V1) = {1, 2} ; γ(V2) ={2, 3} ; γ(V3) = {3, 1}。