处理’好’与’优先’

当运行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 (Niceness)。

如果我理解了我已经找到的正确内容,那么两者都会确定一个进程与其他进程相比会有多少CPU时间。 但那些价值观之间有什么区别呢?

您是否还可以描述如何操纵流程的这些值以及在哪些情况下这可能有用?

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

 PR = 20 + NI 

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

根据顶级手册:

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

NI是很好的任务价值。

NI – 很好的价值任务的好价值。 负好的值意味着更高的优先级,而正的好的值意味着更低的优先级。这个字段中的零只意味着在确定任务的调度能力时不会调整优先级

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

  1. 您可以使用所需的优先级启动程序

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

     renice -n nice_value -p process_id 

什么是优先权,我为什么要关心?

在谈论流程时,优先级就是管理处理器时间。 处理器或CPU就像人类同时处理多个任务一样。 有时我们可以有足够的空间来承担多个项目。 有时我们一次只关注一件事。 其他时候会出现一些重要的事情,我们希望将所有精力投入到解决问题的同时将不太重要的任务放在后面。

在Linux中,我们可以设置CPU在查看它必须执行的所有任务时遵循的准则。 这些指导方针称为良好或良好的价值。 Linux niceness scale从-20到19.数字越小,任务获得的优先级越高。 如果niceness值是高数字(如19),则任务将被设置为最低优先级,并且CPU将在有机会时处理它。 默认的nice值为零。

通过使用此比例,我们可以更适当地分配CPU资源。 可以将不重要的低优先级程序设置为更高的nice值,而可以将守护进程和服务等高优先级程序设置为接收更多CPU的焦点。 您甚至可以为特定用户提供他/她所有进程的较低值,这样您就可以限制他们减慢计算机核心服务速度的能力。

资源

设置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 

简答

PR是优先级。 PR越低,该过程的优先级越高。

PR的计算方法如下:

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

答案很长

有两种类型的进程, 正常进程和实时对于正常进程(仅适用于那些进程),nice应用如下:

尼斯

“niceness”标度从-20到19,而-20是最高优先级,19是最低优先级。 优先级计算如下:

PR = 20 + NI

NI是最好的水平,PR是优先级。 我们可以看到,-20实际上映射到0,而19映射到39。

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

 nice -n  ./myProgram 

即时的

我们可以走得更远。 优先级实际上用于用户程序。 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 

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

 chrt --rr  ./myProgram 

要获得实时过程的PR值,应用以下等式:

PR = -1 – rt_prior

其中rt_prior对应于1到99之间的优先级。因此,具有比其他进程更高优先级的进程将是使用数字99调用的进程。

重要的是要注意,对于实时进程,不使用nice值。

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

 top 

其中显示以下输出:

在此处输入图像描述

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

Interesting Posts