有没有可能;“挂起”;一个带有SCHED_FIFO进程的Linux机箱?

有没有可能;“挂起”;一个带有SCHED_FIFO进程的Linux机箱?,linux,process,linux-kernel,scheduling,real-time,Linux,Process,Linux Kernel,Scheduling,Real Time,我想让一个实时进程接管我的计算机。:) 我一直在玩这个。我创建了一个进程,它本质上是一个,而(1)(从不阻塞或产生处理器),并使用schedtool使用SCHED_FIFO策略运行它(也尝试了chrt)。但是,该流程也允许其他流程运行 然后有人告诉我关于sched\u rt\u runtime\u us和sched\u rt\u period\u us。因此,我将运行时设置为-1,以使实时进程接管处理器(并尝试使两个值相同),但它也不起作用 我在Linux 2.6.27-16服务器上,在一个只有

我想让一个实时进程接管我的计算机。:)

我一直在玩这个。我创建了一个进程,它本质上是一个
,而(1)
(从不阻塞或产生处理器),并使用
schedtool
使用
SCHED_FIFO
策略运行它(也尝试了
chrt
)。但是,该流程也允许其他流程运行

然后有人告诉我关于
sched\u rt\u runtime\u us
sched\u rt\u period\u us
。因此,我将运行时设置为
-1
,以使实时进程接管处理器(并尝试使两个值相同),但它也不起作用

我在Linux 2.6.27-16服务器上,在一个只有一个CPU的虚拟机中。我做错了什么

谢谢


编辑:我不想要叉子炸弹。我只希望一个进程永远运行,而不让其他进程运行。

我不确定ScheduleTool,但如果您成功地使用sched_setscheduler将调度器更改为sched_FIFO,然后运行一个不阻塞的任务,那么一个核心将完全分配给该任务。如果这是唯一的核心,则不会运行任何SCHED_其他任务(即,除少数内核线程外的任何任务)

我自己也试过


因此,我推测要么是您的“非阻塞”任务被阻塞,要么是您的schedtool程序未能更改计划程序(或者为错误的任务更改了它)。

还有另一个我不知道的保护

如果您只有一个处理器,并且想要一个像这样的
SCHED_FIFO
进程(一个永远不会阻塞或自动产生处理器的进程)来垄断它,除了给它一个高优先级(在大多数情况下不是真的需要,但不会造成伤害)之外,您必须:

  • sched\u rt\u runtime\u us
    设置为
    -1
    或设置为
    sched\u rt\u period\u us
  • 如果您配置了组调度,请将
    /cgroup/cpu.rt\u runtime\u us
    设置为
    -1
    (在这种情况下 将cgroup文件系统装载到
    /cgroup
  • 显然,我已经配置了组调度,并没有绕过最后的保护

    如果您有
    N
    处理器,并且希望您的
    N
    进程独占处理器,您只需执行相同的操作,但从shell启动所有处理器(shell在启动最后一个处理器之前不应卡住,因为它将运行处理器)。如果您真的想确保每个进程将转到不同的处理器,请相应地设置其CPU相关性


    感谢大家的回复。

    此外,您还可以让您处理最高优先级为1的SCHED_FIFO。因此,这个过程将永远运行,不会被抢占。

    如果你的意思是“慢下来,崩溃”中的“挂起”,试试叉子炸弹。如果我对您的理解正确(并且您没有绑定到内核实现),那么fork-bomb将完全满足您的需要。我同意^fork-bomb将更有效地实现这一点。不,我不希望这样。我只想让一个进程永远运行,而不让其他进程运行。在某些情况下(特别是当您仅使用一个任务并拥有>1个核心时),这实际上是一种有用的技术。特别是,您是否以root身份运行
    chrt
    ?@caf:是的,我是。正如我刚才在回答中所说,问题不在于流程本身,也不在于
    schedtool
    chrt
    。还有一些我不知道的保护措施。谢谢。你也需要在同一个循环中有一些非常繁忙的等待循环,这样别人就没有机会跑了