概述
高精度定时器hrtimer属于某个cpu的hrtimer_cpu_base,意思即他是与cpu绑定的。如果某个进程在另外的cpu上使能这个hrtimer,就需要改变这个hrtimer的cpu base了。这个很类似进程在cfs_rq之间的迁移,不过一个定时器占用的资源太少了,迁移起来相对容易。
这种设计思路,我认为是有些问题的。时间轴是唯一的,所有的定时器,只要是realtime/monotonic time,都可以挂在这个标尺上去维护。多核上定时器在cpu之间迁移,应该是为了其他mode的定时器考虑。最新的hrtimer增加了些clock base和timer mode,目前还不清楚这些背后的机理。
简单了解下使能一个高精度定时器的流程。
hrtimer_start()在当前cpu上使能一个hrtimer,它调用__hrtimer_start_range_ns()完成这个任务。
int __hrtimer_start_range_ns(struct hrtimer *timer, ktime_t tim,
unsigned long delta_ns, const enum hrtimer_mode mode,
int wakeup)
{
struct hrtimer_clock_base *base, *new_base;
unsigned long flags;
int ret, leftmost;
base = lock_hrtimer_base(timer, &flags);
/* Remove an active timer from the queue: */
ret = remove_hrtimer(timer, base);//先从当前红黑树摘下
/* Switch the timer base, if necessary:
最后
以上就是欣喜黄蜂为你收集整理的linux hrtimer 绑定cpu,多核cpu(SMP)如何使能一个高精度定时器(Hrtimer)的全部内容,希望文章能够帮你解决linux hrtimer 绑定cpu,多核cpu(SMP)如何使能一个高精度定时器(Hrtimer)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复