token bucket - ianchen0119/Introduce-to-5GC GitHub Wiki
本篇文章會介紹一些與流量控制有關的方式,分別是:
- Token Bucket
- srTCM (RFC2697)
- trTCM (RFC2698)
Token Bucket
Token Bucket 演算法是常用於 Rate Limiting 的演算法,我們可以藉由它來控制傳送至網路的封包數量,且接受突發的資料傳輸。
- 該演算法基於令牌桶中是否存在令牌來指示什麼時候可以傳送資料。
- 令牌桶中的每一個令牌都代表一個位元組。
- 如果令牌桶中存在令牌,則允許傳送流量,否則不允許傳送流量。
也就是說,如果突發的門檻被合理地配置並且令牌桶中有足夠的令牌,那麼 Data Flow 就可以以峰值速率被傳輸。
使用情境
假設我們希望每個資料流以每秒鐘 n 個位元組的速率進行傳輸,那麼我們也應該以每 1/n 秒的速度向桶內新增一個令牌。
- 如果桶子的令牌數已達到我們設置的上限,那新增的令牌應該被丟棄。
- 如果現在有 k 個位元的封包流需要進行傳輸,那麼我們應該把桶內的 k 個令牌去除。
- 如果桶內的令牌數不足 k 個,這筆資料流應該被限制。
這些被限制的資料流可以用以下的方式處理:
1. 直接丟棄
2. 放在 Waiting Queue 直到桶中有足夠的令牌
3. 照常傳輸,但這些資料流應該被標記,如果網路超載時應優先丟棄這筆資料流
srTCM (single rate three color marker)
在 srTCM 中有三個很重要的參數,分別是:
1. CIR (Committed Information Rate)
CIR 代表資料流的傳輸速率,也就是令牌桶填充令牌的速度(每隔 1/CIR 時間添加一個令牌)。
2. CBS (Committed Burst Size)
- 令牌數可以用 Tc 表示。
- CBS 為 C 桶的容量,每個單位都是一個 Byte 大小。
- C 桶就是正常的令牌桶。
3. EBS (Excess Burst Size)
- 令牌數可以用 Te 表示。
- EBS 為 E 桶的容量,每個單位一樣是一個 Byte 大小。
- E 桶可以用於突發狀況的資料傳輸,一般情況下,並不會有令牌被放入 E 桶,除非 C 桶已經達到最大上限。
color-aware
srTCM 為令牌的使用定義了三種顏色,分別是紅色、黃色與綠色,它們就跟我們生活中的交通號誌一樣,在發送資料包時扮演了重要的角色。 在 color-aware 的模式下,每個資料流會事先被標記,被標記的顏色有三種,對應的處理方式如下:
事先標記為綠色
如果資料流的大小小於 Tc,那麼這筆資料流可以被傳輸。
事先標記為黃色
如果資料流的大小大於 Tc 但是小於 Te,那麼這筆資料流仍可以被處理(當作突發狀態)。
事先標記為紅色
如果資料流的大小大於 Tc 與 Te,則該筆資料會直接被丟棄。
color-blind
color-blind 模式下會假設這些資料不被事先標記,而是透過資料的大小為其標記顏色。
- 如果資料流的大小小於 Tc,代表資料流可以被傳輸,所以標示為綠色。
- 如果資料流的大小大於 Tc 但是小於 Te,那麼這筆資料流應標示為黃色。
- 如果資料流的大小大於 Tc 與 Te,則該筆資料應標記為紅色。
這些被標記的資料流可以再依使用者定義的處理方法進行處理。
使用這個方法去實作流量控制的話可以為每一個 Flow 設定最大的傳輸上限制,以 5G QoS model 來看的話就很適合用來做 Non-GBR QoS Flow。
trTCM (two rate three color marker)
trTCM 定義了四個參數,其中兩項與 srTCM 一樣,分別是 CIR、CBS,剩下的為 PBS (Peak Burst Size) 與 PIR (Peak Information Rate)
- PIR 用來表示突發狀況下的傳輸峰值,所以它理所當然的要比 CIR 大。
- PBS 為允許的最大突發資訊尺寸,它的值同樣需要大於 CBS。
看過前面 srTCM 的解說後,trTCM 的部分就很好搞懂了,主要的邏輯大概是:
- 如果封包大小超過 PBS,則丟棄封包
- 如果封包小於 PBS,但是大於 CBS,可以看情況選擇要不要繼續傳輸
- 如果封包小於 PBS 以及 CBS,代表這個封包的大小低於兩個 Threshold。
使用 trTCM 去做流量控制能做到控制最大傳輸量以及保證最低的傳輸量,以 5G QoS model 來看的話就很適合用來做 GBR QoS Flow(CBS 為 GFBR、PBR 為 MBR)。