当前位置:首页 » 操作系统 » linux调度策略

linux调度策略

发布时间: 2025-06-01 07:28:24

linux进程/线程调度策略(SCHED_OTHER,SCHED_FIFO,SCHED_RR)

Linux进程/线程调度策略主要包括SCHED_OTHER、SCHED_FIFO和SCHED_RR三种

  1. SCHED_OTHER

    • 用途:通常用于分时进程。
    • 调度依据:通过nice值和counter值决定进程的调度优先级。nice值越小,counter值越大,进程被调度的概率越大。反之,进程曾经使用CPU最少时会得到优先调度。
    • nice值范围:20到19。
    • 执行方式:时间片用完或主动放弃CPU时,任务将重新加入就绪队列末尾。如果所有任务的权值不大于0,则重新创建任务。
  2. SCHED_FIFO

    • 用途:适用于实时进程。
    • 调度依据:实时优先级作为调度权值标准,范围为1到99。
    • 执行方式:一旦进程占用CPU,它将一直运行直到更高优先级的任务到达或主动放弃。可能导致进程运行时间过长,如果没有更高优先级任务到达,会一直占用CPU。
    • 任务管理:如果当前任务等待资源而主动放弃CPU,它将从就绪队列中删除并加入等待队列。
  3. SCHED_RR

    • 用途:也适用于实时进程,可以看作是SCHED_FIFO的扩展。
    • 调度依据:同样采用实时优先级作为调度权值标准,并设置时间片。
    • 执行方式:每个任务执行一段时间后让出CPU,时间片用完后将重新分配时间片并置于就绪队列尾部,确保所有具有相同优先级的RR任务公平地获得执行机会。
    • 任务管理:如果RR任务的时间片为0,将根据nice值设置新时间片。如果任务等待资源而主动放弃CPU,它将从就绪队列中删除并加入等待队列。

总结:SCHED_OTHER主要用于非实时进程,通过nice值调节优先级;SCHED_FIFO和SCHED_RR用于实时进程,其中SCHED_FIFO一直运行直到有更高优先级任务到达,而SCHED_RR则通过时间片轮转确保公平性。

⑵ Linux 性能调优之配置CPU调度策略和可调参数

当前实验环境

Scheling Processes(进程调度):单个CPU同一时间仅可用执行一个进程!Linux系统通过多任务同时运行多个进程,实现交替执行这些进程以提供公平的CPU时间共享。

调度算法:操作系统通常采用基于优先级的抢占式调度算法,内核通过进程调度器决定哪个进程在特定时间运行,以实现快速确定下一个进程并确保公平性、响应性、可预测性和可扩展性。

调度策略与优先级:Linux系统调度器基于调度策略和调度优先级决定进程执行顺序。策略分为非实时策略与实时策略,非实时策略适用于大多数通用计算系统和应用程序,实时策略适用于对时间敏感的系统和应用程序。

进程优先级:优先级分为静态、动态与实时三种。静态优先级在进程创建时分配,动态优先级随CPU资源调整,实时优先级固定以确保实时任务按时完成。

配置进程优先级:通过ulimit、/etc/security/limits.conf配置静态与动态优先级,nice或renice命令调整动态优先级。

实时调度策略:字段说明包括pri、rtprio与FF,分别表示静态优先级、实时优先级与实时策略。实时调度器适用于具有实时要求的任务,包括截止时间调度器。

非实时调度策略:默认调度器为完全公平调度器(CFS),适用于公平CPU时间分配。CFS调度器使用红黑树数据结构跟踪任务的虚拟运行时间,决定下一个任务执行。

内核调度策略可调参数:通过sysctl命令调整CFS调度算法,例如sched_latency_ns、sched_min_granularity_ns、sched_migration_cost_ns等参数优化性能。

调整调度策略:使用命令行工具如chrt与taskset设置进程的调度策略与优先级,实现进程的资源优化与任务优先级调整。

⑶ linux进程调度的三种策略是什么

进程调度策略就是调度系统种哪一个进程来CPU运行。这种调度分2层考虑。 第一层,进程状态这个是最优先考虑的,也就是说优先级最高的。在linux中只有就绪态的进程才有可能会被调度选中然后占有CPU,其它状态的进程不可能占有的到CPU。下面是linux中进程的状态TASK_RUNNING:就绪状态,得到CPU就可以运行。
TASK_INTERRUPTIBLE:浅度睡眠,资源到位或者受到信号就会变成就绪态。
TASK_UNINTERRUPTIBLE:深度睡眠,资源到位就会进入就绪态,不响应信号。
TASK_ZOMBIE:僵死态,进程exit后。
TASK_STOPPED:暂停态,收到SIG_CONT信号进入就绪态。 第二层,其实真正在操作系统中的实现,就是所有就绪态进程链接成一个队列,进程调度时候只会考虑这个队列中的进程,对其它的进程不考虑,这就实现了第一层中的要求。接下来就是就绪队列内部各个进程的竞争了。 Linux采用3种不同的调度政策,SCHED_FIFO(下面简写成FIFO,先来先服务),SCHED_RR(简写成RR,时间片轮流),SCHED_OTHER(下面简写成OTHER)。这里大家就能看出一个问题,采用同等调度政策的进程之间自然有可比性,Linux3种调度政策并存,那么不同调度政策间的进程如何比较呢?可以说他们之间根本就没有可比性。其实在调度时候,调度只看一个指标,那就是各个进程所具有的权值,权值最大的且在可执行队列中排在最前面的就会被调度执行。而权值的计算才会设计到各方面因素,其中调度政策可以说在计算权值中,份量是最重的。 为什么Linux要这么干呢?这是由于事务的多样性决定的,进程有实时性进程和非实时性的进程2种,FIFO和RR是用来支持实时性进程的调度,我们看一下这3种政策下权值的计算公式就明白了:FIFO和RR计算公式,权值=1000+进程真正的运行时间OTHER计算公式,当时间片为0时,权值=0.当时间片不为0时候,权值=剩余时间片+20-nice,同时如果是内核线程有+1的小加分,这是因为内核线程无需用户空间的切换,所以给它加了一分,奖励他在进程切换时候开销小的功劳。时间片好理解,那么nice这个值,用过linux系统的人都知道,这是一个从unix下继承过来的概念,表示谦让度,是一个从20~-19的数,可以通过nice和renice指令来设置。从代码中也能看到值越小就越不会谦让他人。 从这里我们看出FIFO和RR至少有1000的基数,所以在有FIFO和RR调度政策进程存在时,OTHER进程是没有机会被调度的到的。从权值计算公式同时也能看出,FIFO先来先服务的调度政策满足了,但RR这个时间片轮流的调度如果按照这种权值计算是不能满足时间片轮流这一概念的。这里只是权值的计算,在调度时候对RR政策的进程特殊处理。 以上都是权值计算,下面看看真正的调度过程,首先是对RR政策进程的特殊处理,如果当前进程采用的RR政策,那么看他的时间片是否用完,用完了就踢到就绪队列尾部,同时恢复他的时间片。然后是便利整个就绪队列,找到第一个权值最大的进程来运行。 整体调度效果就是:如果有FIFO和RR政策的进程,就优先调度他们2个,他们之间看已执行时间长短决定胜负,而2种政策内部则遵守各自调度政策。而OTHER只有在前面2种不存在于就绪队列时候才有可能执行,他们实际也是轮流执行,但他们之间是靠剩余时间和NICE值来决定胜负。同时就绪队列中排在最前面的最优先考虑在同样权值情况下。

⑷ 浅析Linux下进程的调度策略与优先级

在 Linux 中,线程是由进程来实现的,可以认为线程就是一个轻量级的进程,因此,线程调度是按照进程调度的方式来进行的。这样设计,线程调度流程可以直接复用进程调度流程,没必要再设计一个进程内的线程调度器了。

在 Linux 中,进程调度器是基于进程的调度策略与调度优先级来决定调度哪个进程运行。

调度策略主要包括:

调度优先级的范围是 0~99,数值越大,表示优先级越高。

其中,SCHED_OTHER、SCHED_IDLE、SCHED_BACH 为非实时调度策略,其调度优先级为 0。而 SCHED_FIFO、SCHED_RR 是实时调度策略,其调度优先级范围为 1~99。

实时调度策略的进程总是比非实时调度策略的进程优先级高。

在 Linux 内部实现中,调度器会为每个可能的调度优先级维护一个可运行的进程列表,以最高优先级列表头部的进程作为下一次调度的进程,所有的调度都是抢占式的,如果一个具有更高调度优先级的进程转换为可运行状态,那么当前运行的进程将被强制进入其等待的队列中。

SCHED_OTHER

该调度策略是默认的 Linux 分时调度策略,该调度策略为非实时的,其调度优先级总是为 0。

对于该调度策略类型的进程,调度器是基于动态优先级来调度的。动态优先级跟属性 nice 有关,nice 的值会随着进程的运行时间而动态改变,以确保所有具有 SCHED_OTHER 策略的进程公平地得到调度。

在 Linux 中,nice 的值范围为-20 ~ +19,默认值为 0。nice 值越大,则优先级越低,因此相对较低 nice 值的进程可以获得更多的处理器时间。

通过命令 ps -el 查看系统中的进程列表,其中 NI 列就是进程对应的 nice 值。

使用 top 命令,看到的 NI 列也是进程的 nice 值。

调整 nice 值,可以通过 shell 命令 nice ,该命令可以按照指定的 nice 值运行 cmd ,命令的帮助信息为:

重新调整已运行进程的 nice 值,可通过 renice 命令实现,命令的帮助信息为:

另外,可以执行 top 命令,输入 r ,根据提示输入进程的 pid ,再输入 nice 数值,也可以调整进程的 nice 值。

SCHED_FIFO

该调度策略为先入先出调度策略,简单概括,就是一旦进程占用了 CPU,则一直运行,直到有更高优先级的任务抢占,或者进程自己放弃占用 CPU。

SCHED_RR

该调度策略为时间片轮转调度策略,该调度策略是基于 SCHED_FIFO 策略的演进,其在每个进程上增加一个时间片限制,当时间片使用完成后,调度器将该进程置于队列的尾端,放在尾端保证了所有具有相同调度优先级的进程的调度公平。

使用 top 命令,如果 PR 列的值为 RT ,则说明该进程采用的是实时调度策略,其调度策略为 SCHED_FIFO 或者 SCHED_RR,而对于非实时调度策略的进程,该列的值为 NI + 20 。

可以通过命令 ps -eo state,uid,pid,ppid,rtprio,time,comm 来查看进程对应的实时优先级,实时优先级位于 RTPRIO 列下,如果进程对应的列显示为 - ,说明该进程不是实时进程。

chrt 命令可以用来很简单地更改进程的调度策略与调度优先级。在 Linux 下查看 chrt 命令的帮助信息:

比如,获取某个进程的调度策略,使用如下命令:

在比如,设置某个进程的调度策略为 SCHED_FIFO,调度优先级为 70,使用如下命令:

热点内容
重庆电脑厂服务器 发布:2025-06-02 19:25:04 浏览:880
怎么查看收信服务器地址 发布:2025-06-02 19:20:54 浏览:753
mac清除软件缓存 发布:2025-06-02 19:20:48 浏览:993
清除网卡缓存 发布:2025-06-02 19:16:28 浏览:912
wifi存储盘 发布:2025-06-02 19:12:52 浏览:509
六管存储 发布:2025-06-02 19:06:57 浏览:984
网站数据库破解 发布:2025-06-02 19:00:55 浏览:62
对象存储服务器 发布:2025-06-02 18:58:09 浏览:200
群星船怎么配置 发布:2025-06-02 18:58:00 浏览:910
php更换版本 发布:2025-06-02 18:56:33 浏览:959