linux 多个周期,具有相同优先级的两个SCHED_FIFO任务是否在Linux中的每个周期内获得处理时间?(Do two SCHED_FIFO tasks with equal priority ...

具有相同优先级的两个SCHED_FIFO任务是否在Linux中的每个周期内获得处理时间?(Do two SCHED_FIFO tasks with equal priority get processing time within each period in Linux?)

具有相同优先级的两个SCHED_FIFO任务是否在Linux的每个周期内获得处理时间,并且在周期结束之前没有完成任务?

Linux文档说SCHED_FIFO进程只能被优先级较高的进程抢占,但我的理解是CFS在更高层运行,并为每个时段内的两个任务中的每一个分配时隙。

Do two SCHED_FIFO tasks with equal priority get processing time within each period in Linux, granted neither of the tasks finish before the period ends?

Linux documentation says SCHED_FIFO processes can get preempted only by processes with higher priority, but my understanding is that CFS operates on a higher layer, and assigns timeslots to each of the two tasks within each period.

原文:https://stackoverflow.com/questions/51223787

更新时间:2019-12-14 15:58

最满意答案

Linux文档说,SCHED_FIFO进程只能被优先级较高的进程抢占

这是正确的,除此之外,如果设置RLIMIT_RTTIME ( getrlimit(2) )并且达到该限制,它们也可以被抢占。

可以安排另一个SCHED_FIFO进程(具有相同优先级)的唯一其他原因是第一个休眠或者是否自愿收益 (自愿抢占)。

CFS与SCHED_FIFO无关,它只负责SCHED_NORMAL , SCHED_BATCH和SCHED_IDLE 。

Linux documentation says SCHED_FIFO processes can get preempted only by processes with higher priority

This is correct, in addition to this, they can also be preempted if you set RLIMIT_RTTIME (getrlimit(2)) and that limit is reached.

The only other reasons why another SCHED_FIFO process (with the same priority) can be scheduled is if the first sleeps or if it voluntary yields (voluntary preemption).

CFS has nothing to do with SCHED_FIFO, it only takes care of SCHED_NORMAL, SCHED_BATCH and SCHED_IDLE.

2018-07-07

相关问答

我做了一个实验来证明这一点,如下: process1:RT priority = 40,CPU affinity = CPU 0.这个进程“旋转”10秒,所以它不会让任何较低优先级的进程在CPU 0上运行。 process2:RT priority = 39,CPU affinity = CPU 0.此过程每0.5秒向stdout打印一条消息,睡在两者之间。 它打印出每个消息的消逝时间。 我正在运行带有PREEMPT_RT补丁的2.6.33内核。 要运行实验,我在一个窗口中以root身份运行pro

...

setuid root不起作用的事实是线索。 事实证明,上面的测试程序在安装有nosuid的分区中,因此setuid位没有任何影响。 如果你不信任分区中的setuid位,那么你可能也不应该相信文件功能。 事实上,事实证明,使用nosuid进行安装时,文件功能也会被忽略。 似乎加密的主目录通常会安装在nosuid 。 我离开这个问题的原因是,有很多搜索引擎命中“linux功能nosuid”,表明在这个问题上浪费了很多时间(但是当然你不知道在你有没有搜索它之前弄清楚了)。 The fact that

...

chrt命令设置/修改进程的静态优先级值。 对于SCHED_OTHER,唯一允许的静态优先级值为0,即。 -o选项必须后跟0.可以使用renice命令调整SCHED_OTHER过程的良好级别 The chrt command sets/modifies the static priority value of the process. For SCHED_OTHER, the only allowed static priority value is 0, ie. the -o option mu

...

所有这些sirq,irq,posixcputmr任务是什么? 内核线程? 是的,括号中的所有任务都是内核线程。 我应该优先运行我的软件? 正常RT为2-69,非常高优先级应用程序线程为90-98。 后者将阻止所有IRQ处理程序,因此尽可能少地执行高优先级。 资源 What are all these sirq, irq, posixcputmr tasks? Kernel threads? Yes, all the tasks in brackets are kernel threads. At

...

Linux文档说,SCHED_FIFO进程只能被优先级较高的进程抢占 这是正确的,除此之外,如果设置RLIMIT_RTTIME ( getrlimit(2) )并且达到该限制,它们也可以被抢占。 可以安排另一个SCHED_FIFO进程(具有相同优先级)的唯一其他原因是第一个休眠或者是否自愿收益 (自愿抢占)。 CFS与SCHED_FIFO无关,它只负责SCHED_NORMAL , SCHED_BATCH和SCHED_IDLE 。 Linux documentation says SCHED_FIF

...

你是否以root身份运行程序? 这些sysctl参数的值是什么? 这是我的Ubuntu盒子。 默认情况下,实时时间仅为1秒片中的0.95秒: kernel.sched_rt_period_us = 1000000

kernel.sched_rt_runtime_us = 950000

这可以防止实时域占用所有的CPU。 如果你想真正的实时,你必须禁用这些参数。 请参阅: http : //www.kernel.org/doc/Documentation/scheduler/sched-rt-gr

...

还有另一种我不知道的保护措施。 如果你只有一个处理器并想要这样的SCHED_FIFO进程(一个永远不会阻塞也不会自动生成处理器的进程)来独占它,除了给它一个高优先级(在大多数情况下不是必需的,但不会受到伤害)你有至: 将sched_rt_runtime_us设置为-1或sched_rt_period_us的值 如果已配置组调度,请将/cgroup/cpu.rt_runtime_us设置为-1 (如果您在/cgroup上安装cgroup文件系统) 显然,我已经配置了组调度,并没有绕过最后一次保护。

...

您可以使用一个简单的程序来测试这个,但是从各种手册页: sched_setaffinity : 通过fork(2)创建的子级继承其父级的CPU关联掩码。 关联掩码保留在execve(2)上。 pthread_create : 新线程继承调用线程的功能集(请参阅capabilities(7))和CPU亲和力掩码(请参阅sched_setaffinity(2))的副本。 sched_setscheduler : 子进程在fork(2)中继承调度策略和参数。 调度策略和参数在execve(2)中保留。

...

可以想象,CPU绑定的SCHED_FIFO实时进程不会为其他进程提供启动异步读取的机会。 而使用SCHED_OTHER更多进程启动异步读取,从而花费更少的总时间等待数据。 It is conceivable that CPU-bound SCHED_FIFO real-time processes don't give other processes a chance to initiate an asynchronous read. Whereas with SCHED_OTHER more p

...

不确定SCHED_FIFO如何影响您的传统服务器设计。 我的意思是使用accept返回的侦听套接字和套接字。 这个想法是,主要线程应该在侦听套接字上被阻塞,并且当接收到新连接时,它应该将accept返回的fd传递给新线程。 可以为所有新连接创建新线程,或者您可以使用线程池来限制它并更好地控制。 其他想法可能是使用一个调用fd上的select的线程,主线程可以监听并接受连接,主线程可以对新fd进行排队,并向正在等待select的线程发送通知(可能是使用信号或管道) 。 一旦收到数据,它就可以使用线程

...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值