LWN: small-task packing披了马甲卷土重来

Mastercam软件二次开发:使用C#进行Mastercam二次开发 C#(发音为“C Sharp”)是一种现代、面向对象的编程语言,由微软开发,首次发布于2000年。它结合了C和C++的强大功能,同时引入了Java的垃圾回收机制,使得C#在开发效率和运行性能之间找到了一个良好的平衡点。C#的设计目标是提高开发者的生产力,它支持多种编程范式,包括面向对象、泛型、委托和事件等,这使得它成为开发Windows应用程序、Web应用程序、游戏(尤其是使用Unity引擎)和企业级应用的理想选择。 阅读详情
640点击上方蓝色字关注我们~



TurboSched: the return of small-task packing

By Jonathan Corbet
July 1, 2019

CPU scheduling(处理器的调度)是个很难得到完美实现的工作,因为在选下一个运行的进程时,不是很容易能在保证公平性、尽量省电、尽量用足处理器的能力这几点之间平衡好。目前的系统架构也越来越复杂,情况并没有好转。例如在非对称系统(big.LITTLE这种架构)里的调度功能就很难实现好。还有某些最新处理器里支持的turbo mode也是一个例子。Parth Shah最近就提供了一个TurboSched patch set,希望能改善scheduler调度器的能力从而最大化利用这类处理器的性能。


对我们这些在计算机这行做了太多年的人来说,刚看到"turbo mode"的时候,第一反应就是1980年代的个人电脑上的一个“turbo"键。当时,按下这个键的话可以上CPU的时钟能让当时让人震惊的4.77Mhz提升到一个更快的的速度,主要是为了某些特殊应用场景下的,平时还是要使用普通的慢速模式。现代设计的turbo mode已经跟这个完全不同了,差异不仅仅是PC前面板上没有那个按键了。简单来说,现代的turbo mode会能让CPU以超出它设计速度的频率来运行一段时间,前提是系统的其他部分状态都合适,能够允许CPU超频。


因此Turbo mode会能够让CPU在运行某个特定进程的时候增加CPU的频率。不过,CPU平时肯定不能一直用turbo mode的速度来跑,因为这个高速模式只能持续一小段时间,否则CPU温度就会升得太高。因此scheduler的一个重要任务,就是要确保系统的功耗不能太高了。


因此,这意味着某些CPU需要被关闭。假如所有CPU都在全速运行,系统的功耗限制就会导致这些CPU都不能进入turbo mode。也就是说,这个模式只对某些特定workload有用,而对其他大多数场景来说没有帮助。


什么样的workload会更适合turbo mode呢?就是系统并没有完全利用全部资源(意味着某些CPU可以被关闭),此时有少数进程如果能拿到更高的CPU运行速度会很有帮助。当然,要想得到这个好处,首先得先确保turbo mode是可用的。当前kernel里的CPU scheduler会考虑很多因素之后采用一个平衡策略,不过并没有考虑“确保某些CPU能进入turbo mode”这个需求。因此对有能力进入turbo mode并且workload也确实需要turbo mode的系统来说,当前的scheduler的选择并不是最优的。例如当前scheduler设计目标是让系统能尽快响应,确保尽量把所有CPU利用满。因此这就决定了系统会把进程分散在各个CPU之上。如果某个睡眠进程被唤醒需要继续执行了,scheduler就会想着把这个进程放到某个最空闲的CPU上,这样就能让它尽快得到执行,而不是在run queue里面等待。通常来说这个选择是正确的,不过如果你的目标是让一些CPU能尽量长的时间都被power down从而其他CPU能进turbo mode的话,这样就不合适了,相反应该把新唤醒的进程放到某个已经在busy running的CPU上,从而让其他CPU继续睡着去吧。


这种调度行为(能把更多的进程塞到已经在running的CPU)就是TurboSched patch set的目标。不过这种packing(打包塞在一起)的决策需要很仔细的做好预先评判,否则的话进程的scheduling latency(调度延迟)就会大增,系统计算能力同时也没有得到充分利用。为了避免这些负面作用,TurboSched就只对“jitter”进程做packing。jitter进程就是指一些很少执行、并且对响应时间要求不高的进程。这类进程通常都是在做一些系统定期维护的动作,哪怕跟别的任务共享一个CPU也不会有太大影响。


那么马上就跳出一个问题:scheduler怎么能确定哪些进程是属于“jitter”进程呢?答案是它没法判断,因此需要靠user space来明确的标注出来。TurboSched是基于一个(尚未合入的)scheduler utilization clamping patch set,这个patch set允许系统管理员来对特定进程指定分配它能占有最多多少CPU资源。这样管理员就能避免某个进程导致CPU升频,哪怕这个进程一刻不停的运行。通过这种方式标注后,这些进程就能减少对CPU的占用了。而TurboSched认为对这些被限制了最大CPU占用率的进程,就不应该浪费一个正在睡眠的CPU来执行它。


在这次的patch里面实现的逻辑其实更进了一步,明确规定jitter进程不可以被放到一个<12.5%利用率的CPU上去执行。这是因为这种利用率很低的CPU很可能会很快进入idle状态,如果放个新的进程上去的话就可能导致CPU没法进idle了,大家都不期望有这种结果。当然,大家也都不想看到jitter进程堆积在一起之后让某些CPU负载过重,所以代码里也有一个上限限制,确保不要对某个CPU塞太多jitter进程上去。


这个方案看起来可能对有些开发者很熟悉,很像是2012年(甚至更早)的时候讨论的small-task packing算法。small-task packing方案一直没能合入mainline,所以人们很容易想到一个问题,这次的方案会有更大机会合入吗?这次最大的区别在于对jitter进程的明确标注这里,它使得TurboSched在大多数不需要利用这个功能的系统上,都没有任何影响。也就是说如果没有这些被限制了占用率的进程的话,scheduler就跟当前的运行模式没有任何区别,系统也就不会有任何性能差异。

与此同时,根据patch里画的一个ASCII图示来看,对某些workload可能会有高达13%的性能改善。当然不会是所有workload都有这个改善,不过在某些特定系统上(具有几个行为固定并且仔细调试过的workload),TurboSched就能让系统运行的更好。再加上这个patch的改动对其他场景下基本上没有什么负面影响,这次可能真的能够合入scheduler code base。


全文完

LWN文章遵循CC BY-SA 4.0许可协议。

极度欢迎将文章分享到朋友圈 
热烈欢迎转载以及基于现有协议上的修改再创作~


长按下面二维码关注:Linux News搬运工,希望每周的深度文章以及开源社区的各种新近言论,能够让大家满意~


640?wx_fmt=jpeg

R语言使用party包中的ctree函数构建条件推理决策树(Conditional inference trees)、使用plot函数可视化训练好的条件推理决策树、条件推理决策树的叶子节点的阴影区域表 R语言使用party包中的ctree函数构建条件推理决策树(Conditional inference trees)、使用plot函数可视化训练好的条件推理决策树、条件推理决策树的叶子节点的阴影区域表示的是阳性样本的比例 阅读详情

相关推荐

1.安装EMQX服务器

阿里云;EMQX

hfh8130的博客 5311

探索未来|一文看懂小米年度技术峰会 · 软件技术专场

小米年度技术峰会 DAY2 为软件技术专场软件技术是小米最活跃的标签,也是小米新一代信息技术的灵魂。引领新一轮科技创新的群体突破,催生网络化协同、智能化生产、个性化定制、服务型制造等科技业的新模式、新业态。MIUI软件驱动着“手机×AIoT”战略开疆拓土,在软件专场,大家可以感知到小米软件的技术储备实力,同时一起探索小米未来如何用软件进一步改变生态,让每个人都感受到科技的乐趣。小米手机部软件部副总...

小米云技术 3081

基于BFQ19S的共射振荡器设计(克拉泼电容三点式)

根据理论,设计出如下LC振荡器: 一、设计初期是使用= 400Mhz作为目标值计算的, 但由于计算值与实际值有差别,所以使用计算值附近的元器件代替使用;最终该电路的L1=82nH , D1 = 5.6pF, C11=18pF, C12 = 18pF ; 另外R3= 600Ω, R4取27k , C9取10pF; 该电路实际的震荡频率为主要为L1,D1 决定,所以其震荡频率约为 == 235Mhz; 二、由于实际得到的频率比目标频率低太多,所以调整电路使其能达到400M左...

rzchong1988的专栏 3704

Linux Kernel Utilization Clamping简介

随着linux内核调度技术的不断演进,目前存在多个调度类(stop、deadline、rt、cfs、idle)以满足不同性质和要求的任务(task)的调度需求。对于用户空间来说,完全公平...

内核工匠 1万+

SLAM轨迹评估神器evo实战:从GPS到TUM格式的完整转换指南(附Python代码)

本文详细介绍了如何使用evo工具将GPS数据转换为TUM格式,以便进行SLAM轨迹评估。通过Python代码实现GPS到笛卡尔坐标的精确转换,并提供了完整的处理流程和实战案例,帮助开发者轻松完成从原始GPS数据到精确轨迹评估的全过程。特别适用于ORB-SLAM等视觉SLAM算法的性能验证。

weixin_29074295的博客 292

Linux | i.MX6ULL Mqtt 移植教程

本文介绍了MQTT协议在物联网中的应用及其实现工具Mosquitto的移植过程。使用Ubuntu 16.04环境和gcc交叉编译器,详细说明了从X86平台安装测试到ARM开发板移植的完整步骤。重点包括:Mosquitto的安装配置、服务启动测试方法、依赖库openssl和libuuid的交叉编译过程、路径参数修改要点,以及最终在开发板上的功能测试验证。文中提供了具体的命令操作和路径修改示例,强调路径一致性对编译成功的重要性。该移植方案实现了轻量级MQTT协议在嵌入式设备中的应用。

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 138

LWN: 最新的I/O带宽仲裁算法io.weight

点击上方蓝色字关注我们~The io.weight I/O-bandwidth controllerByJonathan CorbetJune 28, 2019kern...

Linux News搬运工 2769

群晖如何安装软路由OpenWrt/iStoreOS作为旁路由(含网络设置、设置密码、还原出厂设置等linux命令ipk包)

openwrt的固件。

XiaoqiangClub的博客 7016

LWN:利用openat2()来限制文件路径查询

点击上方蓝色“Linux News搬运工”关注我们~Restricting path name lookup with openat2()ByJonathan Corb...

Linux News搬运工 1012

解决Gradle中NPM命令失效问题

摘要:本文分析了IntelliJ IDEA中Gradle执行npm命令失败的问题,报错显示"npm"文件不存在。通过确认npm安装路径、检查系统PATH与Gradle环境的差异,提出两种解决方案:1) 在build.gradle中使用npm绝对路径;2) 通过launchctl修改用户PATH。实例展示了如何修改Gradle脚本或系统配置来解决该问题,指出跨平台开发中环境变量配置的重要性。文章为开发者提供了处理类似问题的实用方法。

2501_90323865的博客 90

(八)DDR_PHY架构及功能——(PUB组成、初始化及Training流程、Clock关系)

文章目录一、DDR_PHY结构组成1.1、DDR Memory子系统1.2、DDR_PHY架构组成1.3、PUB模块功能实现流程1.3.1、DDR系统初始化流程1.3.2、PLL初始化流程 一、DDR_PHY结构组成 1.1、DDR Memory子系统   Memory子系统主要由DDR Controller和DDR_PHY(含DDR_IO)两个部分组成。DDR Controller主要承担其它子系统(如CPU)与Memory子系统进行数据交互时的传输效率及调度,DDR_PHY主要负责数据交互过程中的传输速

Mr.翟的博客 1万+

LWN: Linux 5.3合入窗口进展 part 1

点击上方蓝色字关注我们~5.3 Merge window, part 1ByJonathan CorbetJuly 12, 2019在Janathan撰写此文的时候,已...

Linux News搬运工 349

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

LWN:Linux 5.3会支持BPF里的有限循环代码

点击上方蓝色“Linux News搬运工”关注我们~Bounded loops in BPF for the 5.3 kernelJuly 31, 2019This ar...

Linux News搬运工 530

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

LWN:简单又高效!利用bpftrace分析kernel行为

点击上方蓝色字关注我们~Kernel analysis with bpftraceJuly 18, 2019本文由Brendan Gregg 提供在2019 Linux...

Linux News搬运工 2477

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LWN: 利用TCP SACK机制让远端Linux崩溃

点击上方蓝色字关注我们~The TCP SACK panicByJake EdgeJune 19, 2019Selective acknowledgment(SACK...

Linux News搬运工 1004

LWN: FreeBSD已经26周年啦!

点击上方蓝色字关注我们~FreeBSD turns 26June 21, 2019This article was contributed bySean KernerF...

Linux News搬运工 548

LWN:内核何时能合入bcachefs?

点击上方蓝色字关注我们~ Bcachefs gets closer ByJonathan CorbetJuly 11, 2019 每当要给Linux增加新的文件系统支...

Linux News搬运工 1369

LWN:旧金山开源投票系统的现状

点击上方蓝色“Linux News搬运工”关注我们~Open-source voting for San FranciscoByJake EdgeOSS NA译者按:本...

Linux News搬运工 344

LWN: XFS以及稳定内核发布!

关注了就能看到更多这么棒的文章哦~XFS, stable kernels, and -rc releasesBy Jonathan CorbetDecember 3, 2020DeepL...

Linux News搬运工 301

LWN: Linux 5.3合入窗口进展 part 2

点击上方蓝色字关注我们~5.3 Merge window, part 2ByJonathan CorbetJuly 22, 2019在5.3 merge window结...

Linux News搬运工 438

LWN: Linux稳定分支状况以及相应测试

点击上方蓝色字关注我们~Testing and the stable treeByJake EdgeMay 28, 2019LSFMMSasha Levin在2019 ...

Linux News搬运工 547

LWN: 允许非root用户访问bpf

点击上方蓝色字关注我们~Providing wider access to bpf()ByJonathan CorbetJune 27, 2019bpf()系统调用,可...

Linux News搬运工 1059

LWN:不在CVE列表里的安全漏洞

点击上方蓝色字关注我们~ CVE-less vulnerabilities ByJake EdgeJune 25, 2019 近年来,free software里面有...

Linux News搬运工 680

LWN:ION变了个形,就要打入Linux内部了!

点击上方蓝色字关注我们~Destaging IONJuly 9, 2019This article was contributed by Marta Rybczyńska...

Linux News搬运工 2078

LWN:Linux kernel要有几种test framework?

点击上方蓝色字关注我们~How many kernel test frameworks?ByJake EdgeJune 5, 2019Linux kernel的自测试框...

Linux News搬运工 1713

LWN:vDSO,32位时间,以及seccomp功能

点击上方蓝色“Linux News搬运工”关注我们~vDSO, 32-bit time, and seccompByJonathan Corbetseccomp()机制...

Linux News搬运工 361
上一篇: LWN: Linux内存管理代码合入的工作流程
下一篇: LWN: 最新的I/O带宽仲裁算法io.weight
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值