用例linux内核:在SMP系统中使核心空闲

时间:2017-09-16 18:18:48

标签: linux multithreading kernel smp

我最近有一项任务是在linux内核中实现一个用例。 由于一些保密信息,我无法解释所有细节,但我会尽力解释我们的目标,已知和不知道的目标。 我们有一个在smp机器上运行的Linux发行版。这就是我们对系统和流程的了解:

  • SMP系统,我们假设我们有8个核心
  • 每个核心必须处于空闲状态,例如,每50ms 15ms。空闲是指x86中的强制mwait状态。这适用于所有核心。因此,在50ms内,所有8个核心必须暂停15ms。在此期间,我们会考虑禁用IRQ。
  • 当然,当它阻止系统时,不可能立即关闭所有核心。
  • 我们可以按任意组合对核心进行分组,但是,这里的严格限制是核心的暂停时间不能在此时间间隔内部分重叠,它们只允许完全重叠,在这种情况下核心可以组成团体。
  • 约束延伸到以下事实:如果我们决定将核心拆分为2组(4 + 4),那么一组中的所有核心必须命中停止/ mwait,时间距离为100us的第一个和最后一个。为了更清楚,一组中第一个核心在达到停止/ mwait / wfi和最后一个核心之间所允许的时间间隔不应超过100us。
  • 我们需要一个实时优化的系统,但同时允许我们设计一个确定性系统(在可能的范围内),因此桌面配置不在讨论范围内。
  • 现在看起来我们不会带来内核RT补丁。我们希望HZ值至少为1000,将大多数线程固定到特定内核,防止或控制内核之间的线程迁移。
  • 目前尚不知道是否会启用抢占。
  • 15ms间隔可以在多个窗口中分割,最小时间允许1ms /窗口。

总结:必须强制SMP系统中的所有核心在一个窗口或多个窗口中停止15ms,每50ms一次。核心的关闭窗口可以完全重叠或根本不重叠。

这里的问题:

  • I / O中断:我们考虑在脱机运行核心之前迁移中断
  • 其他中断:像TLB flush或其他smp_call_function_* API的IPI:在这里我们不知道其影响。还有用于重新安排的IPI,主要通过负载平衡触发。由于大多数线程将绑定到核心,并且我们的线程将具有高RT优先级,我们假设重新安排后台线程不是问题(?)
  • 计时器:我们考虑迁移计时器
  • threads:拥有2个核心上每个线程的亲和力,每个组都有一个能够在需要时进行迁移。

我主要关注由于IRQ,线程,定时器等被阻止而导致的系统响应能力,并且我正在寻找如何实现用例的解决方案,对整个系统的影响很小。我们还考虑到在启用irqs的情况下保持cpus停止,这将提高响应速度,但也会影响我们的用例,这个用例很可能需要更复杂的设计。

到目前为止我尝试了什么:

  1. 使用了热插拔状态机。我实现了一段代码,它试图从调度程序中脱离cpu并将线程+中断+计时器迁移到其他核心。我在CPUHP_AP_IDLE_DEAD停止了状态机。从状态机中删除回调到cpu freq调控器后,我可以达到~10 ms的离线转换时间。然而,时间太长,很可能它不会被接受。可能是因为其他原因,hotplug功能不合适,所以我放弃了。
  2. 写了一个创建N个实时线程+ 1的模块,其中N是核心数。有一个带有prio MAX_USER_RT_PRIO-1的主管线程和所有其他线程(让它们称之为空闲线程)MAX_USER_RT_PRIO-2(在SCHED_FIFO上设置为sched_setscheduler)。核心数分为2组。由于15ms完全关闭cpu有点长时间,我将时间间隔分成5个时隙,每个时隙为3ms。所以我们有2组4 cpus应该每50毫秒运行5次空闲线程。主管线程会跟踪时间并为应该运行的组中的每个cpu调用wake_up_process。当一个组中的空闲线程完成时,它们会在struct cpumask中设置相应的标志以表示完成。
  3. 然而,我试图弄清楚的一个问题是如何强制映射到一个组中的核心的所有线程在同一时间内或多或少地达到停止/ mwait点(如上所述最大100us时间)在第1和最后之间)。从主管线程调用的wake_up_process导致~50us组中的2个连续线程之间的增量。这是不可接受的,对于4核我们到200us。 我必须提到当前内核我有4.9次运行,HZ = 1000且CONFIG_PREEMPT被禁用,因此,afaik,虽然我的空闲线程在RT调度程序中运行,只要CONFIG_PREEMPT被禁用,它们必须等待其他线程自愿放弃核心在CFS调度程序中运行,因此不会发生抢占。真正? 在这里,我关注的是如何确保cpu组中的所有线程同时启动,以使halt / mwait非常接近彼此。 我在下面尝试制作图形表示:

        Group1      Group2
       ____|___    ____|____
      /        \  /         \
      C0 C1 C2 C3 C4 C5 C6 C7
    
    -------------------------- TIME 0
      |  |  |  |               <- OFF time group 1
                   |  |  |  |  <- OFF time group 2
      |  |  |  |               ......
                   |  |  |  |
      |  |  |  |
                   |  |  |  |
      |  |  |  |
                   |  |  |  |
      |  |  |  |
                   |  |  |  |
    --------------------------- TIME 50ms
    

    我也在寻找有关如何实施这一概念的其他想法。

    我知道这里有很多文字,我希望我能够澄清用例。

    非常感谢任何帮助/想法。

    此致 丹尼尔。

0 个答案:

没有答案