我是靠谱客的博主 结实日记本,最近开发中收集的这篇文章主要介绍CONFIG_NO_HZ (aka dynamic tick functionality),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

CONFIG_NO_HZ ,也就是tickless mode, 这个定义启用了周期时钟的一个新特性,就是动态时钟.主要的改进就是让系统在idle 时可以停止tick,降低系统功耗. 在CPU有workload 时恢复正常的tick,产生周期性的Tick事件.

/*
 * Enable / Disable tickless mode
 */
static int __init setup_tick_nohz(char *str)
{
    if (!strcmp(str, "off"))
        tick_nohz_enabled = 0;
    else if (!strcmp(str, "on"))
        tick_nohz_enabled = 1;
    else
        return 0;
    return 1;
}

__setup("nohz=", setup_tick_nohz);

通过下面的函数停止Tick

void tick_nohz_stop_sched_tick(int inidle)

/**
 * tick_nohz_stop_sched_tick - stop the idle tick from the idle task
 *
 * When the next event is more than a tick into the future, stop the idle tick
 * Called either from the idle loop or from irq_exit() when an idle period was
 * just interrupted by an interrupt which did not cause a reschedule.
 */

Linux中的时钟事件都是由一个周期时钟提供,不管系统中的clock_event_device是工作于周期触发模式,还是工作于单触发模式,也不管定时器系统是工作于低分辨率模式,还是高精度模式,内核都竭尽所能,用不同的方式提供周期时钟,以产生定期的tick事件,tick事件或者用于全局的时间管理(jiffies和时间的更新),或者用于本地cpu的进程统计、时间轮定时器框架等等。周期性时钟虽然简单有效,但是也带来了一些缺点,尤其在系统的功耗上,因为就算系统目前无事可做,也必须定期地发出时钟事件,激活系统。为此,内核的开发者提出了动态时钟这一概念,我们可以通过内核的配置项CONFIG_NO_HZ来激活特性。有时候这一特性也被叫做tickless,不过还是把它称呼为动态时钟比较合适,因为并不是真的没有tick事件了,只是在系统无事所做的idle阶段,我们可以通过停止周期时钟来达到降低系统功耗的目的,只要有进程处于活动状态,时钟事件依然会被周期性地发出。

最后

以上就是结实日记本为你收集整理的CONFIG_NO_HZ (aka dynamic tick functionality)的全部内容,希望文章能够帮你解决CONFIG_NO_HZ (aka dynamic tick functionality)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部