0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux CFS虚拟时间

麦辣鸡腿堡 来源:技术简说 作者:董旭 2023-07-31 11:11 次阅读

**CFS调度算法:**摒弃固定时间片,采用进程权重值的比重来量化计算实际运行时间,并引入虚拟时间和真实时间的概念,真实时间就是在物理时钟下实际运行的时间,虚拟时间是实际运行时间与nice值为0对应的权值的比值。

**虚拟时间片引入:**假设进程不存在优先级区分,那么只要保证每个进程的实际运行时间相同即可,能做到绝对公平。调度时,调度器只需要记录每个进程的实际时间,每次调度时挑出【已经运行时间最短的进程】。

然而事实上每个进程会涉及不同的优先级,此时不同的进程应该由于优先级的原因导致【真实运行时间的所占权重】不同才行,那么如何评估进程运行时间的长短?如何选择下一个进程进行调度?

由此引入虚拟运行时间【希望不同的进程根据优先级在一个调度延迟【调度延迟就是保证每一个可运行进程都至少运行一次的时间间隔】内分配的物理时间通过一个公式计算得到一个相同的值,称这个值为虚拟时间】,当选择下一个进程执行的时候,找出虚拟时间最小的进程即可。虚拟时间要保证优先级高的进程的虚拟时间过得慢一些,优先级低的进程的虚拟时间快一些。

引入虚拟运行时间,CFS中就绪队列使用一棵以虚拟时间为键的红黑树将调度实体组织起来,利用红黑树的特性,虚拟时间最短的进程在红黑树的最左端,调度器每次选择位于红黑树最左端的虚拟时间对应的调度实体参与调度。

如下所示,通过cat/proc/$pid/sched查看某个进程调度信息,第二行se.vruntime就是虚拟运行时间:

图片

由上面的展示也可以看出来调度相关的这些信息是存储在调度实体se中,【每个进程描述符中都有每种调度类对应的调度实体,调度实体存放与该调度类相关的调度信息,并参与调度,CFS调度器对应的调度实体为struct sched_entity se,例如实时调度器对应的调度实体为struct sched_rt_entity rt】,CFS调度器的调度实体如下:

struct sched_entity
{
    struct load_weight      load;           /* for load-balancing负荷权重,这个决定了进程在CPU上的运行时间和被调度次数 */
    struct rb_node          run_node;
    unsigned int            on_rq;          /*  是否在就绪队列上  */

    u64                     exec_start;         /*  上次启动的时间*/

    u64                     sum_exec_runtime;
    u64                     vruntime;        /* 虚拟运行时间*/
    u64                     prev_sum_exec_runtime;
    /* rq on which this entity is (to be) queued: */
    struct cfs_rq           *cfs_rq;
    ...
};
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11227

    浏览量

    208920
  • CFS
    CFS
    +关注

    关注

    0

    文章

    7

    浏览量

    9047
收藏 人收藏

    评论

    相关推荐

    嵌入式工程师必会的 Linux 进程调度所有知识点

    vriture_runtime 最小的任务来调度。 为了能够快速找到虚拟运行时间最小的进程,Linux 内核使用红黑树来保存可运行的进程。CFS跟踪调度实体sched_entity的
    发表于 08-01 07:00

    基于RFID技术CFS智能仓库系统的解决方案

    系统简介集装箱货运站(简称CFS)是以装箱、拆箱和集拼、分拨为主要业务的运输服务机构,同时提供集装箱公路运输、箱务管理、报关报验、洗箱修箱等其他集装箱运输的相关服务。基于RFID的CFS智能仓库管理
    发表于 09-19 08:20

    基于Linux虚拟网卡的测试系统

    为了实现网络通信算法能够在单主机平台获得验证分析,提出基于Linux虚拟网卡的测试系统设计方案。并完成了系统软件设计.分析了Linux网络驱动框架原理,完成Linux
    发表于 11-13 11:23 2次下载
    基于<b class='flag-5'>Linux</b><b class='flag-5'>虚拟</b>网卡的测试系统

    Linux容器和虚拟机之间的区别差异分析

    自从Linux上的容器变得流行以来,了解Linux容器和虚拟机之间的区别变得更加棘手。本文将向您提供详细信息,以了解Linux容器和虚拟机之
    的头像 发表于 12-27 13:52 9018次阅读

    Linux负载均衡算法的瑕疵将修复

    Linux 内核开发者 Vincent Guittot 发现Linux 完全调度算法 CFS 存在瑕疵,修复之后将进一步提升调度性能。
    的头像 发表于 03-14 09:23 1901次阅读

    linux虚拟机的联网方法

    虚拟机安装linux系统无法上网的解决方法。
    发表于 05-31 09:27 1515次阅读
    <b class='flag-5'>linux</b><b class='flag-5'>虚拟</b>机的联网方法

    linux虚拟机怎么联网

    虚拟机安装linux系统无法上网的解决方法。
    发表于 06-03 09:29 2370次阅读

    虚拟机:Linux如何测试 DBUS Daemon

    虚拟机:Linux如何测试 DBUS Daemon
    的头像 发表于 06-22 16:35 4290次阅读
    <b class='flag-5'>虚拟</b>机:<b class='flag-5'>Linux</b>如何测试 DBUS Daemon

    Linux虚拟网络技术的资料讲解

    Linux虚拟化技术中,网络级别上最重要的三项技术是网络名称空间、线对和Veth桥接器或虚拟交换机技术。 今天,我们将指导您学习Linux网络虚拟
    的头像 发表于 06-27 09:35 3626次阅读

    Linux虚拟内存究竟是什么?

    前不久组内又有一次我比较期待的分享:”Linux虚拟内存”。
    的头像 发表于 06-21 16:41 1976次阅读
    <b class='flag-5'>Linux</b>的<b class='flag-5'>虚拟</b>内存究竟是什么?

    Linux虚拟运行时间的计算

    虚拟运行时间的计算 关于tick: tick是周期性的时钟中断,时钟中断驱动调度器runing,其周期间隔根据硬件频率的设定相关(T=1/f),如下: T=1/250 = 4ms,也就说时钟中断以
    的头像 发表于 07-31 11:15 707次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>虚拟</b>运行<b class='flag-5'>时间</b>的计算

    linux虚拟机使用教程

    引言:Linux虚拟机是一种方便且常用的技术,它允许用户在现有操作系统的基础上创建和运行另一个独立的操作系统。在本篇文章中,我们将提供一份详尽的教程,帮助你了解如何安装、配置和使用Linux
    的头像 发表于 11-17 10:06 1234次阅读

    虚拟linux怎么编写程序

    虚拟Linux上编写程序是一项非常常见且有用的任务。无论是开发一个简单的脚本、一个Web应用程序还是一个复杂的软件项目,Linux提供了强大的工具和环境来帮助你进行编程。本文将详细介绍如何在
    的头像 发表于 11-17 10:08 1687次阅读

    linux虚拟机怎么运行代码

    运行代码是Linux虚拟机中的常见操作,本文将详细介绍如何运行代码。 首先,要运行代码,你需要先安装好Linux虚拟机,并确保能够顺利运行。接下来,你需要打开
    的头像 发表于 11-17 10:12 4953次阅读

    怎么安装linux虚拟

    在计算机领域,虚拟机是一种软件程序,它允许在主操作系统上运行多个虚拟操作系统。Linux虚拟机在开发、测试和学习等环境中得到广泛应用。本文将详细介绍如何安装
    的头像 发表于 11-23 10:50 1063次阅读