调度器46—tick模式
一、tick简介
tick就是一个周期性的中断,周期通过 CONFIG_HZ 进行配置,一般常取值为100Hz、250Hz、1000Hz。Tick 每秒窃取CPU 100 到 1000 次,导致Icache、dcache 定期被丢弃。
低频(100 Hz)主要注重吞吐量、更少的中断、更少的 CPU 被盗、更少的缓存垃圾,而高频(1000 Hz)则更注重延迟、计时器和调度程序粒度、cputime 精度。 hrtimer 的出现降低了低频缺点对 poll(), epoll()...的使用的影响。
外受tick频率影响的还有:
Timekeeping (walltime, xtime, gettimeofday())
Jiffies: relative, internal clock
timer wheel: struct timer_list。
Posix CPU timers (itimer, timer_settime, RLIM_CPU, ...)
Cputime stats
Scheduler (local and global fairness, bandwidth, load/time accounting...)
RCU
二、Dynticks idle
在 idle 状态下周期的 tick 中断将 CPU 唤醒是对功耗有害的,在内核中通过 CONFIG_NO_HZ(旧内核版本 CONFIG_NO_HZ_IDLE) 来使能 dynamtic tick,下面函数是进入 tick idle 模式(CPU idle后不在其上产生周期tick中断)和退
出 tick idle 模式。进入 tick idle 模式后CPU可进入更深的 C-states。
void tick_nohz_idle_enter(void); //kernel/time/tick-sched.c
void tick_nohz_idle_exit(void); //kernel/time/tick-sched.c
Dynticks idle 在2007年合入到 Linux-2.6.21 版本中。
tick示意图:
idle后tick示意图:
三、Full dynticks
即使在繁忙的 CPU 上也需要停止 tick。在 Linux-3.10 中合入。目的是为了减少周期tick需要付出各种代价和要求。将tick的周期性驱动改为事件驱动(Poll driven -> Event driven)。
1. Full dynticks:Cputime accounting
配置 CONFIG_TICK_CPU_ACCOUNTING 进行使能,通过探测进行驱动的,监听 Syscall entry/exit、Exception entry/exit (traps, faults, ...)、Irqs entry/exit 来进行计数。
若配置的是 CONFIG_VIRT_CPU_ACCOUNTING_GEN(应该是与上面互斥的),相同的监听,但是计算的是jiffie时间值:
2. Full dynticks: RCU
(1) 静止状态 = CPU未使用RCU。所有CPU上报静态后宽限期结束,宽限期是一个所有 CPU 都参与的全局状态机。其中就有通过在 tick 中轮询静止状态。
(2) 扩展静止状态 = CPU不使用RCU且不对静止状态进行轮询。这是全局状态机的被动部分,无静态请求(即:不需要tick),对 dynticks 有用,Idle = 扩展静止状态,以强制节能。
(3) 用户空间RCU(未来可能会用起来),Userspace = extended quiescent(CONFIG_RCU_USER_QS),Dynticks可能存在于用户空间中。
3. Full dynticks: Timekeeping
Tickless busy CPU 可以使用 jiffies/walltime。不像dyntick idle需要timekeeping。需要1个周期性timekeeper:电源问题。现在用来自 Paul Mckenney 的很酷的新 CONFIG_NO_HZ_FULL_SYSIDLE 解决了。
4. Full dynticks: single task
如果不止一个任务运行(抢占),则需要局部公平。当 CPU 上只有单个任务时停止tick。未来:hrtick ?
5. Full dynticks: 1 Hz hack
调度程序还需要做一些工作:负载均衡、各种状态统计、负载平均等...。最多保持1Hz,直到解决。
四、实验
在tick idle状态中,CPU没有 arch_timer 中断了,但是还有其他中断产生。
参考:
Documentation/timers/NO_HZ.txt
(Nearly) full tickless operation in 3.10 – http://lwn.net/Articles/549580/
“The 2012 realtime minisummit” (LWN, CPU isolation discussion) – http://lwn.net/Articles/520704/
“NoHZ tasks” (LWN) – http://lwn.net/Articles/420544/
调度器46—tick模式的更多相关文章
- linux调度器源码分析 - 运行(四)
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 引言 之前的文章已经将调度器的数据结构.初始化.加入进程都进行了分析,这篇文章将主要说明调度器是如何在程序稳定运 ...
- 1. 企业级调度器LVS初识、工作模式详解
想学习更多相关知识请看博主的个人博客 1. LVS官网 LVS 时全球最流程的四层负载均衡开源软件. LVS 官网:http://www.linuxvirtualserver.org/ 2.Linux ...
- Erlang/OTP 17.0-rc1 新引入的"脏调度器"浅析
最近在做一些和 NIF 有关的事情,看到 OTP 团队发布的 17 rc1 引入了一个新的特性“脏调度器”,为的是解决 NIF 运行时间过长耗死调度器的问题.本文首先简单介绍脏调度器机制的用法,然后简 ...
- [原创]cocos2d-x研习录-第三阶 特性之调度器
在游戏中,经常会周期执行一些检测.操作或更新一些数据等,我们称之为调度.Cocos2D-x中将调度封装为类CCScheduler,方便在游戏开发中使用.我们一起来学习一下,CCScheduler具有哪 ...
- Cocos2d-X3.0 刨根问底(六)----- 调度器Scheduler类源码分析
上一章,我们分析Node类的源码,在Node类里面耦合了一个 Scheduler 类的对象,这章我们就来剖析Cocos2d-x的调度器 Scheduler 类的源码,从源码中去了解它的实现与应用方法. ...
- 工作流调度器azkaban(以及各种工作流调度器比对)
1:工作流调度系统的作用: (1):一个完整的数据分析系统通常都是由大量任务单元组成:比如,shell脚本程序,java程序,mapreduce程序.hive脚本等:(2):各任务单元之间存在时间先后 ...
- FreeRTOS 任务与调度器(2)
在上一篇我们介绍了FreeRTOS任务的一些基本操作和功能,今天我们会介绍一个很好很强大的功能——任务通知 任务通知可以在不同任务之间传递信息,它可以取代二值信号量.计数信号量.事件标志组.深度为1的 ...
- CFS调度器
一.前言 随着内核版本的演进,其源代码的膨胀速度也在递增,这让Linux的学习曲线变得越来越陡峭了.这对初识内核的同学而言当然不是什么好事情,满腔热情很容易被当头浇灭.我有一个循序渐进的方法,那就是先 ...
- 【TencentOS tiny】深度源码分析(2)——调度器
温馨提示:本文不描述与浮点相关的寄存器的内容,如需了解自行查阅(毕竟我自己也不懂) 调度器的基本概念 TencentOS tiny中提供的任务调度器是基于优先级的全抢占式调度,在系统运行过程中,当有比 ...
- FreeRTOS调度器
FreeRTOS----调度器 调度器的启动流程分析 当创建完任务之后,会调用vTaskStartScheduler()函数,启动任务调度器: void vTaskStartScheduler( vo ...
随机推荐
- 认识Spring MVC-概念-小demo
二:SpringMVC 异常码: 405:请求不允许 404:资源不存在 400:参数有问题 500:代码有问题 SpringMvc是Spring FrameWork提供的WEB组件,是目前的主流的实 ...
- CF1625D.Binary Spiders
\(\text{Problem}\) 大概就是给出 \(n\) 个数和 \(m\),要从中选最多的数使得两两异或值大于等于 \(m\) 输出方案 \(\text{Solution}\) 一开始的想法很 ...
- 免杀之:MSF后门metasploit-loader免杀
免杀之:MSF后门metasploit-loader免杀 目录 免杀之:MSF后门metasploit-loader免杀 1 metasploit-loader后门代码 2 在kali中编译metas ...
- DrCush_0813_风湿性疾病, 药物和新冠指南
风湿性疾病, 药物和新冠指南 原文网址: https://rheumnow.com/news/rheumatic-diseases-drugs-and-covid-19-guidelines Jack ...
- Postgres14.4(Docker安装)
Postgres14.4(Docker安装) 一,Docker拉取镜像 docker pull postgres:14.4 #检查镜像是否拉取成功 docker images | grep postg ...
- LeetCode-41 缺失的第一个正整数
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/first-missing-positive 题目描述 给你一个未排序的整数数组 nums ,请你 ...
- LeetCode-1996 游戏中弱角色的数量
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/the-number-of-weak-characters-in-the-game 题目描述 你正 ...
- Neighborhood Attention Transformer概述
0.前言 相关资料: arxiv github 论文解读(CSDN) 论文基本信息: 作者单位:Facebook 发表时间:arxiv2022(2022.4.14) 1.针对的问题 1.之前的视觉Tr ...
- 项目day1 -- vscode远程连接云服务器
刚学完go的语法,本来想着找个小项目试试手,发现大佬们都是vscode ssh到云服务器上做开发的.正好看到阿里云的学生认证后可以白嫖,就先嫖了个试试手 跟着各大教程简单配置了一下阿里云,安装vsco ...
- gunicorn的功能及使用方法
一.gunicorn的简介Gunicorn是基于unix系统,被广泛应用的高性能的Python WSGI HTTP Server.用来解析HTTP请求的网关服务.它通常是在进行反向代理(如nginx) ...