gpt4 book ai didi

linux - 优先级为 99 的 SCHED_FIFO 进程被抢占?

转载 作者:IT王子 更新时间:2023-10-29 01:05:01 31 4
gpt4 key购买 nike

这是来自 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/

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