gpt4 book ai didi

c - Linux 实时调度优先级(SCHED_FIFO 和 SCHED_RR)的实际使用?

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

我正在试验 SCHED_FIFO,我看到了一些意外行为。我使用的服务器有 12 个内核,禁用了超线程。所有可配置的中断都已设置为在 CPU 0 上运行。

我的程序开始使用 pthreads 库为较低优先级任务创建一个线程,而不更改 CPU 亲和性设置为核心 0 的调度策略。然后父线程将其 CPU 亲和性设置为核心 3,并将其自己的调度策略设置为 SCHED_FIFO 使用 sched_setscheduler(),pid 为零,优先级为 1,然后开始运行非阻塞循环。

程序本身运行良好。但是,如果我在程序运行时尝试第二次登录服务器,终端将无响应,直到我停止我的程序。这就像调度程序试图在与实时进程相同的核心上运行其他进程。

  1. 我错过了什么?
  2. 调度程序是否仍会尝试在运行实时进程的核心上运行其他进程?如果是这样,是否有办法防止这种情况发生?
  3. 在父级中使用 sched_setscheduler() 设置调度策略是否会改变之前创建的子级的行为?

提前致谢。

最佳答案

sched_setscheduler 设置进程的调度程序,而不是线程。见:

http://pubs.opengroup.org/onlinepubs/9699919799/functions/sched_setscheduler.html

如果要为线程设置调度程序,则需要在创建新线程之前对属性对象使用 pthread_attr_setschedpolicypthread_attr_setschedparam 函数。

我不确定 Linux 在满足这些要求方面的一致性如何,但您至少应该首先确保您的代码符合规范,然后根据需要进行调整...

关于c - Linux 实时调度优先级(SCHED_FIFO 和 SCHED_RR)的实际使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10563106/

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