【问题标题】:How does linux kernel wake idle processor up when new task created?创建新任务时,linux内核如何唤醒空闲处理器?
【发布时间】:2013-02-10 02:43:11
【问题描述】:

我是 Linux 内核的新手。 目前,我查看了空闲代码并有一个问题。 当处理器在自己的运行队列中没有任何任务时,它可能 进入空闲模式,特定的 WFI(等待中断)。 (我提到的只是关于 ARM 架构而不是 X86。所以 X86 有问题。) 停留在 WFI 状态后,可能其他处理器(非空闲)想要传播 他们的任务是空闲处理器(通过负载平衡)。当时一个繁忙的处理器 使任务迁移。在我看来,迁移任务时,空闲处理器 应该立即唤醒以处理任务。正确的?然而,我找不到 任何唤醒空闲处理器的代码,但只找到关于将任务注册到空闲处理器的运行队列的代码。

我想知道在给定新任务时唤醒处理器背后的机制是什么。 或者它只是将任务从一个队列移动到另一个队列,而不是让它直到被唤醒 一些不可预测的IRQ?

请告诉我真相:)

【问题讨论】:

    标签: kernel arm scheduler irq


    【解决方案1】:

    WFI 是 ARM 的特殊协处理器指令。例如,

     ENTRY(cpu_arm946_do_idle)
             mcr     p15, 0, r0, c7, c0, 4           @ Wait for interrupt
             mov     pc, lr
    

    与 Linux 无关(直接)。

    如果没有工作要做,有一个特殊的idle 任务在 ARM 上运行 WFI 指令。 idle 任务是最低优先级的 Linux 任务,如果没有其他任务,就会被调度。如果WFIidle 完成,则某些驱动程序会在无工作时中断(可能是定时器)。 SMP情况下,如果还有其他进程可以迁移,就不会去idle;调度程序检查这一点。如果负载变高,那么繁忙的处理器需要wake 其他处理器;在带有中断的 ARM 的情况下。通常这种处理在 arch/arch/kernel/process.c 中。例如 x86default_idle()。我不知道 x86 的具体工作原理,但您可以查看源代码。

    对于您的问题新任务创建时linux内核如何唤醒空闲处理器?,答案是它不会。只有fork()(以及一些类似功能)可以创建新任务;最初来自init 任务,然后是其中一个孩子。如果您有 cron 作业,它将在转到 sleep/idle 之前安排一个计时器。此计时器将唤醒系统,重新安排cron,然后cron 将调用fork(),以创建新任务。

    其他相关机制有cpufreqcpuidlekernel/power

    真相总是客观/主观,当然不是全球。告诉我metric真相,我可以告诉你真相

    【讨论】:

      【解决方案2】:

      创建线程后只需像下面的代码一样设置 CPU 的标志。

       = > thread's task_struct->flags |= PF_WAKE_UP_IDLE;
      

      【讨论】:

      • 这是线程唤醒,不是CPU唤醒。 Linux 内核 3.18 及更高版本中不存在 PF_WAKE_UP_IDLE 标志。
      【解决方案3】:

      查看 select_task_rq_fair(),它是 CFS::select_task_rq() 方法。 这是调度程序唤醒空闲任务以重新平衡运行队列的最具代表性的情况。

      【讨论】:

        【解决方案4】:

        smp_send_reschedule() 将发送IPI_RESCHEDULE 到空闲的处理器。这将从wfi 唤醒它。它是从几个地方调用的,一个例子是wake_up_process -> try_to_wake_up -> try_to_wake_up -> ttwu_queue -> ttwu_queue_remote(来自内核 3.4 的函数名称)。

        【讨论】:

          猜你喜欢
          • 2020-03-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-06-17
          • 2017-04-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多