DPDK的meter庫(雙速率三色演算法)

2021-10-24 00:26:51 字數 1617 閱讀 2551

前面一篇講了dpdk的單速率三色桶演算法,這篇解析一下雙速率三色桶。

流程和單速率完全相同,區別在於資料結構以及顏色判斷的邏輯上。仍然看色盲模式

相比於單速率模式,我感覺雙速率模式更好理解,有兩個桶c和p以及兩個令牌產生速率。兩個桶同時跟隨時間增加令牌數,超過容量則丟棄。報文速率如果介於cir和pir,超過cir部分的報文返回黃色,低於cir的返回綠色。

報文速率超過pir,所有超過pir部分的報文都返回紅色,介於cir和pir部門的返回黃色,低於cir的返回綠色

報文速率低於cir,所有的報文綠色~

struct rte_meter_trtcm ;

params:

,};初始化:

intrte_meter_trtcm_config(struct rte_meter_trtcm *m, struct rte_meter_trtcm_params *params)

if ((params->cir == 0) || (params->pir == 0) || (params->pir < params->cir) ||

(params->cbs == 0) || (params->pbs == 0))

/* initialize trtcm run-time structure */

hz = rte_get_tsc_hz();

m->time_tc = m->time_tp = rte_get_tsc_cycles();

m->tc = m->cbs = params->cbs;

m->tp = m->pbs = params->pbs;

rte_meter_get_tb_params(hz, params->cir, &m->cir_period, &m->cir_bytes_per_period);

rte_meter_get_tb_params(hz, params->pir, &m->pir_period, &m->pir_bytes_per_period);

rte_log(info, meter, "low level trtcm config: \n"

"\tcir period = %" priu64 ", cir bytes per period = %" priu64 "\n"

"\tpir period = %" priu64 ", pir bytes per period = %" priu64 "\n",

m->cir_period, m->cir_bytes_per_period,

m->pir_period, m->pir_bytes_per_period);

return 0;

}//顏色判斷函式。

static inline enum rte_meter_color

rte_meter_trtcm_color_blind_check(struct rte_meter_trtcm *m,

uint64_t time,

uint32_t pkt_len)

if (tc < pkt_len)

m->tc = tc - pkt_len;

m->tp = tp - pkt_len;

return e_rte_meter_green;

}

LeetCode 三數之和的多種可能(雙指標)

給定乙個整數陣列 a,以及乙個整數 target 作為目標值,返回滿足 i j k 且 a i a j a k target 的元組 i,j,k 的數量。由於結果會非常大,請返回 結果除以 10 9 7 的餘數。示例 1 輸入 a 1,1,2,2,3,3,4,4,5,5 target 8 輸出 20...

python中單 雙 三引號的區別

在 python中字串可以用單引號括起來,也可以用雙引號,這兩種方式是等價的,而在php當中單引號和雙引號的有些是不一樣的,雖然表示的字串,但是在php的單引號解析速度比雙引號快,如果在python用單號那麼在字串中就可以直接收寫雙引號了,反之亦然。這就是python為什麼允許用兩種方式的原因。在實...

線性表(三) 雙鏈表的自建演算法庫

all right resvered 檔名稱 雙鏈表的自建演算法庫.cpp 作 者 鄭兆涵 線性表 三 雙鏈表的自建演算法庫 問題 建立雙鏈表的自建演算法庫 標頭檔案 dlinklist.h,包含定義雙鏈表資料結構的 巨集定義 要實現演算法的函式的宣告 原始檔 linklist.cpp,包含實現各種...