- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
这是来自 sched_setscheduler(2) - Linux 手册页:
“根据其中一项实时策略(SCHED_FIFO、SCHED_RR)安排的进程的 sched_priority 值在 1(低)到 99(高)范围内。”
“SCHED_FIFO 进程一直运行,直到被 I/O 请求阻塞、被更高优先级的进程抢占或调用 sched_yield(2)。”
我有以下代码:
struct sched_param sp;
memset( &sp, 0, sizeof(sp) );
sp.sched_priority = 99;
sched_setscheduler( 0, SCHED_FIFO, &sp );
现在进程应该在最高优先级(99)下运行并且永远不应该被抢占。
因此,当它开始运行以下循环时:
while ( 1 ) ;
它应该永远运行并且不允许其他进程运行。
尽管如此,当我启动这样一个进程时,我也可以使用其他进程。其他进程运行得慢得多,但它们确实运行。
我的处理器有 2 个内核,所以我启动了两个进程副本。两个核心的使用率跃升至 97%-100%。两个进程都在运行它们的无限循环。
我仍然可以在 shell 中键入命令并观察它们的输出。我也可以使用 GUI 程序。
这怎么可能,因为优先级为 99 的 SCHED_FIFO 进程永远不应该被抢占?
最佳答案
如果您没有更改任何其他策略设置,那么您可能会受到限制。参见 this informative article关于几年前添加到调度程序的实时限制。
它的要点是:非特权用户可以使用 SCHED_FIFO
并尝试浸泡 CPU,但是 RT 限制代码无论如何都会强制一点点 SCHED_OTHER
所以你不楔入系统。来自文章:
Kernels shipped since 2.6.25 have set the rt_bandwidth value for the default group to be 0.95 out of every 1.0 seconds. In other words, the group scheduler is configured, by default, to reserve 5% of the CPU for non-SCHED_FIFO tasks.
关于linux - 优先级为 99 的 SCHED_FIFO 进程被抢占?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20722615/
我正在 Linux RT 多核机器上测试我的多线程应用程序。 但是在测试过程中,我们观察到 Linux RT 中的调度(使用 SCHED_FIFO 调度策略创建)并未按照 SCHED_FIFO 策略进
我有两个线程,线程 1 和线程 2。我先创建thread1,然后创建thread2。但是thread2是先调度的。我想在线程 2 之前安排线程 1。我将线程 1 的策略更改为 SCHED_FIFO,将
根据我在搜索过程中了解到的情况,FIFO 任务需要阻塞或自愿放弃,以便释放 CPU 并允许其他任务在该 CPU 上运行。我不能确定的是 3 个具体情况: 1) 优先级为 99 的(可运行的)FIFO
Linux 中采用 SCHED_FIFO 策略的线程的默认优先级是多少?范围为 0-99。 最佳答案 根据Red Hat Enterprise MRG 1.3Realtime Reference Gu
我想用 RR 调度创建 3 个线程。在每个线程中我将创建例如5 个线程,采用 FIFO 调度。 我知道3个线程有指定的处理时间。在此期间,其他 5 个线程应以“RR”调度运行。在这段时间之后,其他 2
我编写了一个创建 pthread 并为 pthread 设置 SCHED_FIFO 策略的小程序。代码如下: int main(int argc, char *argv[]){ ... p
SCHED_FIFO 和 SCHED_RR 都是为实时使用而设计的。我知道 SCHED_RR 可以被时间片抢占。但是如果我有一个线程设置为 SCHED_FIFO,另一个设置为 SCHED_RR,如果两
我在主线程中创建了两个线程ThreadA和ThreadB,并且三个线程具有相同的优先级。调用顺序是ThreadA在ThreadB前面(我看不懂)。 但是,当增加主线程优先级时,调用顺序是ThreadB
这是来自 sched_setscheduler(2) - Linux 手册页: “根据其中一项实时策略(SCHED_FIFO、SCHED_RR)安排的进程的 sched_priority 值在 1(低
谁能解释一下 SCHED_OTHER、SCHED_FIFO 和 SCHED_RR 之间的区别? 谢谢 最佳答案 SCHED_FIFO 和 SCHED_RR 是所谓的“实时”策略。它们实现了 POSIX
我正在为我的操作系统类做一些 Linux CFS 分析,并且有一个我无法解释的观察结果。 对于两个在其他方面完全相同的进程,当它们使用 SCHED_OTHER 策略执行时,与使用 SCHED_FIFO
我正在为我的操作系统类做一些 Linux CFS 分析,并且有一个我无法解释的观察结果。 对于两个在其他方面完全相同的进程,当它们使用 SCHED_OTHER 策略执行时,与使用 SCHED_FIFO
我正在通过切换 GPIO 线并在示波器上观察波形来试验一些抖动定时测试。我的内核是用 PREEMPT_RT 编译的。我希望将进程的调度程序更改为 SCHED_FIFO 会减少抖动,但似乎并没有太大的不
我正在 Raspberry Pi 上运行一个 python 程序,我想将其设置为 SCHED_FIFO 或 SCHED_RR 优先级。我在网上找到了一些使用 C/C++ 执行此操作的人的信息,代码如下
我已经编写了一个测试程序来测试 SCHED_FIFO。我了解到 SCHED_FIFO 不能被 SCHED_OTHER 线程抢占。但是我无法解释多次运行同一个程序时获得的结果。 /* Includes
我想让一个实时进程接管我的电脑。 :) 我一直在玩这个。我创建了一个本质上是 while (1) 的进程(从不阻塞或产生处理器)并使用 schedtool 以 SCHED_FIFO 策略运行它(也试过
我正在试验 SCHED_FIFO,我看到了一些意外行为。我使用的服务器有 12 个内核,禁用了超线程。所有可配置的中断都已设置为在 CPU 0 上运行。 我的程序开始使用 pthreads 库为较低优
我正在编写一个非常小的守护进程,即使在系统承受巨大压力时它也必须保持响应。我正在研究 SCHED_FIFO 和 SCHED_RR 在调度方面的差异,并试图确定一个合理的优先级。 哪种调度程序适合小型但
TL;DR 在多处理器/多核引擎上,可以在多个执行单元上调度多个 RT SCHED_FIFO 线程。因此优先级为 60 的线程和优先级为 40 的线程可以同时在 2 个不同的内核上运行。 这可能是违反
想知道这里是否有消息灵通的 Linux 专家可以回答我的问题。我一直在为我的 OS 类做统计分析,其中调度程序对 CPU 和 IO 绑定(bind)进程更有效/有效。我无法解释从 GNU 时间得到的一
我是一名优秀的程序员,十分优秀!