作者 | dog250

责编 | 唐小引

头图 | CSDN 下载自东方 IC

出品 | CSDN

Linux 的进程调度器是通用的调度器,无论是 O(n)O(n),O(1)O(1),还是 CFS,均是基于统一的指标来对待所有进程的。也就是说,进程甚至无法自主退让。

只要确定了一个进程的优先级,无论是是什么调度算法,该进程的地位总是不会变化,如果能做到下面的策略就好了:

  • 系统中进程多了,就加速退让。

  • 系统中进程少了,就加速抢占。

  • 工人来了,就退让。

  • 经理来了,就抢占。

  • ……

考虑一个进程 A 在一个特定的系统中运行,它最多只能用 40%的 CPU,此时,如果有另外的待运行进程,那么这些进程自然分摊另外 60%的 CPU,如果再来一个进程 A 呢?显然,两个进程 A 的 CPU 时间均会减少。

能不能保证两个进程 A 仍然分别使用 40%的 CPU,然后其它进程分摊剩余 20%的 CPU 呢?很难!

你可能说可以配 group 啊,但是这必须有一个静态的配置过程,很难动态自适应。

换句话说,Linux 的调度器是非弹性的

下面的代码展示了一个简单的弹性调度:

#!/usr/local/bin/stap -gprobe kernel.function("__enqueue_entity")
{task = _task_of($se)pid = @cast(task, "struct task_struct")->pidif ($1 == pid) {_nr = $cfs_rq->nr_runningt = $se->vruntime;$se->vruntime = t + 3000000*(_nr - 1)}
}

意思是指定进程根据系统中负载的数量来退让:

  • 系统负载越高,指定进程占有 CPU 时间比例越低。

  • 系统负载越低,指定进程占有 CPU 时间比例越高。

来来来,看效果:

可以看到:

  • 当只有一个 loop 的时候,它占用 100%的 CPU。

  • 当再生一个 loop 的时候,它几乎和第一个 loop 平分 CPU。

  • 当越来越多的 loop 运行的时候,第一个 loop 的 CPU 份额逐渐降低。

  • 本是同根生,只有第一个 loop 被弹性了。

嗯,效果还行,但不够平滑。试试二次曲线, or 三次曲线?

$se->vruntime = t + 200*(_nr - 1)*_nr*_nr
// or
// $se->vruntime = t + 20000*(_nr - 1)*_nr

200 何来?调一手好参数是必要的。

此外,我这里弹性策略过于单一,其实是可以设计的足够复杂的,比如针对特定进程的特定策略,即便是简单的双斜率直线段,也比我这个 OK,是吧,不多说。

有人问,如何找到要修改的代码在哪里,只要对 Linux 内核的执行原理足够熟悉,这并不难,对于手艺人而言,阿基米德,鲁班,庖丁,黄道婆这些人的地位是堪比欧几里得,笛卡尔的。

原文链接:https://blog.csdn.net/dog250/article/details/108281228

更多精彩推荐
☞英特尔加入 GPU 战局,终用上 6nm 工艺?
☞全国院线总票房破 50 亿!影院复工后,哪些电影最受欢迎?
☞云计算到底是谁发明的?
☞马斯克脑机接口、BrainOS相继发布,不努力也能有出路了
☞从 Dagger 到 Hilt,谷歌为何执着于让我们用依赖注入?
☞以太坊Layer 2 扩容,V神为什么偏爱ZK rollup ?
点分享点点赞点在看

10 行代码玩转弹性调度的小把戏相关推荐

  1. 10 行代码玩转 NumPy!

    作者 | 天元浪子 来源 | Python作业辅导员 NumPy也可以画图吗?当然!NumPy不仅可以画,还可以画得更好.画得更快!比如下面这幅画,只需要10行代码就可以画出来.若能整明白这10行代码 ...

  2. 10行代码玩转python切片

    # coding:utf8 # [start:end:step] if __name__ == '__main__':list = [0,1,2,3,4,5,6,7,8,9]print(list[:: ...

  3. 小程序短信验证码登录,1分钟实现小程序发短信功能,借助云开发10行代码实现短信验证码登录小程序

    老规矩先看效果图 普通短信 验证码短信 今天被云开发官方告知,云开发支持发短信功能了,然后就迫不及待的来尝下鲜. 进入官方文档一看,云开发给咱们开发者的福利还真不小. 不仅仅可以很方便的使用短信功能, ...

  4. Python3,10行代码,我把情书写在她的照片里,她被我的才华征服了。

    10行代码把情书写在她的照片里 1.引言 2.Pillow 2.1 Pillow 安装 2.2 Pillow 介绍 2.2.1 新建及保存图片 2.2.2 重新绘制图片 2.2.3 图片合并 2.3 ...

  5. 10行代码制作群聊提醒小助手,再也不怕漏掉消息了

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 胸中有誓深于海,肯使神州竟陆沉? ...

  6. 如何用10行代码设置微信回复功能?

    大家还记得教会父母玩微信是什么时候吗?父母学会后,我们的生活就发生了「质」的变化,父母也许会 吐槽你的微信头像 不好,要你换一个头像.微信对于年轻的我来说就是一个支付工具罢了,要说好玩,花样的我觉得还 ...

  7. 铅笔素描算法_如何用10行代码将任何图像变成铅笔素描

    铅笔素描算法 by Rishav Agarwal 通过里沙夫·阿加瓦尔 如何用10行代码将任何图像变成铅笔素描 (How to turn any image into a pencil sketch ...

  8. 10行代码实现目标检测,请收下这份教程

     翻译 | 林椿眄 编辑 | 阿司匹林 出品 | AI科技大本营(公众号ID:rgznai100) 作为人工智能的一个重要领域,计算机视觉是一门可以识别并理解图像和场景的计算机及软件系统科学.该领 ...

  9. 什么,PyTorch还能开发新药?哈佛推出这款工具包,10行代码训练“药神”模型...

    萧箫 编辑整理 量子位 报道 | 公众号 QbitAI 最近,来自哈佛大学等机构的研究人员,开发出了一个AI"药神"工具包,为加速新冠疫情下的新药研发助力. 这款名为DeepPur ...

最新文章

  1. PHP写时复制, 变量复制和对象复制不同!!!
  2. Android入门之TabHost,TabWidget
  3. Parameter-Efficient Fine-tuning 相关工作梳理
  4. 微信小程序开源项目库汇总
  5. Spring基于XML装配Bean
  6. c 语言自行实现字符串常用库函数_学习c语言的7本书——你知道吗?
  7. Docker学习总结(65)—— 容器引擎 Docker 与 Podman 的详细对比分析
  8. 截取字符串,计算字符串字节大小,选择文件夹,上传文件
  9. wps中下划线怎么也去不掉_黑头究竟怎么形成的?为什么总是去不掉?那是因为你用错方法...
  10. 精心整理 | R语言中文社区历史文章合集(作者篇)
  11. 赛默飞世尔Thermo Fisher仪器电路板维修故障概述
  12. 芯片查询选型网址汇总
  13. 论win10专业版,企业版和教育版之间自由切换的方法和密钥
  14. 【信息系统项目管理师】【理解+题目】【信息系统与信息化】
  15. 爬虫爬取煎蛋网美女图片
  16. vue如何返回上一页效果
  17. 追加贷显示服务器出错,小蜜蜂财务软件常见问题汇总
  18. wireshark分析实战
  19. windows PCIe 工具: TeleScan
  20. [SLAM] 传感器总结

热门文章

  1. Java学习——Java基本的程序设计结构笔记(一)
  2. 如何禁用不需要的HTTP方法
  3. logging 模块 与 logging 固定模块
  4. 京佳名师点评:2008年2月23日海关面试题 京佳公务员考试培训学校
  5. 微软公司2008新技术预览大会
  6. 关于as400的基于关键字编译大揭秘
  7. [论文阅读] Nearest Neighbor Classifier Embedded Network for Active Learning
  8. grid++中打印表格时怎么让每页有打印表头_一张表学习EXCEL(七):打印也有方法...
  9. opencv+resize+padding+concate
  10. C++的占位符std::placeholder