DPVS时间轮移植
创始人
2024-03-02 08:58:20
DPDK自带的定时器采用跳表实现,时间复杂度是O(logn),当有大量事件要定时触发时,比如会话session老化,效率并不高。因此DPVS采用了O(1)复杂度的时间轮。

0. 概述

a. 添加定时器事件的核心是

static int __dpvs_timer_sched(struct timer_scheduler *sched,struct dpvs_timer *timer, struct timeval *delay,dpvs_timer_cb_t handler, void *arg, bool period)

b. rte_timer_tick_cb()中判断超时事件,调用timer_expire()执行事件注册的回调函数;

c. timer_expire()会判断事件是否循环执行,需要循环执行的,调用__dpvs_timer_sched()重新放回时间轮;

d. 一个事件的超时时间大于第一层的时间(DPVS_TIMER_HZ = 1000时,为524s),才会放到第二层,所以一般只用到第一层;

1. 定时器驱动

采用死循环,调用查询函数,判断是否达到时间轮的最小刻度,伪代码如下:

struct timer_scheduler *sched;
uint64_t next = 0;
uint64_t rounds = rte_get_timer_hz() / DPVS_TIMER_HZ; // 每秒的cpu圈数 / 每秒的次数 (DPVS_TIMER_HZ = 1000,rounds表示每毫秒的cpu圈数,定时器为毫秒级定时器)
for(;;) {uint64_t now;struct rte_timer *tim;now = rte_get_timer_cycles();if (now >= next) {rte_timer_tick_cb(tim, sched);next = now + rounds}
}

2. 添加定时器事件

int dpvs_timer_sched_nolock(struct dpvs_timer *timer, struct timeval *delay,dpvs_timer_cb_t handler, void *arg, bool global)
{struct timer_scheduler *sched = this_lcore_sched(global);int err;if (!sched || !timer || !delay || !handler|| delay->tv_sec >= TIMER_MAX_SECS)return EDPVS_INVAL;err = __dpvs_timer_sched(sched, timer, delay, handler, arg, false);return err;
}

3. 更新定时器事件

int dpvs_timer_update_nolock(struct dpvs_timer *timer, struct timeval *delay, bool global)
{struct timer_scheduler *sched = this_lcore_sched(global);int err;if (!sched || !timer || !delay)return EDPVS_INVAL;if (timer_pending(timer))list_del(&timer->list);err = __dpvs_timer_sched(sched, timer, delay,timer->handler, timer->priv, timer->is_period);return err;
}

4. 删除定时器事件

int dpvs_timer_cancel_nolock(struct dpvs_timer *timer, bool global)
{struct timer_scheduler *sched = this_lcore_sched(global);if (!sched || !timer)return EDPVS_INVAL;if (timer_pending(timer))list_del(&timer->list);return EDPVS_OK;
}

原文链接:https://zhuanlan.zhihu.com/p/366751595 

(免费订阅,永久学习)学习地址: Dpdk/网络协议栈/vpp/OvS/DDos/NFV/虚拟化/高性能专家-学习视频教程-腾讯课堂

更多DPDK相关学习资料有需要的可以自行报名学习,免费订阅,永久学习,或点击这里加qun免费
领取,关注我持续更新哦! ! 

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...