【问题标题】:Detect deadline thread preemption检测截止时间线程抢占
【发布时间】:2016-05-02 07:20:30
【问题描述】:

我正在使用SCHED_DEADLINE 调度策略实现一个线程,这是我的高优先级线程,另一个使用SCHED_FIFO 策略,这是我的低优先级线程。 例如,我将我的截止日期线程定义如下:

attr.sched_runtime = 0.5 * 1000000;   // --> 0.5 ms
attr.sched_deadline = 0.6 * 1000000;  // --> 0.6 ms
attr.sched_period = 1 * 1000000;      // --> 1 ms

在正常情况下,我的高优先级线程的处理时间不应超过 0.5 毫秒,而在这段时间里它应该有时间完成其任务。

如果任务持续时间超过 0.5 毫秒,OS 调度程序将抢占我的高优先级线程,为我的低优先级线程腾出时间。这是我之前测试过的一种行为。

我的问题是:如何警告我的高优先级线程已被系统抢占?

【问题讨论】:

  • 如果线程被抢占,它将进入等待重新调度,你是什么意思“可以被警告”,你希望它接收信号什么的?
  • 首先我想知道它是否可能。任何机制都会很好,“信号或其他东西”。
  • 这没有意义,因为在线程的cpu时间关闭的时候,它不会在任何cpu上运行,更不用说处理信号了。
  • 线程在处理时间结束时不会收到信号或其他任何东西 - 但可能在线程恢复后接收信息是可以的?
  • 但也许当线程恢复时?在实时环境中,当一个线程无法完成其工作时,就会出现问题。当它醒来时,未完成的任务可能已经没有 sens 了。

标签: c linux pthreads sched-deadline


【解决方案1】:

目前,SCHED_DEADLINE API 不提供向任务发出信号表明它已被限制所需的功能。我们知道它可能是一个有用的功能,我们将考虑在下一个未来将其包含在内。

目前唯一的选择是检查时间以了解是否发生了节流。

更新:Linux 内核 4.16 将添加对 SCHED_DEADLINE 上的“运行时溢出”信号的支持。见here

【讨论】:

    猜你喜欢
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多