前面一篇講了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,包含實現各種...