gpt4 book ai didi

linux - SCHED_FIFO 较高优先级线程是否被 SCHED_FIFO 较低优先级线程抢占?

转载 作者:太空宇宙 更新时间:2023-11-04 03:51:34 25 4
gpt4 key购买 nike

我正在 Linux RT 多核机器上测试我的多线程应用程序。

但是在测试过程中,我们观察到 Linux RT 中的调度(使用 SCHED_FIFO 调度策略创建)并未按照 SCHED_FIFO 策略进行。我们可以在多个地方看到较高优先级线程的执行被较低优先级线程抢占。

根据我们在互联网上所做的一些研究,我们发现以下内核参数需要更改

/proc/sys/kernel/sched_rt_period_us containing 1000000
/proc/sys/kernel/sched_rt_runtime_us containing 950000

/proc/sys/kernel/sched_rt_period_us containing 1000000
/proc/sys/kernel/sched_rt_runtime_us containing 1000000

/proc/sys/kernel/sched_rt_period_us containing -1
/proc/sys/kernel/sched_rt_runtime_us containing -1

我们尝试同时执行这两项操作,但有时仍然会遇到问题。即使更高优先级的线程没有被任何系统调用挂起,我们也会面临这个问题。

如果您知道 Linux RT 调度中的此类问题和/或有任何解决方案使 Linux RT 调度具有基于优先级的确定性,如果您能让我们知道,那就太好了。

较高优先级线程中没有 printfs 或任何系统调用,但较高优先级线程仍然被较低优先级线程抢占。

此外,我还使用任务集命令确保进程中的所有线程都在单个核心上运行。

最佳答案

可能有两个原因:

  • CPU 节流:调度程序旨在为非 RT 任务保留一些 CPU 时间;您已经通过对 /proc/sys/kernel/ 条目进行操作来禁用它
  • 阻塞:您的高优先级任务正在阻塞
    • 基于某种同步机制(例如互斥锁、信号量)或
    • 某些阻塞调用(例如 malloc、printf、read、write 等)

关于linux - SCHED_FIFO 较高优先级线程是否被 SCHED_FIFO 较低优先级线程抢占?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26142267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com