Linux 进程调度管理

进程调度器

现代计算机系统中既包含只有单个CPU且任何时候都只能处理单个指令的低端系统到具有几百个cpu、每个cpu有多个核心的高性能超级计算机,可以并行执行几百个指令。所有这些系统都有一个共同点:系统进程线程数量超出了CPU数量。

Linux系统看起来可以同时执行多个进程,多个进程轮流使用CPU。内核使用进程调度器决定如何分配CPU时间。为了更好地运行,进程调度器必须平衡不同的条件,快速决定下个执行的进程,确保进程获得公平的CPU时间:

  • 按时间片轮转(10-20ms为1个时间片 )
  • 按优先级调度,允许高优先级进程获取更多的共享CPU时间,低优先级进程获取更少的共享CPU时间。

在这里插入图片描述

在这里插入图片描述

实时调度器

实时调度器支持的调度策略:

  • SCHED_RR,roundrobin 轮训调度策略。相同优先级的进程轮流获取相同的CPU时间。
  • SCHED_FIFO,先入先出调度策略。被分配到的CPU时间的进程会一直运行,直到被IO阻塞(也称为sched_yield),会被高优先级进程抢占。

实时调度器管理的进程运行优先级范围如下:

在这里插入图片描述

即使系统运行实时调度程序,也要保持可响应状态,至少ssh可用。

管理员可以使用以下两个sysctl参数,阻止实时调度策略下运行的程序占用所有CPU时间:

  • kernel.sched_rt_runtime_us,在kernel.sched_rt_period_us内实时态进程可使用的共享CPU时间,默认值950000,也就是0.95秒。设置为0,实时调度进程将无法获取CPU时间。

  • kernel.sched_rt_period_us,CPU分配的周期时间,单位us,默认值1000000,也就是1秒。

    从kernel.sched_rt_period_us 中减去 kernel.sched_rt_runtime_us 后的剩余时间交给非实时调度器SCHED_NORMAL调度。

  • kernel.sched_rr_timeslice_ms,在SCHED_RR调度下的进程每次轮询获取的CPU时间,单位ms,默认值100,也就是0.1秒,有效范围1-100。

非实时调度器

非实时调度器支持的调度策略:

  • SCHED_NORMAL,标准的轮询方式时间共享调度,也称为SCHED_OTHER
  • SCHED_BATCH,针对批量方式执行的进程策略。不像 SCHED_NORMAL 频繁竞争,任务可以长时间运行。
  • SCHED_IDLE,用于执行非常低的优先级应用。使用 SCHED_IDLE 调度策略运行的进程比nice 19运行的进程优先级还低。

管理进程优先级-非实时调度策略

nice 值

常规系统上运行的大多数进程都使用 SCHED_OTHER 调度策略。由于并非所有进程都同等重要,因此可以为使用SCHED_OTHER调度策略运行的程序指定相对优先级,称为nice值。

有40种不同级别的nice值,范围 -20(最高优先级)到 19(最低优先级):

  • nice 值越高,代表优先级越低,获取CPU能力越弱。
  • nice 值越低,代表优先级越高,获取CPU能力越强。

注意: 当不存在CPU资源竞争时,即使nice值高的进程也可以获得足够CPU资源。

nice 值查看

top 命令

在这里插入图片描述

ps命令

[li@server ~ 19:10:58]$ ps -o nice,cmd $(pgrep systemd)NI CMD0 /usr/lib/systemd/systemd --switched-root --system --deserialize 220 /usr/lib/systemd/systemd-journald0 /usr/lib/systemd/systemd-udevd0 /usr/lib/systemd/systemd-logind

默认情况下,子进程将继承父进程的nice值,通常为0。

[li@server ~ 19:23:39]$ md5sum /dev/zero &
[1] 68517
[li@server ~ 19:24:18]$ ps -o pid,nice,command $$ 68517PID  NI COMMAND60940   0 -bash68517   0 md5sum /dev/zero# $$ 代表当前终端中运行的 shell 程序 PID

实时调度器进程优先级和非实时调度器进程优先级对比如下:

在这里插入图片描述

结论: 优先级最低的实时调度器进程的优先级高于优先级最高的非实时调度器进程的优先级。

nice 命令
[li@server ~ 19:24:34]$ nice --help
用法:nice [选项] [命令 [参数]...]
Run COMMAND with an adjusted niceness, which affects process scheduling.
With no COMMAND, print the current niceness.  Niceness values range from
-20 (most favorable to the process) to 19 (least favorable to the process).Mandatory arguments to long options are mandatory for short options too.-n, --adjustment=N   add integer N to the niceness (default 10)--help		显示此帮助信息并退出--version		显示版本信息并退出

示例:

# nice值默认是10
[li@server ~ 19:25:59]$ nice md5sum /dev/zero &
[2] 68730[li@server ~ 19:27:59]$ ps -o pid,nice,commandPID  NI COMMAND60940   0 -bash68517   0 md5sum /dev/zero68730  10 md5sum /dev/zero68736   0 ps -o pid,nice,command

普通用户仅允许使用正数的nice值运行程序。

# 设置一个负数优先级
[li@server ~ 19:28:05]$ nice -n -2 md5sum /dev/zero &
[3] 68797
[li@server ~ 19:29:09]$ nice: 无法设置优先级: 权限不够
^C
[li@server ~ 19:29:25]$ ps -o pid,nice,command 68797PID  NI COMMAND68797   0 md5sum /dev/zero# 设置一个正数优先级
[li@server ~ 19:29:35]$ nice -n 2 md5sum /dev/zero &
[4] 68869
[li@server ~ 19:30:02]$ ps -o pid,nice,command 68869PID  NI COMMAND68869   2 md5sum /dev/zero
renice 命令
[li@server ~ 19:30:19]$ renice --help用法:renice [-n] <优先级> [-p|--pid] <pid>...renice [-n] <优先级>  -g|--pgrp <pgid>...renice [-n] <优先级>  -u|--user <用户>...选项:-g, --pgrp <id>        将参数解释为进程组 ID-n, --priority <数字>  指定 nice 增加值-p, --pid <id>         将参数解释为进程 ID (默认)-u, --user <name|id>   将参数解释为用户名或用户 ID-h, --help             显示帮助文本并退出-V, --version          显示版本信息并退出

修改上面示例中产生的进程的优先级。

[li@server ~ 19:30:53]$ renice -n 2 68797
68797 (进程 ID) 旧优先级为 0,新优先级为 2
[li@server ~ 19:31:55]$ ps -o pid,nice,command 68797PID  NI COMMAND68797   2 md5sum /dev/zero# 使用root用户调整
[root@server ~ 19:12:42]# renice -n -2 68797
68797 (进程 ID) 旧优先级为 2,新优先级为 -2
[root@server ~ 19:32:57]# renice -n -2 68869
68869 (进程 ID) 旧优先级为 2,新优先级为 -2
[root@server ~ 19:33:30]# ps -o pid,nice,command 68797 68869PID  NI COMMAND68797  -2 md5sum /dev/zero68869  -2 md5sum /dev/zero
top 命令

top 界面查看进程CPU使用率:68797和68869,CPU使用率非常接近,因为优先级一致。

在这里插入图片描述

在该界面中使用 r 指令设置进程nice值。

终止之前创建的4个md5sum进程。

[li@server ~ 19:32:25]$ pkill md5sum
[1]   已终止               md5sum /dev/zero
[2]   已终止               nice md5sum /dev/zero
[4]+  已终止               nice -n 2 md5sum /dev/zero
[3]+  已终止               nice -n -2 md5sum /dev/zero

管理进程优先级-实时调度策略

chrt 命令用于获取和设置实时调度器进程优先级,以及更改进程调度器。

[root@server ~ 19:35:46]# chrt --help
Show or change the real-time scheduling attributes of a process.Set policy:chrt [options] <priority> <command> [<arg>...]chrt [options] --pid <priority> <pid>Get policy:chrt [options] -p <pid>Policy options:-b, --batch          set policy to SCHED_BATCH-d, --deadline       set policy to SCHED_DEADLINE-f, --fifo           set policy to SCHED_FIFO-i, --idle           set policy to SCHED_IDLE-o, --other          set policy to SCHED_OTHER-r, --rr             set policy to SCHED_RR (default)Scheduling options:-R, --reset-on-fork       set SCHED_RESET_ON_FORK for FIFO or RR-T, --sched-runtime <ns>  runtime parameter for DEADLINE-P, --sched-period <ns>   period parameter for DEADLINE-D, --sched-deadline <ns> deadline parameter for DEADLINEOther options:-a, --all-tasks      operate on all the tasks (threads) for a given pid-m, --max            show min and max valid priorities-p, --pid            operate on existing given pid-v, --verbose        display status information-h, --help     显示此帮助并退出-V, --version  输出版本信息并退出更多信息请参阅 chrt(1)

示例:

# 查看进程优先级范围,chrt不能用于调整非实时进程nice值优先级。
[root@server ~ 19:37:16]# chrt -m
SCHED_OTHER min/max priority	: 0/0
SCHED_FIFO min/max priority	: 1/99
SCHED_RR min/max priority	: 1/99
SCHED_BATCH min/max priority	: 0/0
SCHED_IDLE min/max priority	: 0/0
SCHED_DEADLINE min/max priority	: 0/0# 以SCHED_RR调度器和优先级为5运行md5sum进程
[root@server ~ 19:38:40]# chrt -r 5 md5sum /dev/zero &
[2] 69391
[root@server ~ 19:39:03]# ps -o pid,cls,rtprio,command 69391PID CLS RTPRIO COMMAND69391  RR      5 md5sum /dev/zero# 修改进程调度器和优先级
[root@server ~ 19:39:17]# chrt -f --pid 10 69391
[root@server ~ 19:39:55]# ps -o pid,cls,rtprio,command 69391PID CLS RTPRIO COMMAND69391  FF     10 md5sum /dev/zero# 修改进程调度器为非实时
[root@server ~ 19:40:05]# chrt -o --pid 0 69391
[root@server ~ 19:40:33]# ps -o pid,cls,rtprio,command 69391PID CLS RTPRIO COMMAND69391  TS      - md5sum /dev/zero

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

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

相关文章

深度学习篇---层与层之间搭配

在深度学习中&#xff0c;各种层&#xff08;比如卷积层、激活函数、池化层等&#xff09;的搭配不是随意的&#xff0c;而是像 “搭积木” 一样有规律 —— 每一层的作用互补&#xff0c;组合起来能高效提取特征、稳定训练&#xff0c;最终提升模型性能。下面用通俗易懂的方式…

服务器多线主要是指什么?

在数字化的网络环境当中&#xff0c;服务器已经成为各个企业提升线上业务发展的重要网络设备&#xff0c;其中服务器多线则是指一台服务器中能够同时接入多个网络运营商&#xff0c;并且通过智能路由技术实现用户访问请求的自动化分配&#xff0c;大大提高了用户访问数据信息的…

从0到1学PHP(三):PHP 流程控制:掌控程序的走向

目录一、条件语句&#xff1a;程序的 “抉择路口”1.1 if 语句家族&#xff1a;基础与进阶1.2 switch 语句&#xff1a;精准匹配的 “导航仪”二、循环语句&#xff1a;程序的 “重复舞步”2.1 for 循环&#xff1a;有序的 “征程”2.2 while 与 do - while 循环&#xff1a;条…

uni-app框架基础

阐述 MVC 模式1, MVC与MVVMMVC 他是后端的一个开发思想MVVM是基于MVC中的view这层所分离出来的一种设计模式。MVC架构详解MVC&#xff08;Model-View-Controller&#xff09;是一种广泛使用的软件设计模式&#xff0c;主要用于分离应用程序的业务逻辑、用户界面和输入控制。这种…

智慧收银系统开发进销存库存统计,便利店、水果店、建材与家居行业的库存汇总管理—仙盟创梦IDE

在零售与批发行业的数字化转型中&#xff0c;当前库存汇总作为进销存管理的核心环节&#xff0c;直接影响着企业的资金周转、销售决策和客户满意度。现代收银系统已超越传统的收款功能&#xff0c;成为整合多渠道数据、实现实时库存汇总的中枢神经。本文将深入剖析便利店、水果…

selenium(WEB自动化工具)

定义解释 Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。支持的浏览器包括IE&#xff08;7, 8, 9, 10, 11&#xff09;&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Google Chrome&#xff0…

windows本地使用conda部署Open-webui

前提条件 Open-webui使用python3.11.9 步骤 conda操作也可以参考 安装python torch、transformer、记录 1、conda环境 # 创建环境 conda create --name openwebui python3.11.9# 激活环境 conda activate openwebui# 升级pip版本 pip install --upgrade pip# pip安装openwe…

【Unity笔记04】数据持久化

&#x1f31f; 方案核心思想遵循以下设计原则&#xff1a;数据安全第一&#xff1a;绝不使用明文存储&#xff0c;采用AES加密算法保护数据。性能优化&#xff1a;使用异步I/O操作&#xff0c;避免阻塞主线程导致游戏卡顿。结构清晰&#xff1a;模块化设计&#xff0c;职责分离…

深入理解 HTML5 Web Workers:提升网页性能的关键技术解析

深入理解 HTML5 Web Workers&#xff1a;提升网页性能的关键技术解析引言1. 什么是 Web Workers&#xff1f;Web Workers 的特点&#xff1a;2. Web Workers 的使用方式2.1 创建一个 Web Worker步骤 1&#xff1a;创建 Worker 文件步骤 2&#xff1a;在主线程中调用 Worker3. W…

会议室预定系统核心技术:如何用一行SQL解决时间冲突检测难题

文章目录 一、为什么时间冲突检测是预定系统的核心挑战? 二、黄金法则:两行线段重叠检测法 三、四大冲突场景实战解析(同一会议室) 四、生产环境完整解决方案 1. 基础冲突检测函数 2. 预定API处理流程 3. 高级边界处理技巧 五、性能优化关键策略 六、不同数据库的适配方案 …

13.正则表达式:文本处理的瑞士军刀

正则表达式&#xff1a;文本处理的瑞士军刀 &#x1f3af; 前言&#xff1a;当文本遇上神奇的密码 想象一下&#xff0c;你是一个图书管理员&#xff0c;面对着一堆乱七八糟的书籍信息&#xff1a; “联系电话&#xff1a;138-1234-5678”“邮箱地址&#xff1a;zhang.sangm…

linux下c语言访问mysql数据库

一、连接数据库基础1. 头文件与库文件连接 MySQL 需包含的头文件&#xff1a;#include <mysql/mysql.h> // 部分环境也可用 #include <mysql.h> 编译链接时&#xff0c;Linux 平台需指定库名&#xff1a;-lmysqlclient &#xff0c;用于链接 MySQL 客户端函数库。2…

6. 传输层协议 UDP

传输层负责数据能够从发送端传输接收端.1. 再谈端口号端口号(Port)标识了一个主机上进行通信的不同的应用程序在 TCP/IP 协议中, 用 "源 IP", "源端口号", "目的 IP", "目的端口号", "协议号" 这样一个五元组来标识一个通信…

vue 开发总结:从安装到第一个交互页面-与数据库API

vue 总结 1、安装vue&#xff1a; WinR 输入&#xff1a;cnpm install -g vue/cli 验证是否安装成功&#xff1a;vue --version 2、新建Vue工程 在对应文件夹下右击打开集成终端 输入 vue create query_system&#xff08;新建项目名字&#xff09;名称不能存在大写&#x…

运维笔记:HTTP 性能优化

一、HTTP 协议特性与性能瓶颈1.1 HTTP 协议发展历程HTTP 协议的演进直接影响着 Web 性能&#xff0c;各版本关键特性对比&#xff1a;协议版本发布时间核心特性性能优势局限性HTTP/1.01996 年无状态、短连接简单易实现每次请求需建立 TCP 连接HTTP/1.11999 年长连接、管道化减少…

ubuntu:运行gcfsd-admin守护进程需要认证,解决方法

这里有个锁子&#xff0c;每次进入都要输入密码&#xff0c;怎么解决&#xff1f; 重新挂载 /data 磁盘 sudo umount /data sudo ntfsfix /dev/sda1 sudo mount -o rw /dev/sda1 /data

1.DRF 环境安装与配置

文章目录一. Django Rest_Framework二、环境安装与配置2.1 安装 DRF2.2 创建Django项目2.3 添加 rest_framework 应用三、启动项目一. Django Rest_Framework 核心思想&#xff1a;大量缩减编写 api 接口的代码 Django REST framework 是一个建立在 Django 基础之上的 Web 应…

设计模式(十九)行为型:备忘录模式详解

设计模式&#xff08;十九&#xff09;行为型&#xff1a;备忘录模式详解备忘录模式&#xff08;Memento Pattern&#xff09;是 GoF 23 种设计模式中的行为型模式之一&#xff0c;其核心价值在于在不破坏封装性的前提下&#xff0c;捕获并外部化一个对象的内部状态&#xff0c…

Qt/C++开发监控GB28181系统/录像回放/切换播放进度立即跳转/支持8倍速播放/倍速和跳转进度无缝切换

一、前言说明 在国标监控系统中&#xff0c;录像回放过程中&#xff0c;需要切换播放进度&#xff0c;对比过很过国标系统&#xff0c;绝大部分尤其是网页版的监控系统&#xff0c;在切换进度过程中都会黑屏&#xff0c;这个体验就很不友好了&#xff0c;明明gb28181协议中就有…

【11】大恒相机SDK C++开发 ——原图像数据IFrameData内存中上下颠倒,怎么裁剪ROI 实时显示在pictureBox中

文章目录3 当内存中的 图像数据是垂直翻转的时候怎么截取ROI 并显示3.1 对ROI在原图中的位置做转换3.2 将ROI的最后一行当做开始位置&#xff0c;从底部向上复制数据3.3 完整代码3.4 图像数据在内存中上下颠倒的情况3.5 调用验证4 unsafe代码 解释及注意事项 看我另一篇文章5 C…