调用 sched_setscheduler 时使用什么优先级

调用 sched_setscheduler 时使用什么优先级

我正在编写一个服务器,我不希望它被任何其他用户进程或“低优先级”内核进程抢占。我使用的代码如下:

struct sched_param sched_param;
memset(&sched_param, 0, sizeof(sched_param));
sched_param.sched_priority = SOME_PRIORITY;

if(-1 == sched_setscheduler(0, SCHED_FIFO, &sched_param)) {
  // ...

我的问题是,当我将 SOME_PRIORITY 设置为 99(最大值)时,似乎甚至调度程序进程也挨饿了,我的系统很快就变得无法使用(服务器进程的核心有一个 busywait 循环——我无法控制这个方面,它是一个第三方库)。

所以我的问题是,我可以使用 SOME_PRIORITY 的什么值来仅允许调度程序(以及可能的一小部分内核服务)抢占?

相关内容