首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux:为什么FIFO调度器在单核CPU机器上不能按预期工作?

FIFO调度器(First-In-First-Out Scheduler)是Linux内核中的一种进程调度算法,它按照进程的到达顺序来进行调度。然而,在单核CPU机器上,FIFO调度器无法按预期工作的原因如下:

  1. 单核CPU的特性:单核CPU只能同时执行一个进程,因此无论采用何种调度算法,都无法实现真正的并行执行。在这种情况下,FIFO调度器的到达顺序并不能带来明显的优势。
  2. 时间片轮转调度:在单核CPU上,通常会采用时间片轮转调度算法,即每个进程被分配一个时间片,在时间片用完之后切换到下一个进程。这种调度算法可以公平地分配CPU时间,并避免某个进程长时间占用CPU。相比之下,FIFO调度器无法进行时间片轮转,可能导致某个长时间运行的进程一直占用CPU资源,影响其他进程的执行。
  3. 进程优先级:在Linux中,每个进程都有一个优先级,优先级高的进程会被优先调度。而FIFO调度器并没有考虑进程的优先级,只按照到达顺序进行调度。这意味着,即使某个进程具有更高的优先级,也无法在FIFO调度器下得到更多的CPU时间。

综上所述,FIFO调度器在单核CPU机器上不能按预期工作是因为单核CPU的特性、时间片轮转调度算法以及进程优先级的影响。在实际应用中,可以考虑使用其他调度算法,如CFS(Completely Fair Scheduler),以更好地满足单核CPU机器的调度需求。

(注:根据要求,不提及具体的云计算品牌商和产品链接)

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

一次脑残的记录:Linux 中实时任务调度与优先级

通过这篇文章,您能深刻体验到 Linux 系统中下面几个概念: 实时进程和普通进程的调度策略; Linux 中混乱的进程优先级是如何计算的; CPU亲和性的测试; 多处理(SMP)遇到实时进程和普通进程的程序设计...SCHED_RR: SCHED_FIFO 的基础,加上了时间片的概念。...当一个进程抢占到 CPU 之后,运行到一定的时间后,调度会把这个进程放在 CPU 中,当前优先级进程队列的末尾,然后选择另一个相同优先级的进程来执行; ?...问题很明显:为什么 4 个线程为什么被同时执行了? 1 号和 2 号这两个线程应该被优先执行啊,因为它俩是实时任务! 怎么结果是这个样子?彻底凌乱了,一点都不符合预期! 想不出个所以然,只能求助网络!...一般都是使用系统默认的调度策略,这也是 Linux x86 作为通用电脑,调度策略所关注的重要指标:让每一个任务都公平的使用 CPU 资源。

1.1K10

Linux Deadline 调度 - 第一部分:简介与理论背景

多任务操作系统(如 Linux)中,实时调度负责协调 CPU 访问,以确保系统中所有实时任务都能在限期内完成。...两个任务有同一优先级的时候,就能看出 FIFO 和 RR 调度的区别:FIFO 调度下,先到达的任务将先运行,一直运行到进入睡眠为止;而在 RR 调度下,同样优先级的任务将共享处理并以轮转方式交替运行...Deadline 调度单核系统针对期限小于或等于任务周期的周期性和偶发任务是最优算法。...多核系统中,调度同样需要决定任务可以运行在哪个核。通常情况下,调度可以按如下归类: ? 全局性的(Global):单个调度管理所有系统中的 CPU。...调度行为结果类似下图: ? 直觉我们可能认为系统负载低时,总是可调度的。其实这仅针对单核系统成立。

2.2K20
  • 郭健: deadline调度之(一):原理

    多任务操作系统中(如Linux),实时调度(realtime scheduler)负责协调实时任务对CPU的访问,以确保系统中的所有的实时任务在其deadline内完成。...无论FIFO还是RR,RT调度都是根据任务的实时优先级(Linux进程描述符中的rt_priority成员)进行调度。最高优先级的任务将最先获得CPU资源。...通过上图可知3个rt任务都很好的被调度,满足了各自的deadline需求。如果使用固定优先级的调度(例如Linux内核中的FIFO)会怎样呢?...单核系统中,调度只需要考虑任务执行先后顺序的问题,多核系统中,除了任务先后问题,调度还需要考虑CPU分配问题。也就是说,多核系统中,调度还需要决定任务在那个CPU运行。...然而实时并非如此,单核上表现最优的EDF调度多核系统中会出现问题(指Global EDF调度)。

    1.1K20

    郭健:deadline调度之(一):原理

    多任务操作系统中(如Linux),实时调度(realtime scheduler)负责协调实时任务对CPU的访问,以确保系统中的所有的实时任务在其deadline内完成。...无论FIFO还是RR,RT调度都是根据任务的实时优先级(Linux进程描述符中的rt_priority成员)进行调度。最高优先级的任务将最先获得CPU资源。...如果使用固定优先级的调度(例如Linux内核中的FIFO)会怎样呢?...单核系统中,调度只需要考虑任务执行先后顺序的问题,多核系统中,除了任务先后问题,调度还需要考虑CPU分配问题。也就是说,多核系统中,调度还需要决定任务在那个CPU运行。...然而实时并非如此,单核上表现最优的EDF调度多核系统中会出现问题(指Global EDF调度)。

    1.8K20

    能感知功耗的Linux调度(EAS)

    第一个商用处理Intel 4004单核以740kHz的频率运行。那时还不需要使用负载调度(load scheduler)。...我们如何让这些机器硬件(即多核CPU)使用多核的软件算法?您可能以前我们的论坛听说过功耗感知调度(EAS)。这是Google Pixel智能手机表现如此出色的部分原因。...CFS于2007年10月合并到Linux内核版本2.6.23中。 完全公平调度 完全公平调度自诞生以来就用在Android中,并且非big.LITTLE设备使用。...调度参数调整地不太合理,因此这可能解释了为什么它的性能效率不如您预期的那样。它在功耗方面非常保守,系统会在大多数工作中优先考虑低功耗核。...可调参数只是传递给CPU governor的一组参数,这些参数会改变governor频率方面对某些情况的反应。然后,调度决定将任务分配在不同处理

    3.5K50

    面试整理学习专题2:操作系统

    并行指两个或者多个事件同一时刻发生,并发是两个或者多个事件同一时间间隔发生; 并行是不同实体的多个事件,并发是同一实体的多个事件(如单核CPU轮转时间片)。...命名管道: 1、FIFO可以无关的进程之间交换数据,与无名管道不同; 2、FIFO有路径与之相关联,他以一种特殊设备文件形式存在文件系统之中。...4、最短剩余时间优先调度算法。 这个是针对最短进程优先增加了抢占机制的版本,进程调度总是选择预期剩余时间最短的进程。...汇编的汇编过程相对于编译来说更加简单,没有复杂的语法,也没有语义,更不需要做到指令优化,只是根据汇编指令和机器指令的对照表一一翻译过来,汇编过程有汇编as完成。...用户态:处于用户态的CPU只能受限的访问内存,并且不允许被访问外围设备。用户态下的CPU不允许独占,也就是说CPU能够被其他程序获取。。 为什么要有用户态和内核态。

    6710

    论文学习笔记:增强学习应用于OS调度

    Linux 中的调度 目前默认的 Linux 调度,即完全公平调度 (CFS) ,使用虚拟运行时间的概念,旨在实现理想和精准的多任务 CPU调度,以便所有任务使用相同的 CPU 时间。...服务中很常见的是静态工作负载,例如基因组分析软件、大数据分析系统和人工智能。所读论文旨在通过调整调度策略和参数来提高静态工作负载的性能。Linux内核中,定义了5个调度策略和14个调度程序参数。...3.3 Linux中的调度策略与内核调度参数 Linux内核中,当前定义了五个调度策略:NORMAL(CFS)、FIFO、RR、BATCH、IDLE ,可以使用Linux提供的schedtool工具更改这些策略...基于CPU核心数量的改进。为了确认CPU核心数是否影响STUN的性能,比较了4核、44核和120核机器优化Sysbench的性能改进率。...为验证实际工作负载下的性能,44核机器使用STUN优化了人脸检测程序,并分析了视频的人脸识别时间和默认和优化参数值下的每秒帧数。

    43710

    Linux Kernel调度的过去,现在和未来

    为什么需要调度 Linux 是一个多任务的操作系统,这就意味着它可以「同时」执行多个任务。单核处理,任意时刻只能有一个进程可以执行(并发);而在多核处理中,则允许任务并行执行。...多处理机器中,会有负载均衡策略,任务就会转移到其它 CPU 运行的可能。...当然,这种 work-stealing 均衡方法还会考虑机器的拓扑结构:处理会尝试从距离它们「更近」的其它处理尝试窃取工作,而非距离「更远」的处理(如远程 NUMA 节点)。...大型的 NUMA 机器,CFS 并不会粗暴地比较所有 CPU 的负载,而是以分层的方式进行负载均衡。...为什么叫作虚拟运行时间呢?接下来就要揭开它的神秘面纱。为了更好地实现公平性,CFS 使用了虚拟时钟来测量一个等待的调度单元一个完全公平的处理允许执行的时间。

    2.6K30

    YARN—容量调度

    容量调度的特性和行为 CPU调度(DRF(Dominant Resource Fairness)) 默认情况下不启用 CPU 调度CPU调度允许不考虑强制使用或首选分配的情况下超额订阅内核。...CPU调度有两个主要部分 分配和放置 执行 只需启用 CPU 调度即可解决分配和放置问题,以便调度开始使用DRF算法和 VCores 节点管理的报告。...通过简单的启用CPU 调度,其他任务将不再被配置到服务,因为所有内核都被利用并在集群中找到其他首选位置来放置任务。 通过使用 CGroups 来解决强制执行的问题。...可以启用不使用时的 vcore 共享,或者严格执行仅调度的内容。节点管理还可以配置服务的最大 CPU 使用量,它们将允许所有任务总计,这允许内核保证操作系统功能。...抢占有一些非常具体的行为,其中一些不能按用户预期的方式运行。最常见的预期行为是队列自身内部抢占以平衡所有用户的资源。

    1.6K20

    unixbench分析_燕青: Unixbench 测试套件缺陷深度分析

    出于业务需求,整个测试过程中我们更关注单核的性能。为了排除软件的影响,两台服务均安装Centos 7操作系统。 测试命令很简单,控制台中执行如下命令: ....这会导致虚拟机内所见到的CPU拓扑和共享内存布局有所不同。 真实的物理服务,每个物理核会有各自的FLC和MLC,同一个CoreCPU共享LLC。...而虚拟机B的配置是同一个Core内CPU不共享LLC。不共享LLC的场景下,Linux将每个CPULLC层次的调度域设置为空。...Linux 3.10这个版本下,内核会优先考虑亲和性,亲和性的目标是优先选取同一个调度域内的CPU。虚拟机A共享LLC,所有的CPU都在同一个调度域内,内核为其选择的是同一调度域内的空闲CPU。...具体来说,有两种方法: 1、将context1和context2两个线程绑定在同一个CPU核上面。这样可以反应出被测试系统单核的执行性能。

    1.3K10

    燕青: Unixbench 测试套件缺陷深度分析

    出于业务需求,整个测试过程中我们更关注单核的性能。为了排除软件的影响,两台服务均安装Centos 7操作系统。 测试命令很简单,控制台中执行如下命令: ....这会导致虚拟机内所见到的CPU拓扑和共享内存布局有所不同。 真实的物理服务,每个物理核会有各自的FLC和MLC,同一个CoreCPU共享LLC。...而虚拟机B的配置是同一个Core内CPU不共享LLC。不共享LLC的场景下,Linux将每个CPULLC层次的调度域设置为空。...Linux 3.10这个版本下,内核会优先考虑亲和性,亲和性的目标是优先选取同一个调度域内的CPU。虚拟机A共享LLC,所有的CPU都在同一个调度域内,内核为其选择的是同一调度域内的空闲CPU。...具体来说,有两种方法: 1、将context1和context2两个线程绑定在同一个CPU核上面。这样可以反应出被测试系统单核的执行性能。

    2.7K10

    计算机系统调用的成本到底有多高?

    它有一个快速的CPU,具有良好的单核性能(Xeon Gold 6256),禁用了频率缩放功能,并以高于其基本频率的恒定4.1GHz频率运行。...另外,基准进程是标准调度策略下运行的,Linuxsched_yield()被描述为:sched_yield()旨在与实时调度策略(即SCHED_FIFO或SCHED_RR)一起使用。...然而,第一种情况下,所有主机都需要50微秒。顺便说一下,50微秒也是Linux正常调度进程的默认定时松弛值。...因此,其他的nanosleep案例设置了一个最小的定时松弛值为1ns,这就减少了运行时间,正如预期的那样。然而,它仍然比其他的系统调用要昂贵得多。当然,定时过期的精度是有限的。...然而,0 ns或1 ns的情况下,真的没有必要让定时过期。事实证明,无条件地调用nanosleep()会产生一个(自愿的)上下文切换。即使是孤立的内核调度也会愉快地切换到交换的内核线程。

    60030

    被神话的Linux, 一文带你看清Linux多核可扩展性设计的不足

    你看, CPU就不是所有任务并发争抢使用的,而是调度让谁用谁才能用 。调度,或者说仲裁,这是操作系统的精髓。...也确实如此,单核的自旋锁并不能如其字面表达的那样 自旋 , 单核场景下,Linux的自旋锁实现仅仅是 禁用了抢占 。因为,这样即可保证 不出问题 。...强度可以调整,比如0xff->0xffff,CPU比较猛比较多的机器做测试,将其调强些,否则队列开销会淹没模拟任务的开销。...比较猛比较多的机器做测试,将其调强些,否则队列开销会淹没模拟任务的开销。...进程使用这些抽象资源时,现代操作系统无疑采用了仲裁调度机制: 操作系统提供任务调度仲裁CPU的分时复用(典型的是多级反馈优先级队列算法),为进程/线程统一分配物理CPU的时间片资源。

    1.9K20

    CPU这么忙,休息一会不调度

    狼多肉少轮流吃 首先,为什么调度,多任务的OS中,每个任务都需要使用CPU,需要为各个任务对CPU的使用提供一种机制,这就是调度调度决定了某一个时刻,应该让哪个任务获得CPU的使用权。...处理亲和性 CPU affinity 是一种调度属性, 它可以将一个进程"绑定" 到一个或一组CPU。...Linux调度支持自然CPU亲和性(natural CPU affinity)::调度会试图保持进程相同的CPU运行, 这意味着进程通常不会在处理之间频繁迁移。...另外还可以设置硬亲和性,将进程或者线程绑定到一个cpu子集运行,例如linux提供了两个和性相关的命令:taskset和numactl 调度的是谁 人们一般很少叫线程调度,而叫进程调度或者任务调度...,但我们要明白实际linux系统中,进程是资源管理的最小单元,线程才是调度的最小单元。

    89420

    为什么Linux CFS调度没有带来惊艳的碾压效果

    预期中,人们期待它会带来令人惊艳的效果。 然而这是错觉。 人们希望CFS速胜,但是分析来分析去,却只是 某些方面比O(1)调度稍微好一点点。 甚至某些方面比不上古老的4.4BSD调度。...Linux内核2.6.23就采用了CFS调度。所以一个原因就是没有比较。Android系统,CFS没有机会和O(1)做比较。...而不能仅仅是明白了它是怎么工作的。 那么Linux CFS调度被采用,它的目标是解决什么问题的呢?...CPU核数越来越多的时代,人们更应该关心 把进程调度到哪里CPU 而不是 某个CPU核要运行哪个进程。 ?...Linux新特性128MB内存的i386机器跑没有问题,那就是OK的。只要不是80%以上的人遭遇的新问题,社区是从不care的,同时,正因为如此,社区还会引入bug,这也是令人想叹息都不能叹息。

    2.4K20

    进程调度开篇

    而进程何时被执行,计算机系统中需要调度来选择。所以我们从今天要开启一系列调度相关的知识了。 为何要有调度 计算机设计的时候为何会设计调度? 所谓是“无规律,不成方圆”。...Linux操作目前使用的场景很多,比如常见手机终端,家里的智能终端,开发人员使用的PC机器,一些大厂使用的云服务机器。这些机器里面基本都安装了Linux操作。...按照进程的行为分类的话,分为两类: CPU消耗型: CPU消耗型,此类进程就是一直占用CPU忙于计算,CPU利用率贼高,比如编译android系统则就是CPU消耗型,服务的后台程序,都是默默无闻的一直干活...CPU消耗型和IO消耗型,调度更偏向谁? 前面说了CPU消耗型进程一般都是CPUCPU利用率很高;而IO消耗型大多数是等IO,比如等待键盘,鼠标,基本不占用CPU。...举个例子: 假如目前机器单核CPU。两个不同的任务分别使用大core和小core跑,然后对比下。

    1.3K11

    linux线程调度策略

    目录 linux线程调度策略 linux线程调度策略 这是一篇非常好的关于线程调度的资料,翻译自shed 从Linux 2.6.23开始,默认的调度为CFS,即"完全公平调度"(Completely...每个线程都包含一个调度策略以及一个静态的调度优先级sched_priority,调度根据系统所有线程的调度策略和静态优先级来决定如何进行调度。...SMP系统上会更加复杂,但整体的表现是一样的:调度会在任务组之间分配CPU时钟周期,包含大量CPU密集型进程的autogroup并不会以牺牲系统的其他任务为代价占用CPU周期。...proc/sched_debug中查看各个cpu core的调度情况,其中包含每个cgroup 服务的调度情况,如下面为docker服务core1调度情况 cfs_rq[1]:/system.slice...core允许,但一个线程不能同时多个core运行。

    4.8K30

    Redis高负载下的中断优化

    经过整治,我们将千兆网卡服务替换为了万兆网卡服务,本以为可以高枕无忧,但是没想到,在业务高峰时段,机器也竟然出现了丢包问题,而此时网卡带宽使用还远远没有达到瓶颈。...默认情况下,所有队列的硬中断都由CPU 0处理,因此对应的软中断逻辑也会在CPU 0处理,服务 TOP 的输出中,也可以观察到 %si 软中断部分,CPU 0的占比比其他core高出一截。...因此可以确认网卡的软中断机器分布非常不均,而且主要集中CPU 0。...例如下图中,将16进制的400转换成2进制后,为 10000000000,“1”第10位,表示亲缘性是第10个CPU Core。 ? 那为什么中断号只设置一个CPU Core呢?...NUMA SMP 架构 随着单核CPU的频率制造工艺的瓶颈,CPU制造商的发展方向也由纵向变为横向:从CPU频率转为每瓦性能。CPU也就从单核频率时代过渡到多核性能协调。

    3K110

    Linux的进程线程及调度

    管道是亲属进程(同一父进程创建出的进程)之间进行数据传输的。 3) 命名管道FIFO 命名管道可用于无亲属关系之前是进程间通信。...2 进程线程的实现本质 Linux调度实际是识别task_struct进行调度。...Linux线程本质就是进程,只是线程间共享所有资源。如上图所示。 每个线程都有自己的task_struct,因为每个线程可被CPU调度。多线程间又共享同一进程资源。这两点刚好满足线程的定义。...进程视角的top命令: 不带参数的top命令(默认情况),显示的是进程对单核CPU的利用率,例如,一个进程内有三个线程,主线程创建了线程1和线程2,线程1和线程2都调用一个while(1),则对双核CPU...3 进程调度 ? 3.1 实时进程调度 SCHED_FIFO:不同优先级按照优先级高的先跑到睡眠,优先级低的再跑;同等优先级先进先出。

    4.1K41

    Linux进程调度概述--Linux进程的管理与调度(十五)

    2 linux进程的分类 2.1 进程的分类 当涉及有关调度的问题时, 传统把进程分类为”I/O受限(I/O-dound)”或”CPU受限(CPU-bound)”....并且他们的响应时间要尽可能的短 视频音频应用程序, 机器人控制程序以及从物理传感收集数据的程序 注意 前面的两类分类方法一定程序上相互独立 例如, 一个批处理进程很有可能是I/O受限的(如数据库服务...此外如何进程中如果存在实时进程, 则实时进程总是普通进程之前被调度 3 linux调度的演变 一开始的调度是复杂度为O(n)的始调度算法(实际每次会遍历所有任务,所以复杂度为O(n)), 这个算法的缺点是当内核中有很多任务时...5种调度为什么只有3种调度实体 正常来说一个调度类应该对应一类调度实体, 但是5种调度类却只有了3种调度实体?...来通知内核必要的时间由主调度函数完成真正的调度工作, 此种做法称之为延迟调度策略 4.6 主调度schedule 主调度 schedule就是主调度工作函数, 在内核中的许多地方, 如果要将CPU

    3.6K20
    领券