gpt4 book ai didi

linux - Linux中哪个实时优先级最高

转载 作者:IT老高 更新时间:2023-10-28 12:31:48 31 4
gpt4 key购买 nike

在 Linux 实时进程优先级范围 1 到 99 中,我不清楚哪个是最高优先级,1 还是 99。

“了解 Linux 内核”(O'Reilly) 的第 7.2.2 节说 1 是最高优先级,考虑到普通进程的静态优先级从 100 到 139,这是有道理的,其中 100 是最高优先级:

"Every real-time process is associated with a real-time priority, which is a value ranging from 1 (highest priority) to 99 (lowest priority). "

另一方面,sched_setscheduler 手册页 (RHEL 6.1) 声称 99 是最高的:

"Processes scheduled under one of the real-time policies (SCHED_FIFO, SCHED_RR) have a sched_priority value in the range 1 (low) to 99 (high)."

哪个是最高实时优先级?

最佳答案

我做了一个实验来确定这一点,如下:

  • 进程 1:RT 优先级 = 40,CPU 亲和性 = CPU 0。此进程“旋转”10 秒,因此它不会让任何低优先级进程在 CPU 0 上运行。

  • process2:RT 优先级 = 39,CPU 亲和性 = CPU 0。此进程每 0.5 秒向 stdout 打印一条消息,在此之间休眠。它打印出每条消息的耗时。

我正在运行带有 PREEMPT_RT 补丁的 2.6.33 内核。

为了运行实验,我在一个窗口中(以 root 身份)运行 process2,然后在另一个窗口中启动 process1(以 root 身份)。结果是 process1 似乎抢占了 process2,不允许它运行整整 10 秒。

在第二个实验中,我将 process2 的 RT 优先级更改为 41。在这种情况下,process2 被 process1 抢占。

这个实验表明 sched_setscheduler() 中的 RT 优先级值更大具有更高的优先级。这似乎与 Michael Foukarakis 从 sched.h 中指出的相矛盾,但实际上并非如此。在 sched.c在内核源代码中,我们有:

static void
__setscheduler(struct rq *rq, struct task_struct *p, int policy, int prio)
{
BUG_ON(p->se.on_rq);

p->policy = policy;
p->rt_priority = prio;
p->normal_prio = normal_prio(p);
/* we are holding p->pi_lock already */
p->prio = rt_mutex_getprio(p);
if (rt_prio(p->prio))
p->sched_class = &rt_sched_class;
else
p->sched_class = &fair_sched_class;
set_load_weight(p);
}

rt_mutex_getprio(p) 执行以下操作:

return task->normal_prio;

而 normal_prio() 恰好做了以下事情:

prio = MAX_RT_PRIO-1 - p->rt_priority;  /* <===== notice! */
...
return prio;

换句话说,我们有(我自己的解释):

p->prio = p->normal_prio = MAX_RT_PRIO - 1 - p->rt_priority

哇!这令人困惑!总结一下:

  • 使用 p->prio,较小的值会抢占较大的值。

  • 使用 p->rt_priority,较大的值会抢占较小的值。这是使用 sched_setscheduler() 设置的实时优先级.

关于linux - Linux中哪个实时优先级最高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8887531/

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