我是靠谱客的博主 欣喜黄蜂,最近开发中收集的这篇文章主要介绍linux hrtimer 绑定cpu,多核cpu(SMP)如何使能一个高精度定时器(Hrtimer),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

高精度定时器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)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部