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

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

3天内不再提示

为什么说内核线程放入SCHED_FIFO的做法毫无意义?

lhl545545 来源:Linuxer 作者:Linuxer 2020-06-09 15:21 次阅读

背景Linux会把进程分为普通进程和实时进程,普通进程采用CFS之类调度算法,而实时进程则是采用SCHED_FIFO或SCHED_RR。无论优先级高低,实时进程都会优先于SCHED_NORMAL中的所有进程先执行,因为后者里面都是普通的非实时进程。

具体可以参看Linux阅码场早期文章: 宋宝华:关于Linux进程优先级数字混乱的彻底澄清

内核线程的优先级Linux内核会将大量(并且在不断增加中)工作放置在内核线程中,这些线程是在内核地址空间中运行的特殊进程。大多数内核线程运行在SCHED_NORMAL类中,必须与普通用户空间进程争夺CPU时间。但是有一些内核线程它的开发者们认为它们非常特殊,应该比用户空间进程要有更高优先级。因此也会把这些内核线程放到SCHED_FIFO中去。

那么问题来了,某个内核线程的实时优先级到底该设为多少呢?

要回答这个问题,不仅需要判断这个线程相对于所有其他实时线程是否更加重要,还要跟用户态的实时进程比较谁更重要。这是一个很难回答的问题,更何况在不同的系统和工作模式下这个答案很有可能还会各不相同。所以一般来说,内核开发人员也就是看心情直接随便选一个实时优先级。

现在的一些内核实时线程如下:

最近大神Peter Zijlstra又看到有内核开发者随便给内核线程设置优先级,终于看不下去了, 指责这种把内核线程放入SCHED_FIFO的做法毫无意义:

“the kernel has no clue what actual priority it should use for various things, so it is useless (or worse, counter productive) to even try”

所以他发了一个系列[PATCH 00/23] sched: Remove FIFO priorities from modules 把设置内核线程优先级的接口干脆都给删了,省得再有人瞎搞。

这个系列Patch(点击阅读原文可直达)主要做了下面几件事情:

删除了原有的sched_setschedule() / sched_setattr() 接口

增加了

sched_set_fifo(p)

sched_set_fifo_low(p)

sched_set_normal(p, nice)

其中调用sched_set_fifo()会将指定进程放到SCHED_FIFO类中,其优先级为50——这只是min和max之间的一半位置。

对于需求不那么迫切的线程,sched_set_fifo_low()将优先级设置为最低值(1)。

而调用sched_set_normal()会将线程返回给定好的值SCHED_NORMAL类。

通过只留下这三个接口可以避免开发者们再不停地去随机选取内核线程优先级,因为这样本来毫无意义,当然如果需要的话系统管理员还是可以按需调整不同进/线程的优先级。

到目前为止,这个系列Patch已经有不少得到Reviewed-by,相信如果合入后,内核线程混乱的优先级状况会得到持续改善。
责任编辑:pj

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内核
    +关注

    关注

    3

    文章

    1357

    浏览量

    40177
  • Linux
    +关注

    关注

    87

    文章

    11191

    浏览量

    208627
收藏 人收藏

    评论

    相关推荐

    特斯拉计划明年上半年推出经济型电动汽车

    明确表示,这款低价电动汽车将配备无人驾驶技术,因为不包含该技术的低价电动汽车在他看来将“毫无意义”,并确认其价格将低于3万美元(当前约合21.4万元人民币)。
    的头像 发表于 10-24 14:09 501次阅读

    为什么电瓶车上楼充电引起的电气火灾还是一直发生?

    01引言 近日又发生电瓶车火灾,然后主管部门,物业,等等又是各种发文,不要如何如何,几乎毫无意义,还是要从根本上解决问题,才能高效排除隐患。不单纯本次的原因,纵观这么多次火灾,主要是电动车或电动车
    的头像 发表于 09-18 16:32 257次阅读
    为什么电瓶车上楼充电引起的电气火灾还是一直发生?

    如何解决电动车电瓶上楼充电起火问题

    易允恒 安科瑞电气股份有限公司 201801 01引言 近日又发生电瓶车火灾,然后主管部门,物业,等等又是各种发文,不要如何如何,几乎毫无意义,还是要从根本上解决问题,才能高效排除隐患。不单纯本次
    的头像 发表于 09-18 15:09 254次阅读
    如何解决电动车电瓶上楼充电起火问题

    “快、准、稳”——阿普奇AK5在机械手领域的应用解决方案

    在如今的工业制造上,工业机器人的身影随处可见,它代替人类完成许多繁重、重复或者是毫无意义的流程性作业,回望工业机器人的发展,机械手可以说是最早出现的工业机器人,它能模仿人手和臂的某些动作功能,以固定
    的头像 发表于 08-09 14:50 231次阅读
    “快、准、稳”——阿普奇AK5在机械手领域的应用解决方案

    使用FX3同步fifo两地址线能够配置成四线程模式吗?

    使用FX3同步fifo两地址线能够配置成四线程模式吗,也就是两个端点输出,两个端点输入,麻烦大佬回复一下!?
    发表于 07-02 07:45

    一加联合宁德新能源推出冰川电池,专为高性能手机打造

    续航,和抛开续航谈性能,都毫无意义。一加冰川电池是专为高性能手机打造的电池技术,它将引领智能手机的续航革命。” 高性能一直是一加的产品基因,而好的续航体验则是让高性能长久释放的重要基础。一加采用 3 大全新自研技术,10 大行业领先技术,专为高性能手
    的头像 发表于 06-21 09:09 369次阅读
    一加联合宁德新能源推出冰川电池,专为高性能手机打造

    NTP网络时间服务器解决安防时间同步问题

    安防视频监控中,如果监控录像设备显示时间不准确,或者不同设备间时间混乱,系统时间无法准确调整,亦或自动校对时间不准,那保存下来的视频资料会因此失去参考价值,而变得毫无意义。 根据现场施工总结和客户
    的头像 发表于 06-06 15:38 307次阅读
    NTP网络时间服务器解决安防时间同步问题

    同步FIFO和异步FIFO区别介绍

    1. FIFO简介 FIFO是一种先进先出数据缓存器,它与普通存储器的区别是没有外部读写地址线,使用起来非常简单,缺点是只能顺序读写,而不能随机读写。 2. 使用场景 数据缓冲:也就是数据写入过快
    的头像 发表于 06-04 14:27 1158次阅读
    同步<b class='flag-5'>FIFO</b>和异步<b class='flag-5'>FIFO</b>区别介绍

    马斯克称特斯拉的FSD系统不需要激光雷达

    万美元的激光雷达设备。 然而,埃隆·马斯克对此回应称,特斯拉已经不需要激光雷达技术来收集自动驾驶所需的“基准真实数据”。 他进一步明确表示:“我们甚至不再需要它们来做这件事了。 ”这与马斯克2015年的立场相呼应,当时他公开批评激光雷达“毫无意义”,认
    的头像 发表于 05-14 18:46 1026次阅读
    马斯克称特斯拉的FSD系统不需要激光雷达

    工业机器人伺服电机测试方案

    机械行业的热门话题之一。随着时代的发展,工业机器人将继续向更智能、更精细的方向发展,逐渐取代人类完成繁重、重复或毫无意义的流程性作业,推动工业制造的进步和发展。根
    的头像 发表于 03-28 08:32 569次阅读
    工业机器人伺服电机测试方案

    TLF35584寄存器VMONSTAT出现异常行为的原因?

    (跟踪器)正常也毫无意义换句话说,当 QVR 无法运行时,QT1 和 QT2 能正常工作是没有意义的。 这就是我在 VMONSTAT 上看到的内容: 另外一个问题是,VMONSTAT
    发表于 01-22 06:16

    数字时代:关于数据可视化的定义/优势及示例

    毫无意义和难以管理。这就是数据可视化发挥关键作用的地方。 数据可视化的定义 “数据可视化”的定义是广泛的。但大多数定义侧重于数据与计算机技术之间的联系,以便将数据转换为视觉形式。不管如何,数据的可视化表示是这些定
    的头像 发表于 12-12 18:04 789次阅读
    数字时代:关于数据可视化的定义/优势及示例

    内核hotplug回调线程唤醒

    hotplug回调线程唤醒 内核使用以下流程唤醒特定cpu的hotplug线程,用于执行实际的cpu启动流程: 由于cpu启动时需要与一系列模块交互以执行相应的准备工作,为此内核为其定
    的头像 发表于 12-05 15:55 396次阅读
    <b class='flag-5'>内核</b>hotplug回调<b class='flag-5'>线程</b>唤醒

    如何查看一个线程的ID

    1.什么是线程? linux内核中是没有线程这个概念的,而是轻量级进程的概念:LWP。一般我们所说的线程概念是C库当中的概念。 1.1线程
    的头像 发表于 11-13 14:38 1220次阅读
    如何查看一个<b class='flag-5'>线程</b>的ID

    Linux线程线程与异步编程、协程与异步介绍

    线程之间的切换不需要陷入内核,但部分操作系统中用户态线程的切换需要内核线程的辅助。 协程是编程语言(或者 lib)提供的特性(协程之间的切
    的头像 发表于 11-11 11:35 991次阅读
    Linux<b class='flag-5'>线程</b>、<b class='flag-5'>线程</b>与异步编程、协程与异步介绍