Linux 可能的hrtimer初始化之间有什么区别?

Linux 可能的hrtimer初始化之间有什么区别?,linux,timer,linux-kernel,Linux,Timer,Linux Kernel,根据hrtimer.h,hrtimer_MODE_ABS表示时间值是绝对的,而hrtimer_MODE_REL表示时间值是相对于现在的 在hrtimer_init的上下文中使用时,还可以选择CLOCK_monotic或CLOCK_REALTIME。这意味着可以通过以下几种方式初始化hr计时器 hrtimer_init(&timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS); hrtimer_init(&timer, CLOCK_MONOTONIC,

根据hrtimer.h,hrtimer_MODE_ABS表示时间值是绝对的,而hrtimer_MODE_REL表示时间值是相对于现在的

在hrtimer_init的上下文中使用时,还可以选择CLOCK_monotic或CLOCK_REALTIME。这意味着可以通过以下几种方式初始化hr计时器

hrtimer_init(&timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
hrtimer_init(&timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);

hrtimer_init(&timer, CLOCK_REALTIME, HRTIMER_MODE_ABS);
hrtimer_init(&timer, CLOCK_REALTIME, HRTIMER_MODE_REL);
在检查hrtimer.c时,第四次初始化无效,因为如果初始化时模式不是hrtimer\u mode\u ABS,则时钟id被设置回时钟单调

if (clock_id == CLOCK_REALTIME && mode != HRTIMER_MODE_ABS)
        clock_id = CLOCK_MONOTONIC;
这就给我们留下了3种可能的行为。现在我知道时钟实时性受系统时间的影响,因此可能是不连续的,而时钟单调性则相反(即它总是向前滴答)

以下是我对可能行为的理解,但它们似乎太相似了,我不确定该选择哪一种

1)
hrtimer\u init(&timer,CLOCK\u单调,hrtimer\u MODE\u ABS)

时钟是连续的,时间总是在绝对时间N后过期。系统时间的变化不会影响时钟,因此不会影响过期时间

2)
hrtimer\u init(&timer,CLOCK\u单调,hrtimer\u MODE\u REL)

时钟是连续的,时间从现在起N次过期。系统时间的变化不会影响时钟,因此不会影响从“现在”起的到期时间

3)
hrtimer\u init(&timer,CLOCK\u REALTIME,hrtimer\u MODE\u ABS)

可以设置时钟,但对系统时钟的任何更改仍然不会影响到期,因为计时器设置为在绝对时间N时到期


我意识到我的解释可能是错误的,因为这些行为看起来都很相似。有人能解释这一点吗?

在第三种情况下(
hrtimer\u init(&timer,CLOCK\u REALTIME,hrtimer\u MODE\u ABS);
),启动计时器后对系统时钟的不规则调整会影响计时器到期前经过的实时量(以CPU周期或其他方式测量)。这是否意味着“所见”的绝对时间由于计时器对不连续性视而不见,因此hrtimer保持不变?这就是绝对到期的意思吗?我认为大多数时钟源都会受到轻微调整,但其中一些,如
clock\u monotic
clock\u BOOTTIME
只能向前推进<由于系统管理员或某些启动脚本更改了系统(挂钟)时间,code>CLOCK\u REALTIME
可能会向后跳转。如果是这样,则
CLOCK\u Monotic
HRTIMER\u MODE\u ABS
HRTIMER\u MODE\u REL
之间的实际区别是什么?