Linux优先级、调度策略

news/2024/3/19 14:55:31/文章来源:https://blog.csdn.net/renjianhhong/article/details/129196400

调度策略

在Linux上有如下调度策略,可以通过 chrt 进行查询/设置:

  • SCHED_FIFO:高优先级,先入先出,除非主动让出CPU,否则会一直占用CPU;

  • SCHED_RR:高优先级,基于时间片,轮转调度;

  • SCHED_OTHER:普通优先级;

  • SCHED_BATCH:普通优先级,针对"batch"类型的任务,切换没有SCHED_OTHER频繁;

  • SCHED_IDLE:普通优先级,适用于以低优先级运行的后台任务

查询调度策略

# 查询主进程调度策略与优先级
chrt -p $pid# 查询线程调度策略与优先级
chrt -p $tid# 查询进程下所有线程调度策略与优先级
chrt -ap $pid

修改调度策略

# 修改调度策略
chrt -o -p $prio $pid    #SCHED_OTHER, $prio = 0
chrt -f -p $prio $pid    #SCHED_FIFO,  $prio = [1,99]
chrt -r -p $prio $pid    #SCHED_RR,    $prio = [1,99] 
chrt -b -p $prio $pid    #SCHED_BATCH, $prio = 0
chrt -i -p $prio $pid    #SCHED_IDLE,  $prio = 0# 获取每个调度策略所支持的min/max优先级范围
chrt -m

优先级

在Linux中一共有139个优先级,从kernel的视角来看,范围为[1,139],数值越小,优先级越高。其中

  • [1,99]为实时优先级,对应SCHED_FIFO、SCHED_RR调度策略的实时进程;

  • [100,139]为普通优先级,对应SCHED_OTHER、SCHED_BATCH、SCHED_IDLE调度策略的普通进程,其默认优先级为120。

这里还有一个变量叫做 nice 值,范围[-20,19]。通过调整nice值可以间接调整优先级,nice值只对普通进程生效:

普通进程优先级 = 优先级 + nice

查询优先级

查询优先级的命令有很多,top、ps、chrt等等都可以,但是不同的工具、甚至不同的命令参数,显示的优先级范围、含义不同。

top

top可以直接看到PR(优先级)、NI(nice)。

PR范围:[-100,-2]&&[0,39],其中-100不会直接显示,而是以字符串"rt"的形式显示。PR数值越小,优先级越高。

NI范围:[-20,19]

[root@AOS ~]# topPID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
19442 ros       20   0  961708  81772  35616 S   0.3  0.5   0:16.54 node1 root      20   0  119812   5444   3424 S   0.0  0.0   0:18.64 systemd2 root      20   0       0      0      0 S   0.0  0.0   0:00.07 kthreadd3 root      20   0       0      0      0 S   0.0  0.0   0:00.19 ksoftirqd/05 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H9 root      rt   0       0      0      0 S   0.0  0.0   0:00.03 migration/0

ps

直接输入ps不会显示优先级信息,需要加入参数。ps具有多种风格的输入参数,不同的风格,显示的优先级范围、含义也不同。

  • 风格1,ps elf

显示的PRI与top中的PR值一致,即[-100,-2]&&[0,39],数值越小,优先级越高;

  • 风格2,ps -elf

显示的PRI=top.PR+60; 即[-40,58]&&[60,99],数值越小,优先级越高;

  • 风格3,ps -elo pid,tid,rtprio,pri,ni,cmd

显示的PRI范围[1,139],数值越大,优先级越高,与内核视角的最终优先级刚好相反;

[root@AOS ~]# ps elf
F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
4     0 26399 26385  20   0   7028  3908 do_sel Ss+  pts/13     0:00 -bash USER=root LOGNAME=root ......
4     0 25174 24247  20   0   7032  3808 do_wai Ss   pts/11     0:00 -bash ASCEND_VECTOR_OBJ_PATH=......
0     0 16200 15963  -2   -   5088  1480 -      RN+  pts/17    70:53  \_ dd if=/dev/zero of=......[root@AOS ~]# ps -elf
F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root         1     0  0  80   0 -  1156 do_wai 6月07 ?       00:00:01 init
1 S root         2     0  0  80   0 -     0 kthrea 6月07 ?       00:00:00 [kthreadd]
1 I root         3     2  0  60 -20 -     0 rescue 6月07 ?       00:00:00 [rcu_gp]
1 I root         4     2  0  60 -20 -     0 rescue 6月07 ?       00:00:00 [rcu_par_gp][root@AOS ~]# ps -eLo pid,tid,rtprio,pri,ni,cmdPID   TID RTPRIO PRI  NI CMD1     1      -  19   0 init3     3      -  39 -20 [rcu_gp]12    12     99 139   - [migration/0]

chrt

chrt只能得到SCHED_FIFO、SCHED_RR实时优先级,范围[1,99]。数值越大,优先级越高。

实时优先级 = 100 - chrt优先级

[root@AOS ~]# chrt -p 27116
pid 27116's current scheduling policy: SCHED_RR
pid 27116's current scheduling priority: 10

设置优先级

对于普通进程,可以通过nice/renice调整nice值,从而影响普通进程的优先级。普通优先级 = 120 + nice;

对于实时进程,可以通过chrt直接调整优先级。实时优先级 = 100 - chrt优先级;

nice/renice

  1. nice用于在启动时设置nice值,

$N为nice值,范围[-20,19],数值越小,优先级越高;

$proc_cmd为可执行程序;

nice $N $proc_cmd

  1. renice用于程序已经启动后,再重新调整nice值,

$N为nice值,范围[-20,19],数值越小,优先级越高;

$pid为进程id;

renice $N -p $pid

  1. renice可以对进程下的所有线程调整nice值,

$N为nice值,范围[-20,19],数值越小,优先级越高;

$pgrp为进程组id;

renice $N -g $pgrp

chrt

$policy为策略选项,可用-f/-r,分别为SCHED_FIFO/SCHED_RR;

$priority为优先级,范围[1,99],数值越大,优先级越高;

$pid为进程id;

chrt -$policy -p $priority $pid

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_262337.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(免费分享)基于ssm的BBS社区论坛系统带论文

项目描述前台部分:1.用户注册登录模块用户登录后,可以进行发帖回帖功能,在线签到功能,完善个人信息,添加好友,收藏贴子,评论帖子,点赞功能,记录功能(比如记录今天发生的事情)等等…2.排行榜模块1.帖子讨论热度排行,分两种排行方式:(1) 根据用户今日发出的帖子被回复数量进行排名…

[数据结构]链表OJ

目录 数据结构之链表OJ:: 1.移除链表元素 2.反转链表 3.链表的中间结点 4.链表中倒数第k个结点 5.合并两个有序链表 6.链表分割 7.链表的回文结构 8.相交链表 9.环形链表 10.环形链表II 11.复制带随机指针的链表 数据结构之链表OJ:&#xff…

ARM uboot 源码分析6 - uboot如何启动内核

一、uboot 和内核到底是什么 1、uboot 是一个裸机程序 (1) uboot 的本质就是一个复杂点的裸机程序。和我们在 ARM 裸机全集中学习的每一个裸机程序并没有本质区别。 (2) ARM 裸机第十六部分写了个简单的 shell,这东西其实就是个mini 型的 uboot。 2、内核本身也是…

Hadoop Shell常用命令

Hadoop Shell命令在管理HDFS的时候还是比较常用的,Hadoop Shell命令与shell命令极为相似,但是方便查询,在这里总结分享,大家enjoy~~ 1,cat 语法格式:hadoop fs -cat URI [URI …] 含义:将路径…

【架构师】零基础到精通——架构演进

博客昵称:架构师Cool 最喜欢的座右铭:一以贯之的努力,不得懈怠的人生。 作者简介:一名Coder,软件设计师/鸿蒙高级工程师认证,在备战高级架构师/系统分析师,欢迎关注小弟! 博主小留言…

华为OD机试题,用 Java 解【查找接口成功率最优时间段】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

【数据库】redis集群环境详解

目录 集群环境 一,集群介绍 1、为什么需要redis集群 2、什么是redis集群 二,数据分片 三, 主从复制模型 四,一致性保证 五,集群搭建 1, 集群结构 2,创建配置文件 (1&#…

RebbitMQ 消息队列(简单使用)

消息队列介绍 MQ的优势 1.业务解耦:不同系统消费信息互不关联,灵活增减系统数量,修改某个系统其他系统也不影响 2.异步提速:不同系统之间可同时响应,提升并发量 3.削峰填谷:处理消息高峰期,均摊…

Ubuntu通过kubeadm安装k8s

kubeadm kubeadm是一个构建k8s集群的工具。它提供的kubeadm init和 kubeadm join 两个命令是快速构建k8s集群的最佳实践。 其次,kubeadm工具只为构建最小可用集群,它只关心集群中最基础的组件,至于其他的插件(比如dashboard、CNI…

SpringCloud - Gateway网关路由

目录 网关初步介绍 搭建网关服务 路由断言工厂Route Predicate Factory 路由过滤器 GatewayFilter 全局过滤器 GlobalFilter 过滤器执行顺序 网关的cors跨域配置 网关初步介绍 不是所有的请求,都能访问服务,所以需要网关对来访问的请求进行提前判…

java 9 的新特性解读(1)

前言  经过4次跳票,历经曲折的Java 9 终于终于在2017年9月21日发布。  从Java 9 这个版本开始,Java 的计划发布周期是 6 个月,下一个 Java 的主版本将于 2018 年 3 月发布,命名为 Java 18.3,紧接着再过六个月将发布…

CSS 盒子模型【快速掌握知识点】

目录 一、什么是盒子模型 二、边框border-color 三、边框粗细border-width 四、边框样式border-style 五、外边距margin 六、内边距padding 七、圆角边框 八、圆形 九、盒子阴影 一、什么是盒子模型 css盒子模型又称为框模型,盒子的最内部是元素的实际内容…

【Git】与“三年经验”就差个分支操作的距离

前言 Java之父于胜军说过,曾经一位“三年开发经验”的程序员粉丝朋友,刚入职因为不会解决分支问题而被开除,这是不是在警示我们什么呢? 针对一些Git的不常用操作,我们通过例子来演示一遍 1.版本回退 1.1已提交但未p…

notepad++如何快速批量搜索复制,3步搜索+标记所在行+复制书签行

一。缘起 用习惯了 某edit, 突然用notepad很不习惯,至少3处不习惯:列操作,批量复制搜索行,和是txt文件比较。 另外一直坚持认为,不提供快捷键操作的软件不是好软件:)当下屏幕对眼睛迫害至深的时…

SGI 空间配置器

前言 空间配置器是 STL 六大组件之一,它总是隐藏在容器的背后,默默工作,默默付出。本文为《STL 源码剖析》读书笔记,主要讨论 SGI 版本空间的配置和释放,对代码进行解读时会改变一些写法,使其更易于阅读。…

企业急需:拥有一个属于自身的知识库!

如今,拥有知识库对任何企业来说都是绝对必要的。特别是在软件即服务方面。如果您真的希望您的 SaaS 业务取得成功,您需要从第一天开始构建知识库。为什么?首先,SaaS 公司有一个货币化模型,专注于他们的每月经常性收入 …

多传感器分布式融合算法——多传感器网络协同目标跟踪和定位

多传感器分布式融合算法 应用: 多传感器网络协同目标跟踪及定位 原创不易,路过的各位大佬请点个赞 主要讲解算法: 多传感器集中式融合算法/分布式融合算法/序贯融合算法 多速率多传感器异步融合算法 多传感器…

PHP程序员适合创业吗?

创业是一件自然而然的事,不需要人为选择。 只要你是一个努力能干主动的人,当你在一个行业深耕5年之后,就会发现人生发展的下一步就是创业。当然如果行业合适的话。 什么叫行业合适呢? 就是创业的成本并不那么高,不需…

js 实现 Logo(图片)根据图片后面的图片颜色而变化成相反的颜色【解决logo固定后 会出现与不同板块的颜色相同导致于看不清logo的情况】

效果展示&#xff1a; <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <meta http-equiv"X-UA-Compatible" content"ieedge"><style type"text/css…

Unreal Engine 虚幻引擎,性能分析,优化(二)

一、CPU 性能分析 如渲染线程中出现 CPU 受限&#xff0c;原因可能是绘制调用过多。这是一个常见问题&#xff0c;美术师通常会将绘制调用进行组合&#xff0c;从而减少消耗&#xff08;如&#xff1a;将多个墙壁组合为一个网格体&#xff09;。实际消耗存在于多个区域中&…