誉天教育,武汉誉天,誉天ICT认证培训.png/

Datapass

数通
当前位置:首页 > 誉天学堂 > 运维 > 懂技术,更精彩!Linux进程优先级概念

懂技术,更精彩!Linux进程优先级概念

  • 2023/09/04

前言

上一期为大家带来了进程的基础知识与ps命令的一些详细用法,这一期将会继续为大家分享更多的Linux进程知识。


在Linux中,进程优先级是指操作系统对进程进行调度和分配CPU时间的相对重要性或优先级的评估。进程优先级决定了进程在竞争CPU资源时的执行顺序。


1.png


在Linux中,进程优先级分为三类SYSTEM priority 系统进程优先级;real time priority 实时优先级,以及NICE非实时优先级。

  • 系统优先级的范围为0-139, 值越小,优先级越高;

  • 实时优先级范围为0-99,也被我们称为PR 值越大,优先级越高;

  • 非实时优先级范围为-20-19, 值越小,优先级越高;


对应关系如图所示:


640.png


2.png


  • nice优先级
    在系统资源匮乏时,nice值更高的进程可以获得更多的CPU资源。通过调整nice值,可以在系统负载高的情况下优化进程的执行顺序。NICE值默认为0,可手动进行调整。

  • 查看nice优先级


1. [root@YUTIAN ~]# ps -axo pid,comm,nice | head -n 10
2.  PID COMMAND   NI
3.  1 systemd   0
4.  2 kthreadd   0
5.


  • 修改进程优先级
    关于NICE优先级的修改,有两种情况,在进程未开始时直接指定优先级启动,其二是修改已经启动的进程优先级。nice命令一般需要具有root或超级用户权限才能修改其他用户的进程优先级。


此处以dd命令为例:

##在进程未开始时直接指定优先级启动
[root@YUTIAN ~]# nice -n 10 dd if=/dev/zero of=/dev/null &
[1] 5124
[root@YUTIAN ~]# ps -axo pid,comm,nice | head -n 1 ;ps -axo pid,comm,nice | grep -w dd | grep -v grep 
PID COMMAND   NI
5124 dd    10

##修改已经启动的进程优先级
[root@YUTIAN ~]# renice -n -10 5124
5124 (process ID) old priority 10, new priority -10
[root@YUTIAN ~]# ps -axo pid,comm,nice | head -n 1 ;ps -axo pid,comm,nice | grep -w dd | grep -v grep 
PID COMMAND   NI 
5124 dd    -10


  • 优先级案例

##CPU小知识:一个CPU在单一时间只能够运行1个进程

##系统情况:
RHEL 8.4 版本系统
2核CPU
##CPU情况: [root@YUTIAN ~]# mpstat -P ALL 
Linux 4.18.0-305.el8.x86_64 (YUTIAN.example.com) 05/29/2023 _x86_64_ (2 CPU)
10:47:52 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
10:47:52 AM all 2.65 0.04 8.83 0.42 1.18 0.59 0.00 0.00 0.00 86.29
10:47:52 AM 0 2.81 0.07 9.53 0.28 1.31 0.42 0.00 0.00 0.00 85.57
10:47:52 AM 1 2.49 0.02 8.13 0.56 1.04 0.77 0.00 0.00 0.00 87.01
##此时系统有两个CPU,并且CPU资源充足,创建进程来消耗CPU资源
##创建一个-20优先级的进程
[root@YUTIAN ~]# nice -n -20 md5sum /dev/zero &
[1] 1237

##创建一个-10优先级的进程
[root@YUTIAN ~]# nice -n -10 sha1sum /dev/zero &
[2] 1238

##此时CPU资源状况
[root@YUTIAN ~]# ps -e -o pid,nice,%cpu,comm | head -n1 ; ps -e -o pid,nice,%cpu,comm | grep sum | grep -v grep
PID NI %CPU COMMAND
1237 -20 92.1 md5sum
1238 -10 94.1 sha1sum

##由于无其他高优先级进程,故这两个进程拿到两个CPU的所有资源
##再创建一个-20优先级的进程
[root@YUTIAN ~]# nice -n -20 sha512sum /dev/zero &
[3] 1259

##此时CPU资源状况
[root@YUTIAN ~]# ps -e -o pid,nice,%cpu,comm | head -n1 ; ps -e -o pid,nice,%cpu,comm | grep sum | grep -v grepl
PID NI %CPU COMMAND
1237 -20 98.6 md5sum
1238 -10 16.2 sha1sum
1259 -20 90.0 sha512sum
##三个进程争抢两个CPU资源,两个-20高优先级进程得到等多资源,-10优先级进程仅得到少部分资源
##得出结论:
当系统资源匮乏时,优先级更高的进程得到更多的CPU资源


3.png


  • PR实时优先级
    在Linux中,PR(Priority)是进程的实时优先级,它用于实时调度策略下的进程调度。实时优先级是用来确保对实时任务的响应性要求,而非分时调度中的普通进程。PR实时优先级取值范围为 0-99,这个值越高,优先级越高,默认为0。

  • 查看PR优先级


[root@YUTIAN ~]# chrt -p 24959
pid 24959's current scheduling policy: SCHED_FIFO
pid 24959's current scheduling priority: 1

  • 修改PR进程优先级
    关于PR优先级的修改,同nice一样,有两种情况,在进程未开始时直接指定优先级启动,其二是修改已经启动的进程优先级。chrt命令一般需要具有root或超级用户权限才能修改其他用户的进程优先级。


此处以md5sum命令为例:

##在进程未开始时直接指定优先级启动
[root@YUTIAN ~]# chrt -f 1 md5sum /dev/zero & 
[1] 24959 
[root@YUTIAN ~]# chrt -p 24959 
pid 24959's current scheduling policy: SCHED_FIFO 
pid 24959's current scheduling priority: 1
##修改已经启动的进程优先级
[root@YUTIAN ~]# chrt -r -p 10 24959
[root@YUTIAN ~]# chrt -p 24959 
pid 24959's current scheduling policy: SCHED_RR 
pid 24959's current scheduling priority: 10


  • 优先级案例

###系统情况: RHEL 8.4 版本系统
2核CPU

##CPU情况:
[root@YUTIAN ~]# mpstat -P ALL 
Linux 4.18.0-305.el8.x86_64 (YUTIAN.example.com) 05/29/2023 _x86_64_ (2 CPU)
11:33:02 AM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
11:33:02 AM all 56.28 0.05 5.25 1.70 1.58 0.14 4.19 0.00 0.00 30.81
11:33:02 AM 0 58.73 0.03 4.31 1.43 1.93 0.14 3.92 0.00 0.00 29.50
11:33:02 AM 1 53.84 0.07 6.17 1.97 1.24 0.15 4.45 0.00 0.00 32.12
##此时系统有两个CPU,并且CPU资源充足,创建进程来消耗CPU资源
##创建一个1优先级的进程
[root@YUTIAN ~]# chrt -f 1 md5sum /dev/zero &
[1] 24971

##创建一个10优先级的进程
[root@YUTIAN ~]# chrt -f 20 sha1sum /dev/zero &
[2] 24972

##此时CPU资源状况 
PID USER  PR NI %CPU COMMAND
24972 root  -11 0 95.3 sha1sum
24971 root  -2 0 94.7 md5sum
##由于无其他高优先级进程,故这两个进程拿到两个CPU的所有资源
##再创建一个10优先级的进程
[root@YUTIAN ~]# chrt -f 10 sha256sum /dev/zero &
[3] 24973
##此时CPU资源状况 
PID USER  PR NI %CPU COMMAND
24973 root  -11 0 95.0 sha256sum
24972 root  -11 0 94.7 sha1sum
24971 root  -2 0 0.0 md5sum
##三个进程争抢两个CPU资源,两个10高优先级进程得到等多资源,1优先级进程基本得不到资源
##得出结论:
当系统资源匮乏时,优先级更高的进程得到更多的CPU资源


4.png


在平常使用系统时,特别是当系统硬件资源匮乏时,优先级概念可以帮助我们给需要的进程分配更多的资源,但进程优先级不是唯一影响进程调度的因素。其他因素包括进程的实际使用CPU时间的量、进程的等待时间、进程的IO操作等。进程优先级只是一个相对的概念,用于操作系统决定进程在竞争CPU资源时的顺序。

返回列表
上一篇:
懂技术,更精彩!实验对照nice与pr的进程优先级
下一篇:
懂技术,更精彩!Linux ps查看进程初识(二)
免费试听
姓名
电话
城市
咨询课程