一、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