[转帖]NOHZ = ON如何影响Linux内核中的do_timer()?
https://www.jb51.cc/faq/897483.html
如何解决NOHZ = ON如何影响Linux内核中的do_timer()??
首先,让我们了解什么是tickless kernel(NOHZ=On或CONfig_NO_HZ集合)以及从何将其引入Linux内核的动机。2.6.17
从http://www.lesswatts.org/projects/tickless/index.php中,
传统上,Linux内核为每个cpu使用一个定期计时器。该计时器完成了许多工作,例如进程记帐,调度程序负载平衡以及维护每个cpu计时器事件。较旧的Linux内核使用频率为100Hz的计时器(每秒100个计时器事件或每10ms一个事件),而较新的内核使用250Hz(每秒250个事件或每4ms一个事件)或1000Hz(每秒1000个事件或一个事件)每1ms)。
这种周期性的计时器事件通常称为“计时器滴答”。计时器滴答在设计上很简单,但是有一个明显的缺点:计时器滴答是周期性发生的,而不管处理器状态是空闲还是忙。如果处理器空闲,则必须每1、4或10毫秒从节能睡眠状态中唤醒。这会耗费大量能量,消耗笔记本电脑的电池寿命,并导致服务器不必要的功耗。
通过“无中断空闲”,Linux内核消除了cpu空闲时的这种定期定时器滴答。这样,cpu可以保持省电状态的时间更长,从而降低了整体系统的功耗。
因此,降低功耗是无滴答内核的主要动机之一。但实际上,在大多数情况下,性能会因功耗降低而受到影响。对于台式计算机,性能是最重要的问题,因此,您会看到大多数台式计算机都NOHZ=OFF运行良好。
用Ingo Molnar的话来说
无滴答内核功能(CONfig_NO_HZ)启用“按需”计时器中断:如果在系统闲置时1.5秒内没有计时器到期,那么系统将完全闲置1.5秒。这应该可以带来更凉爽的cpu和更低的功耗:在我们的(x86)测试箱上,我们测量了从IRZ到每秒1-2个计时器中断的有效IRQ速率。
现在,让我们尝试回答您的查询-
我无法理解的是高分辨率计时器如何影响do_timer?
如果系统支持高分辨率计时器,则10ms在大多数系统上,计时器中断的发生频率可能比平时高。也就是说,每个计时器都试图通过利用系统功能并通过更快地触发计时器中断来使系统更具响应性100us。因此,通过NOHZ选择,这些计时器会冷却下来,因此do_timer
即使高分辨率硬件处于睡眠状态,持久性时钟也能够每10毫秒执行一次do_timer
是的,它有能力。但是的意图NOHZ恰恰相反。为防止定时器频繁中断!
其次,如果do_timer何时不执行,则意味着某些进程在理想情况下没有获得分时
正如注释中所指出的,cafNOHZ不会导致进程调度的频率降低,因为它仅在cpu空闲时启动(换句话说,当没有进程可调度时才启动)。仅流程记帐工作将在延迟的时间完成。
为什么do_timer错过了截止日期?
如所阐述的,这是 NOHZ
我建议您以tick-sched.c内核源代码为起点。搜索CONfig_NO_HZ并尝试理解添加了新的功能NOHZ特性
这是一项旨在测量不滴答内核影响的测试
解决方法
在一个简单的实验中,我设置NOHZ=OFF并用来printk()打印do_timer()函数被调用的频率。它在我的计算机上每10毫秒被调用一次。
但是,如果NOHZ=ON这样,就会有很多抖动do_timer()被调用。在大多数情况下,它确实每10毫秒被调用一次,但有时它会完全错过最后期限。
我已经研究了do_timer()NOHZ和NOHZ。do_timer()是负责更新jiffies值的功能,还负责流程的循环调度。
NOHZ功能可关闭系统上的高分辨率计时器。
我无法理解的是高分辨率计时器如何影响do_timer()?即使高分辨率硬件处于睡眠状态,持久性时钟也足以do_timer()每10 ms
执行一次。其次,如果do_timer()在应有的时间未执行,则意味着某些进程在理想情况下没有获得应有的时分。大量的搜索确实表明,对于许多人来说,许多应用程序在时开始工作得更好NOHZ=OFF。
长话短说,如何NOHZ=ON影响do_timer()?
为什么do_timer()错过最后期限?
[转帖]NOHZ = ON如何影响Linux内核中的do_timer()?的更多相关文章
- Linux内核中影响tcp三次握手的一些协议配置
在Linux的发行版本中,都存在一个/proc/目录,有的也称它为Proc文件系统.在 /proc 虚拟文件系统中存在一些可调节的内核参数.这个文件系统中的每个文件都表示一个或多个参数,它们可以通过 ...
- 【转】 Linux内核中读写文件数据的方法--不错
原文网址:http://blog.csdn.net/tommy_wxie/article/details/8193954 Linux内核中读写文件数据的方法 有时候需要在Linuxkernel--大 ...
- Linux内核中的软中断、tasklet和工作队列具体解释
[TOC] 本文基于Linux2.6.32内核版本号. 引言 软中断.tasklet和工作队列并非Linux内核中一直存在的机制,而是由更早版本号的内核中的"下半部"(bottom ...
- Linux内核中锁机制之RCU、大内核锁
在上篇博文中笔者分析了关于完成量和互斥量的使用以及一些经典的问题,下面笔者将在本篇博文中重点分析有关RCU机制的相关内容以及介绍目前已被淘汰出内核的大内核锁(BKL).文章的最后对<大话Linu ...
- Linux内核中锁机制之内存屏障、读写自旋锁及顺序锁
在上一篇博文中笔者讨论了关于原子操作和自旋锁的相关内容,本篇博文将继续锁机制的讨论,包括内存屏障.读写自旋锁以及顺序锁的相关内容.下面首先讨论内存屏障的相关内容. 三.内存屏障 不知读者是是否记得在笔 ...
- Linux内核中锁机制之信号量、读写信号量
在上一篇博文中笔者分析了关于内存屏障.读写自旋锁以及顺序锁的相关内容,本篇博文将着重讨论有关信号量.读写信号量的内容. 六.信号量 关于信号量的内容,实际上它是与自旋锁类似的概念,只有得到信号量的进程 ...
- Linux内核中锁机制之原子操作、自旋锁
很多人会问这样的问题,Linux内核中提供了各式各样的同步锁机制到底有何作用?追根到底其实是由于操作系统中存在多进程对共享资源的并发访问,从而引起了进程间的竞态.这其中包括了我们所熟知的SMP系统,多 ...
- 大话Linux内核中锁机制之RCU、大内核锁
大话Linux内核中锁机制之RCU.大内核锁 在上篇博文中笔者分析了关于完成量和互斥量的使用以及一些经典的问题,下面笔者将在本篇博文中重点分析有关RCU机制的相关内容以及介绍目前已被淘汰出内核的大内核 ...
- 大话Linux内核中锁机制之信号量、读写信号量
大话Linux内核中锁机制之信号量.读写信号量 在上一篇博文中笔者分析了关于内存屏障.读写自旋锁以及顺序锁的相关内容,本篇博文将着重讨论有关信号量.读写信号量的内容. 六.信号量 关于信号量的内容,实 ...
- 大话Linux内核中锁机制之内存屏障、读写自旋锁及顺序锁
大话Linux内核中锁机制之内存屏障.读写自旋锁及顺序锁 在上一篇博文中笔者讨论了关于原子操作和自旋锁的相关内容,本篇博文将继续锁机制的讨论,包括内存屏障.读写自旋锁以及顺序锁的相关内容.下面首先讨论 ...
随机推荐
- 盘点华为云GaussDB(for Redis)六大秒级能力
摘要:盘点高斯Redis的秒级能力,包括扩容.备份.删除.启动等. 本文分享自华为云社区<华为云GaussDB(for Redis)揭秘第20期:六大秒级能力盘点>,作者: 高斯Redis ...
- 单向数据流-从共享状态管理:flux/redux/vuex漫谈异步数据处理
不管是Vue,还是 React,都需要管理状态(state),比如组件之间都有共享状态的需要. 什么是共享状态? 比如一个组件需要使用另一个组件的状态,或者一个组件需要改变另一个组件的状态,都是共享状 ...
- ByteHouse+Apache Airflow:高效简化数据管理流程
Apache Airflow 与 ByteHouse 相结合,为管理和执行数据流程提供了强大而高效的解决方案.本文突出了使用 Apache Airflow 与 ByteHouse 的主要优势和特点,展 ...
- MySQL 事务回滚。在执行删除、更新等操作时,防止误操作
SQL Server 事务执行.回滚 MySQL 事务回滚.在执行删除.更新等操作时,防止误操作 SELECT * FROM TABLE_NAME I WHERE I.TRANS_NO='P-2019 ...
- WebService autoconfigure.web.servlet.DispatcherServletPath
SpringBoot WebService 源代码:https://gitee.com/VipSoft/VipWebService SpringBoot 整合 WebService cxf 报错 Co ...
- MetaGPT day01: MetaGPT作者代码走读、软件公司初始示例
LLM发展历史 - 2013年word2vec提出,但效果不好 - 2017年Transformer结构提出,降低网络复杂度 - 2018年BERT预训练语言模型效果显著提升 - 2019年GPT-3 ...
- CO41创建生产订单维护增强字段
一.CO41计划订单中新增增强字段 报表中新增字段,并可维护,当点击转换创建生产订单时,将四个字段的值,维护到生产订单对应的字段中 二.增强结构 在SFC_POCO中新增对应的字段 三.屏幕增强 找到 ...
- 【MFC】CSingleLock的使用
转载文章:CSingleLock的使用 // 先看看其代码: // 声明 class CSingleLock { // Constructors public: CSingleLock(CSyncOb ...
- 阿里云 Serverless 应用引擎(SAE)2
8月7日,阿里云 Serverless 应用引擎(SAE)2.0正式公测上线!全面升级后的SAE 2.0具备极简体验.标准开放.极致弹性三大优势,应用冷启动全面提效,秒级完成创建发布应用,应用成本下降 ...
- windows 系统关闭占用端口的应用
开发中有时候开发工具把程序关闭了,但是后台并没有真正关闭程序,导致再次启动相同端口的程序时报端口已经被使用的错误,这时如何强制关闭已占用的端口 1.打开dos对话框 2.查找被占用的端口的进程号 ne ...