简短答案

简短答案

运行时top,我可以看到这个(缩短的)示例输出:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 4586 ipc-adm+  20   0 1303900 605152  92844 S  30,6 29,3   3:52.88 firefox
 3985 ipc-adm+  20   0  258588 124508  63072 S  12,2  6,0   0:40.04 compiz
 3092 root      20   0  172392  56164  25980 S   6,1  2,7   0:30.13 Xorg

我感兴趣的有两个值:(PR优先级)和NI(友善度)。

如果我理解正确的话,两者都决定了一个进程相对于其他进程将获得多少 CPU 时间。但是这些值之间有什么区别呢?

您能否描述一下如何操纵流程的这些值,以及在什么情况下这可能有用?

答案1

Nice 值是用户空间的,优先级 PR 是 Linux 内核使用的进程的实际优先级。在 Linux 系统中,优先级为 0 到 139,其中 0 到 99 为实时优先级,100 到 139 为用户优先级。nice 值范围为 -20 到 +19,其中 -20 为最高,0 为默认值,+19 为最低。nice 值和优先级之间的关系为:

PR = 20 + NI

因此,的值为PR = 20 + (-20 to +19)0 到 39,将 100 映射到 139。

根据顶级手册:

PR——优先级 任务的调度优先级。如果您在此字段中看到“rt”,则表示该任务在“实时”调度优先级下运行。

NI 是任务的良好值。

NI——Nice 值 任务的 Nice 值。负 Nice 值表示优先级较高,而正 Nice 值表示优先级较低。此字段为零仅表示在确定任务的调度能力时不会调整优先级

编辑:默认情况下,在 Linux 中启动程序时,其优先级为“0”。但是,您可以通过以下任一方法更改程序的优先级。

  1. 您可以使用以下方式启动具有所需优先级的程序

    nice -n nice_value program_name
    
  2. 您还可以使用以下方法更改已运行进程的优先级

    renice -n nice_value -p process_id
    

答案2

什么是优先级?为什么我应该关心?

谈到进程时,优先级就是管理处理器时间。处理器或 CPU 就像一个人同时处理多个任务。有时我们有足够的空间来处理多个项目。有时我们一次只能专注于一件事。其他时候,一些重要的事情突然出现,我们想把所有的精力都投入到解决这个问题上,而把不太重要的任务放在次要位置。

在 Linux 中,我们可以为 CPU 设置准则,让其在查看所有必须执行的任务时遵循这些准则。这些准则称为精细度或精细值。Linux 精细度等级从 -20 到 19。数值越低,任务的优先级越高。如果精细度值较高(如 19),则任务的优先级将设置为最低,并且 CPU 会在有机会时处理该任务。默认精细值为零。

通过使用此比例,我们可以更合理地分配 CPU 资源。可以将不重要的低优先级程序设置为更高的 nice 值,而将守护程序和服务等高优先级程序设置为获得更多 CPU 关注。您甚至可以为特定用户的所有进程赋予较低的 nice 值,这样您就可以限制它们减慢计算机核心服务的速度。

来源

使用 设置新进程的优先级nice,例如

nice -n 10 firefox

对于现有流程

renice 10 -p $(pgrep firefox)

<0要设置您需要的优先级sudo,例如:

renice -1 -p $(pgrep firefox)
renice: failed to set priority for 2769 (process ID): Permission denied

但不是优先考虑>=0


例子

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox          19   0

% renice 10 -p 2769     # note, we don't need sudo here
2769 (process ID) old priority 0, new priority 10

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox           9  10

% sudo renice -19 -p 2769                    
 2769 (process ID) old priority 10, new priority -19

% ps -o pid,comm,pri,nice -p $(pgrep firefox)
  PID COMMAND         PRI  NI
 2769 firefox          38 -19

其他例子

为特定用户重新安排所有正在运行的进程的优先级

renice 20 -u user_name

答案3

简短答案

PR 是优先级别。PR 越低,进程的优先级越高。

PR 的计算方法如下:

  • 对于正常过程:PR = 20 + NI(NI 很好,范围从 -20 到 19)
  • 对于实时进程:PR = - 1 - real_time_priority (real_time_priority 范围从 1 到 99)

长答案

有两种类型的过程,普通的个和即时的

对于正常的(并且只针对正常的),nice 的应用如下:

好的

“优先级”范围从 -20 到 19,其中 -20 为最高优先级,19 为最低优先级。优先级计算如下:

PR = 20 + NI

其中 NI 是良好级别,PR 是优先级。因此,我们可以看到,-20 实际上映射到 0,而 19 映射到 39。

默认情况下,程序的 nice 值为 0,但 root 用户可以使用以下命令启动具有指定 nice 值的程序:

nice -n <nice_value> ./myProgram 

即时的

我们还可以更进一步。nice 优先级实际上用于用户程序。UNIX/LINUX 总体优先级的范围为 140 个值,而 nice 值使进程能够映射到范围的最后部分(从 100 到 139)。此等式使 0 到 99 之间的值无法达到,这将对应于负 PR 级别(从 -100 到 -1)。为了能够访问这些值,应将进程声明为“实时”。

LINUX环境中有5种调度策略,可以用以下命令显示:

chrt -m 

将显示以下列表:

1. SCHED_OTHER   the standard round-robin time-sharing policy
2. SCHED_BATCH   for "batch" style execution of processes
3. SCHED_IDLE    for running very low priority background jobs.
4. SCHED_FIFO    a first-in, first-out policy
5. SCHED_RR      a round-robin policy

调度进程可以分为两组,普通调度策略(1 至 3)和实时调度策略(4 和 5)。实时进程始终优先于普通进程。可以使用以下命令调用实时进程(示例是如何声明 SCHED_RR 策略):

chrt --rr <priority between 1-99> ./myProgram

为了获得实时过程的 PR 值,应用以下公式:

PR = -1 - rt_prior

其中rt_prior对应于 1 至 99 之间的优先级。因此,优先级高于其他进程的进程将是编号为 99 的进程。

值得注意的是,对于实时进程来说,nice 值不被使用。

要查看进程当前的“niceness”和 PR 值,可以执行以下命令:

top

显示以下输出:

顶部截图

图中显示了 PR 和 NI 值。值得注意的是,PR 值为 -51 的进程对应于实时值。还有一些进程的 PR 值表示为“rt”。该值实际上对应于 PR 值 -100。

相关内容