首页 > 其他分享 >调度器46—tick模式

调度器46—tick模式

时间:2023-03-01 22:56:00浏览次数:53  
标签:Full 46 调度 dynticks idle tick CONFIG CPU

一、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,直到解决。

 


参考:
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/

 

标签:Full,46,调度,dynticks,idle,tick,CONFIG,CPU
From: https://www.cnblogs.com/hellokitty2/p/17170209.html

相关文章

  • 代码随想录算法训练营Day28 回溯算法 | 491.递增子序列 46.全排列 47.全排列 II
    代码随想录算法训练营491.递增子序列题目链接:491.递增子序列给定一个整型数组,你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。示例:输入:[4,6,......
  • 不背锅运维:k8s调度之初探nodeSelector和nodeAffinity
    写在开篇在k8s的调度中,有强制性的nodeSelector,节点亲和性nodeAffinity、Pod亲和性podAffinity、pod反亲和性podAntiAffinity。本篇先对nodeSelector和nodeAffinity做个初......
  • CFR-746-Div-2解题报告
    VP做出来一道,补题又做出来3道。A.GamerHemose\(Problem\)你有\(n\)个武器,要打一个体力为\(H\)的敌人,第\(i\)个武器可以对敌人造成\(a_i\)的伤害,每把武器不能......
  • 动态规划(3)、746. 使用最小花费爬楼梯
    题目链接:746.使用最小花费爬楼梯-力扣(LeetCode) ......
  • 位运算-洛谷P1469 找筷子
    位运算的符号:与(&) and当两个数在二进制下对应位数上均为 11 时,得到的结果为 11.或(|) or当两个数在二进制下对应位数上有一个为 11 时,得到的结果为 11.......
  • K8S调度约束 (云原生)
    一、调度约束Kubernetes是通过List-Watch(监控)的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦。用户是通过kubectl根据配置文件,向APIServer......
  • 开源分布式任务调度系统就选:DolphinScheduler
    分布式任务调度这个话题是每个后端开发和大数据开发都会接触的话题。因为应用场景的广泛,所以有很多开源项目专注于解决这类问题,比如我们熟知的xxl-job。那么今天要给大家......
  • 详解数仓的网络调度与隔离管控能力
    摘要:GaussDB目前采用的FIFO调度机制,该调度机制无法满足用户的网络隔离需求和QoS需求,同时FIFO调度可能带来比较严重的抖动。本文分享自华为云社区《【玩转PB级数仓GaussDB(......
  • LeetCode算法训练-回溯 491.递增子序列 46.全排列 47.全排列 II
    欢迎关注个人公众号:爱喝可可牛奶LeetCode算法训练-回溯491.递增子序列46.全排列47.全排列IILeetCode491.递增子序列分析找出并返回所有数组中不同的递增子序列......
  • CH58x嘀嗒定时器(SysTick)
    一、 SysTick是一个定时器,只是它放在了NVIC中,主要的目的是为了给操作系统提供一个硬件上的中断(号称滴答中断)。只要不把它在SysTick控制及状态寄存器中的使能位清除,就永不......