CIR,CBS,EBS,PIR,PBS傻傻分不清楚?看這裏!----揭祕令牌桶算法
概述安全
春暖花開的時候,你們都開着汽車外出旅遊欣賞美麗的風景,卻被堵在高速公路上,你是否爲此感到痛苦?但若是有一種機制能夠評估高速公路上的車流量、控制車流狀況,確保進入高速公路的汽車都能在路上安全暢行,你是否是會以爲很開心?網絡
與此類似,網絡發生擁塞的時候,也是一件很是痛苦的事情,如圖1和圖2所示。ide
圖1 網絡擁塞場景1spa
圖2 網絡擁塞場景2orm
若是不限制用戶發送的業務流量大小,大量不斷突發的業務數據會使網絡更加擁擠,嚴重時會出現網絡擁塞,形成業務出現異常,同時也浪費網絡資源,如圖3和圖4所示。接口
圖3 網絡擁塞形成資源浪費隊列
圖4 網絡擁塞引發業務異常ci
那麼,你是否很期待有一種機制能夠在網絡上經過監督進入網絡的流量速率,以達到限制流量、提升網絡資源使用效率的目的,從而保證有限的網絡資源提供更好的網絡服務?資源
流量評估
爲了達到上述目的,咱們須要對進入網絡的流量進行監督,實現CAR(Committed Access Rate)。
CAR:將進入網絡的用戶流量的速率限制在約定的範圍以內,從而避免引發網絡擁塞。
要實現CAR,就須要對流量進行評估,而後根據評估的結果對流量採起相應的動做:
l 若是流量沒有超速,設備會爲報文獎勵綠牌(將報文染色爲綠色)。報文可暢通無阻,即被轉發。
l 若是流量稍微超速,設備會發出黃牌警告(將報文染色爲×××)。一般報文會被降級,即修改報文的內部優先級,而後進行盡力而爲的轉發。
l 若是流量超速太多,設備會發出紅牌將報文罰下(將報文染色爲紅色)。報文被禁止通行,即丟棄。
然而,報文不像汽車那樣能夠經過測速儀之類的儀器進行測速。那麼,如何對報文的速率進行評估呢?——答案在這裏:令牌桶。
令牌桶能夠看做是一個存放令牌的容器,預先設定必定的容量。系統按給定的速度向桶中放置令牌,當桶中令牌滿時,多餘的令牌溢出。令牌桶是一種流量測量方法。
不得不說的令牌桶
接着上面高速公路的例子,假設進入高速公路的車輛須要在入口處領取到通行卡才能進入高速公路。爲了節約人力成本,入口處放置自動出卡機。按照國家高速公路交通安全法的規定,在高速公路上行駛的車輛,車速超過100km/h時,應與同車道前車保持100米以上距離。爲了保持最小安全行車距離100米,按車速100km/h計算,須要間隔至少3.6秒才能放行一輛車,所以出卡機每隔3.6秒出一張通行卡。在自動出卡機下放置一個盒子,自動出卡機按照3.6秒的間隔向盒子中投放通行卡。每輛進入高速公路的車輛,從盒子中領取通行卡以後才能夠進入高速公路。
令牌桶算法與此相似。簡單來講,令牌桶能夠看做是一個存放必定數量令牌的容器。系統按設定的速度向桶中放置令牌。當桶中令牌滿時,多出的令牌溢出,桶中令牌再也不增長。在使用令牌桶對流量規格進行評估時,是以令牌桶中的令牌數量是否足夠知足報文的轉發爲依據的。每一個須要被轉發的報文,都要從令牌桶中領取必定數量的令牌(具體數量視報文大小而定),才能夠被正常轉發。若是桶中存在足夠的令牌能夠用來轉發報文,稱流量遵照或符合約定值,不然稱爲不符合或超標。
按照系統向令牌桶投放令牌的速率和令牌桶的數量劃分,令牌桶算法有三種模式:
l 單速單桶
l 單速雙桶
l 雙速雙桶
下面咱們以色盲模式爲例詳細介紹這三種模式。
單速單桶
假設有一套自動出卡系統,包括一臺自動出卡機和一個盒子C。自動出卡機以固定的速率(3.6秒出一張通行卡)向盒子中投放通行卡。這個固定的速率,就至關因而單速單桶模式中的CIR參數。
CIR(Committed Information Rate):承諾信息速率,表示向C桶(單桶模式中只有一個令牌桶,稱爲C桶)中投放令牌的速率,即C桶容許傳輸或轉發報文的平均速率。
若是平均每3.6秒來了不止1輛車,通行卡很快就領完了。這時自動出卡機上的紅燈亮起,新到的車輛禁止進入高速公路。這就起到了限定做用,將放行車輛的速率限制在放卡速率範圍內。
若是平均每3.6秒來了不到1輛車,盒子裏就會有一些積累起來的通行卡。這些累積起來的通行卡能夠應付車隊(好比車友俱樂部的車隊)要進入高速公路這樣的狀況。咱們規定每輛車都要領取通行卡,都由領隊的車領取。
假設某時刻來了一個車隊共8輛車,但盒子裏只有6張通行卡,領隊車拿起通行卡一數,發現不夠,那麼這個車隊不容許進入高速,通行卡放回盒子中。
盒子中的通行卡不停累積,總有盒子裝滿的時候。這個盒子的容積,就至關於單速單桶模式中的CBS參數。
CBS(Committed Burst Size):承諾突發尺寸,表示C桶的容量,即C桶瞬間可以經過的承諾突發流量。至關於盛放通行卡的盒子裏最多能夠放多少張通行卡,也就是說,該自動出卡系統容許經過的車隊中最多能夠有多少輛車。
在單速單桶模式中,系統按照CIR速率向C桶中投放令牌。
l 若是可用令牌的總數量(Tc)小於CBS,則令牌數繼續增長。
l 若是令牌桶已滿,則令牌數再也不增長。
對於到達的報文(報文大小爲B),
l 若是B ≤ Tc,報文被標記爲綠色,且Tc減小B。
l 若是B > Tc,報文被標記爲紅色,Tc不減小。
假設設備端口的CIR設置爲1Mbit/s,CBS爲2000bytes,初始狀態時C桶滿。
說明:爲方便計算,此處1Mbit/s按1*106bit/s計算。
l 假設第1個到達的報文是1500bytes時,檢查C桶發現令牌數大於數據包的長度,因此數據包被標爲綠色,C桶減小令牌1500bytes,還剩500bytes。
l 假設1ms以後到達第2個報文1500bytes。在此間隔內,C桶新增令牌 = CIR * 1ms = 1000bit = 125bytes,加上C桶原來剩餘的令牌500bytes,此時C桶共有625bytes。令牌數量不夠,報文標記爲紅色。
l 假設又過1ms後到達第3個報文1000bytes。在此間隔內,C桶新增令牌125bytes,加上C桶原來剩餘的令牌625bytes,此時C桶共有750bytes。令牌數量不夠,所以報文被標記爲紅色。
l 假設又過20ms後到達第4個報文1500bytes。在此間隔內,C桶新增令牌 = CIR * 20ms = 20000bit = 2500bytes,加上C桶原來剩餘的令牌750bytes,C桶此時令牌數爲3250bytes。而CBS = 2000bytes,所以溢出1250bytes令牌被丟棄。此時C桶令牌數大於報文長度,報文標記爲綠色,C桶減小令牌1500bytes,剩500bytes。
報文處理過程彙總見下表。
包序號 |
時刻 (ms) |
包長 (bytes) |
與上次添加令牌的間隔 |
本輪增長令牌 |
令牌增長後C桶令牌 |
報文處理後C桶剩餘令牌 |
報文標記結果 |
2000 |
2000 |
- |
|||||
1 |
0 |
1500 |
0 |
0 |
2000 |
500 |
綠色 |
2 |
1 |
1500 |
1 |
125 |
625 |
625 |
紅色 |
3 |
2 |
1000 |
1 |
125 |
750 |
750 |
紅色 |
4 |
22 |
1500 |
20 |
2500 |
2000 |
500 |
綠色 |
單速雙桶
在單速單桶模式中說到,若是平均每3.6秒來了不到1輛車,盒子裏就會有一些積累起來的通行卡。若是一直沒有車輛過來,盒子中的通行卡不停地累積。盒子的容量是有限的,當盒子中裝滿通行卡以後,不斷投放的通行卡就溢出盒子,會形成浪費。
爲了不這種浪費,咱們改進了這個自動出卡系統,在原來的基礎上增長一個盒子E(改進後的系統對應單速雙桶模式,盒子E對應單速雙桶中的E桶)。自動出卡機首先向C盒中投放通行卡。當C盒滿了,自動出卡機就向E盒中投放通行卡。
爲了保證通行卡有序領取,咱們規定先領取C盒中的通行卡。若是C盒中的通行卡不夠用,就把卡放回C盒,再從E盒中從新領取通行卡。C盒和E盒中的通行卡不能同時取用。
按照通行卡的取用,能夠分爲三種狀況:
l 若是C盒中的通行卡夠用,綠燈亮,車輛領取C盒中的通行卡後通行。
l 若是C盒中的通行卡不夠用但E盒中的通行卡夠用,黃燈亮,從C盒中領取的通行卡領取的通行卡要歸還,車輛領取E盒中的通訊卡後通行。
l 若是E盒中的通行卡也不夠用,紅燈亮,車輛禁止通行,從E盒中領取的通行卡領取通行卡要歸還。
和單速單桶模式同樣,對於車隊,有幾輛車,就領取幾張通行卡。固然,E盒的容量也是有限的。E盒的容量就至關於單速雙桶模式中的EBS。
EBS(Excess Burst Size):超額突發尺寸,表示E桶的容量,即E桶瞬間可以經過的超出突發流量。
假設某時刻來了一個車隊有8輛車,但C盒裏只有5張通行卡,而E盒中有9張通行卡,那麼黃燈亮起,這輛長車從E盒中領取8張通行卡。
在單速雙桶模式中,系統按照CIR速率向桶中投放令牌。
l 若是C桶中可用令牌的總數量(Tc)小於CBS,則C桶中令牌數增長。
l 若是Tc等於CBS且E桶中的可用令牌總數量(Te)小於EBS,則C桶中令牌數不增長,E桶中令牌數增長。
l 若是C桶和E桶中的令牌都已滿,則兩個桶中的令牌數都再也不增長。
對於到達的報文(報文大小爲B),
l 若是B ≤ Tc,報文被標記爲綠色,且Tc減小B。
l 若是Tc < B ≤ Te,報文被標記爲×××,且Te減小B,Tc不減小。
l 若是B > Te,報文被標記爲紅色,且Tc和Te都不減小。
假設設備端口的CIR設置爲1Mbit/s,CBS爲2000bytes,EBS爲2000bytes,初始狀態時C桶和E桶滿。
說明:爲方便計算,此處1Mbit/s按1*106bit/s計算。
l 假設第1個到達的報文是1500bytes時,檢查C桶發現令牌數大於數據包的長度,因此數據包被標爲綠色,C桶減小令牌1500bytes,還剩500bytes,E桶令牌數量保持不變。
l 假設1ms以後到達第2個報文1500bytes。在此間隔內,C桶新增令牌 = CIR * 1ms = 1000bit = 125bytes,加上C桶原來剩餘的令牌500bytes,此時C桶共有625bytes,檢查發現C桶內令牌數量不夠。檢查E桶發現有足夠令牌,所以報文標記爲×××,E桶減小令牌1500bytes,剩餘500bytes,C桶剩餘625byte保持不變。
l 假設又過1ms後到達第3個報文1000bytes。在此間隔內,C桶新增令牌125bytes,加上C桶原來剩餘的令牌625bytes,此時C桶共有750bytes,檢查發現C桶內令牌數量不夠。檢查E桶發現令牌數量也不夠,所以報文被標記爲紅色,C桶、E桶令牌數不變。
l 假設又過20ms後到達第4個報文1500bytes。在此間隔內,C桶新增令牌 = CIR * 20ms = 20000bit = 2500bytes,加上C桶原來剩餘的令牌750bytes,C桶此時令牌數爲3250bytes。而CBS = 2000bytes,所以溢出的1250bytes添加到E桶,此時E桶有1750bytes。因爲C桶中令牌數大於報文長度,報文標記爲綠色,C桶減小令牌1500bytes,剩餘500bytes,E桶不變。
報文處理過程彙總見下表。
包序號 |
時刻 (ms) |
包長 (bytes) |
與上次添加令牌的間隔 |
本輪增長令牌 |
令牌增長後各桶令牌 |
報文處理後各桶剩餘令牌 |
報文標記結果 |
||
C桶 |
E桶 |
C桶 |
E桶 |
||||||
2000 |
2000 |
2000 |
2000 |
- |
|||||
1 |
0 |
1500 |
0 |
0 |
2000 |
2000 |
500 |
2000 |
綠色 |
2 |
1 |
1500 |
1 |
125 |
625 |
2000 |
625 |
500 |
××× |
3 |
2 |
1000 |
1 |
125 |
750 |
500 |
750 |
500 |
紅色 |
4 |
22 |
1500 |
20 |
2500 |
2000 |
1750 |
500 |
1750 |
綠色 |
雙速雙桶
前面說到的自動出卡機,都只有一個口能夠輸出通行卡。而這裏說到的高級自動出卡機,有兩個口能夠出卡,一個口輸出的是通行卡,一個口輸出的是服務卡。固然,這裏也有兩個盒子用於盛放卡,分別是盒C盒和P盒。自動出卡機上的兩個口分別以各自固定的速率向兩個盒子中投放卡。(這個高級自動出卡機系統對應雙速雙桶模式,C盒和P盒對應雙速雙桶模式中的C桶和P桶。)
領取卡的規則和前面單速的狀況有所不一樣。咱們規定:
l 先領取服務卡。若是服務卡不夠,把卡放回P盒,紅燈亮,車輛禁止通行。
l 若是服務卡足夠但通行卡不夠,黃燈亮,服務卡能夠取走,通行卡放回C盒。
l 若是服務卡和通行卡都足夠,綠燈亮,車輛能夠通行,服務卡和通行卡都取走。
自動出卡機向P盒投放服務卡的速率和P盒的容量,就分別至關於雙速雙桶模式中的PIR和PBS。
PIR(Peak information rate):峯值信息速率,表示向P桶中投放令牌的速率,即P桶容許傳輸或轉發報文的峯值速率。PIR的值應大於CIR(存在服務卡足夠而通行卡不夠的狀況)。
PBS(Peak Burst Size):峯值突發尺寸,表示P桶的容量,即P桶瞬間可以經過的峯值突發流量。
按照國家高速公路交通安全法的規定,在高速公路上行駛的車輛,最高時速爲120km/h。前面領取的通行卡,保證車輛的時速爲100km/h。而服務卡的做用,則是容許車輛時速能夠達到120km/h。自動出卡機向P盒投放服務卡的速率就是容許的最高車速,至關於PIR。
在雙速雙桶模式中,系統按照PIR速率向P桶中投放令牌,按照CIR速率向C桶中投放令牌。
l 若是P桶中可用令牌的總數量(Tp)小於PBS,則P桶中令牌數增長。
l 若是C桶中可用令牌的總數量(Tc)小於CBS,則C桶中令牌數增長。
對於到達的報文(報文大小爲B),
l 若是Tp < B,報文被標記爲紅色,且Tc和Tp都不減小。
l 若是Tc < B ≤ Tp,報文被標記爲×××,且Tp減小B,Tc不減小。
l 若是B ≤ Tc,報文被標記爲綠色,且Tp和Tc都減小B。
假設設備端口的CIR設置爲1Mbit/s,PIR設置爲2Mbit/s,CBS爲2000 bytes,PBS爲3000 bytes,初始狀態時C桶和P桶滿。
說明:爲方便計算,此處1Mbit/s按1*106bit/s計算。
l 第1個到達的報文假設是1500bytes時,檢查發現報文長度不超過P桶也不超過C桶,因此數據包被標爲綠色,C桶和P桶都減小令牌1500bytes,C桶還剩500bytes,P桶還剩1500bytes。
l 假設1ms後到達第2個報文1800bytes。在此間隔內,P桶新增令牌 = PIR * 1ms = 2000bit = 250bytes,加上P桶原來剩餘的令牌1500bytes,此時P桶共有1750bytes,小於報文長度。C桶新增令牌 = CIR * 1ms = 1000bit = 125bytes,加上C桶原來剩餘的令牌500bytes,此時C桶共有625bytes。報文標記爲紅色,P桶、C桶令牌數不變。
l 假設又過1ms後到達第3個報文1000bytes。在此間隔內,P桶新增令牌250byte,加上P桶原來剩餘的令牌1750byte,此時P桶共有令牌2000bytes,大於報文長度。再檢查C桶,C桶新增令牌250bytes,加上C桶原來剩餘的令牌625byte,此時C桶共有750bytes,仍然小於報文長度。所以報文被標記爲×××,P桶減小令牌1000bytes,剩餘1000bytes,C桶令牌不變。
l 假設又過20ms以後到達報文1500bytes。在此間隔內,P桶新增令牌 = PIR * 20ms = 40000bit = 5000bytes,超過P桶容量PBS,所以P桶令牌數 = PBS =3000bytes,溢出的令牌丟棄。這樣P桶有2000bytes,大於報文長度。此時C桶增長令牌 = CIR * 20ms = 20000bit = 2500bytes,超過C桶容量CBS,所以C桶令牌數 = CBS =2000byte,溢出的令牌丟棄。C桶此時令牌數2000 bytes,大於報文長度。報文被標記爲綠色,P桶減小令牌1500bytes,剩餘1500bytes;C桶減小令牌1500bytes,剩餘500bytes。
報文處理過程彙總見下表。
包序號 |
時刻 (ms) |
包長 (bytes) |
與上次添加令牌的間隔 |
本輪增長令牌 |
令牌增長後各桶令牌 |
報文處理後各桶剩餘令牌 |
報文標記結果 |
|||
C桶 |
P桶 |
C桶 |
P桶 |
C桶 |
P桶 |
|||||
2000 |
3000 |
2000 |
3000 |
- |
||||||
1 |
0 |
1500 |
0 |
0 |
0 |
2000 |
3000 |
500 |
1500 |
綠色 |
2 |
1 |
1800 |
1 |
125 |
250 |
625 |
1750 |
625 |
1750 |
紅色 |
3 |
2 |
1000 |
1 |
125 |
250 |
750 |
2000 |
750 |
1000 |
××× |
4 |
22 |
1500 |
20 |
2500 |
5000 |
2000 |
3000 |
500 |
1500 |
綠色 |
三種令牌桶模式的區別和應用場景
由前文描述能夠看出,三種令牌桶模式之間既有區別也有演進關係,具體見下表。
單速單桶 |
單速雙桶 |
雙速雙桶 |
|
關鍵參數 |
CIR和CBS |
CIR、CBS和EBS |
CIR、CBS、PIR和PBS |
令牌投放 |
以CIR速率向C桶投放令牌。C桶滿時令牌溢出。 |
C桶滿時令牌投放到E桶。C桶和E桶都不滿時,只向C桶投放令牌。 |
以CIR速率向C桶投放令牌,以PIR速率向P桶中投放令牌。兩個桶相對獨立。桶中令牌滿時令牌溢出。 |
是否容許流量突發 |
不容許流量突發。報文的處理以C桶中是否有足夠令牌爲依據。 |
容許報文尺寸的突發。先使用C桶中的令牌,C桶中令牌數量不夠時,使用E桶中的令牌。 |
容許報文速率的突發。C桶和P桶中的令牌足夠時,兩個桶中的令牌都使用。C桶中令牌不夠時,只使用P桶中的令牌。 |
報文顏色標記結果 |
綠色或紅色 |
綠色、×××或紅色 |
綠色、×××或紅色 |
演進關係 |
單速雙桶模式中,若是EBS等於0,其效果和單速單桶是同樣的。 雙速雙桶模式中,若是PIR等於CIR,其效果和單速單桶是同樣的 |
基於上述三種令牌桶模式之間的區別,其功能和使用場景也有所不一樣,具體見下表。
令牌桶模式 |
功能 |
選用場景 |
單速單桶 |
限制帶寬 |
優先級較低的業務(如企業外網HTTP流量),對於超過額度的流量直接丟棄保證其餘業務,不考慮突發。 |
單速雙桶 |
限制帶寬,還能夠允許一部分流量突發,而且能夠區分突發業務和正常業務 |
較爲重要的業務,允許有突發的業務(如企業郵件數據),對於突發流量有寬容。 |
雙速雙桶 |
限制帶寬,能夠進行流量帶寬劃分,能夠區別帶寬小於CIR仍是在CIR ~PIR之間 |
重要業務,能夠更好的監控流量的突發程度,對流量分析起到指導做用。 |
參數設置有講究
在令牌桶算法中,CIR的值越大,即令牌產生的速率越大,報文能夠獲取的令牌就越多,流向網絡的流量也就越大。所以,CIR的值是控制流入網絡中流量多少的關鍵。CBS也是一個重要參數。CBS的值越大,C桶中能夠積累令牌的數目也越多,容許經過的報文尺寸就越大。
因爲設備進行的是逐包轉發,CBS的值不該該小於當前網絡上容許傳輸的報文的最大長度。
例如,在單速單桶模式下,假設要把流量限定在10Mbit/s,而CBS值過小(如設置成1000byte)。若是某個時間段內流量的報文,每一個報文大小都大於1000byte,那麼這些報文全都被丟棄。這段時間內,沒有報文被轉發,報文的轉發速率爲0,致使網絡資源被浪費,業務也出現異常。
那是否是CBS的值越大就越好呢?顯然不是。CBS值太大,會失去限速的意義。例如,假設要把流量限定在10Mbit/s,CBS設置成7200Mbyte。某個時刻,令牌桶中的令牌已滿,若是接下來1小時內流量的報文,其報文長度不一,但共計7200Mbyte,這些報文都能得到令牌並被轉發,那麼這段時間內的報文速率爲16Mbit/s(7200M * 8 / 3600)而不是10Mbit/s,即沒有實現限速。
同理,對於雙速雙桶模式,PIR和PBS的值也應設置在合理範圍內。
說明:目前華爲以太網交換機只支持單速單桶和雙速雙桶模式。
簡單來講,帶寬參數的設置取決於實際業務的限速須要。原則上,令牌桶容量須要大於等於網絡中可能出現的最大的報的長度和業務流量的正常突發量。對於華爲的以太網交換機,咱們有總結的經驗性公式:
l 帶寬 ≤ 100Mbit/s時,令牌桶容量(Bytes) = 帶寬(kbit/s) * 1000(s)/8
l 帶寬 > 100Mbit/s時,令牌桶容量(Bytes) = 100000(kbit/s) * 1000 (s)/8
另外,華爲的以太網交換機,不一樣系列的單板支持的CAR粒度不一樣。在進行流量監管和限速時,
l 若是配置的CIR、PIR是最小粒度的整數倍,則按照配置的速率進行監管和限速。
l 若是配置的CIR、PIR不是最小粒度的整數倍,則按照最小粒度的整數倍進行流量監管和限速。
例如,設備上的監管和限速粒度爲64kbit/s,若是CIR值 ≤ 64kbit/s,按照64kbit/s處理;若是128kbit/s < CIR值 ≤ 192kbit/s,按照192kbit/s處理。
令牌桶原理應用之接口限速
令牌桶原理能夠應用到設備的入方向和出方向。根據令牌桶原理在不一樣方向的應用,能夠實現不一樣的功能,見下圖。
流量監管、流量×××、接口限速與令牌桶算法之間的關係,見下表。
應用方向 |
單速單桶 |
雙速雙桶 |
設備入方向 |
基於接口,實現接口限速 |
基於流,實現流量監管 |
設備出方向 |
基於接口,實現接口限速 |
基於隊列,實現流量××× |
流量監管是一種經過對流量規格進行監督,以限制流量及網絡資源使用的流控策略。若是這種流控策略應用到設備接口的入方向,也能夠實現入方向的接口限速。與基於接口實現的入方向的接口限速相比,這種方式引入了MQC(Modular QoS Command-Line Interface),所以應用更加靈活。
一般咱們所說的限速是廣義上的接口限速,包括基於接口和基於MQC實現的入方向的接口限速。