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

image

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。

image

看過前面 srTCM 的解說後,trTCM 的部分就很好搞懂了,主要的邏輯大概是:

  • 如果封包大小超過 PBS,則丟棄封包
  • 如果封包小於 PBS,但是大於 CBS,可以看情況選擇要不要繼續傳輸
  • 如果封包小於 PBS 以及 CBS,代表這個封包的大小低於兩個 Threshold。

使用 trTCM 去做流量控制能做到控制最大傳輸量以及保證最低的傳輸量,以 5G QoS model 來看的話就很適合用來做 GBR QoS Flow(CBS 為 GFBR、PBR 為 MBR)。

References