更改linux内核计时器

时间:2011-02-10 10:59:26

标签: linux timer linux-kernel

我必须运行延迟敏感的应用程序,并且我被要求将计时器分辨率更改为1000 Hz或更高。我在网上搜索了一下,发现了有关CONFIG_HZ等的页面。

但是,文件中似乎还有其他几个相关的设置,所以我想确保我不会弄乱设置。我在这里发布一些输出

$cat /boot/config-2.6.28-11-generic | grep HZ
# CONFIG_HZ_1000 is not set
# CONFIG_HZ_300 is not set
CONFIG_MACHZ_WDT=m
CONFIG_NO_HZ=y
CONFIG_HZ=250
# CONFIG_HZ_100 is not set
CONFIG_HZ_250=y

第二行也是如此,“#CONFIG_HZ_1000未设置”,意味着不支持1000Hz?我是否必须更改CONFIG_HZ而不是CONFIG_HZ-250?

PS:我在Geode处理器上使用2.6内核(ubuntu jaunty)。

EDIT1:我在桌面计算机和开发计算机上运行了http://www.advenage.com/topics/linux-timer-interrupt-frequency.php的一些代码。据推测,该代码可以准确衡量系统可以维持的定时器的速度。输出大约为183 Hz(在开发机器上)。那么改变计时器会有意义吗?

3 个答案:

答案 0 :(得分:15)

不要直接编辑.config,除非你是Kbuild专家(如果你问这个,你不是Kbuild专家)。而是运行make menuconfigmake xconfig来加载基于菜单的配置系统。或者,make config将执行基于行的配置过程(它会向您询问有关配置内容的几百个问题 - 不推荐)。相关选项在“处理器类型和功能”下为“定时器频率”。

尽管如此,这可能没有必要。现代Linux可以使用高分辨率事件定时器(CONFIG_HIGH_RES_TIMERS)来实现低延迟定时器,即使不增加定时器频率也是如此。使用无滴答系统(CONFIG_NO_HZ),定时器频率几乎没有影响。

另一方面,我不确定Geode CPU有哪些定时器支持。您可能希望使用各种内核配置运行cyclictest,以查看获得低延迟性能所需的内容。您运行的测试测试的是最大调度频率,而不是调度延迟,因此与循环测试结果进行比较会很有趣。如果您需要真正低延迟,CONFIG_PREEMPT_RT patchset也可能是您感兴趣的。

答案 1 :(得分:7)

要更改计时器设置,需要重新编译内核。更改某些标准菜单配置工具中的选项,而不是文本文件。

/boot/config...文件只告诉您特定内核二进制文件中安装的内容。这不是您可以更改的配置文件。

答案 2 :(得分:0)

第二行# CONFIG_HZ_1000 is not set是否表示不支持1000Hz?

当配置选项不可用时,它.config文件中就不存在。

例如,这些内核选项:

# CONFIG_HZ_1000 is not set
# CONFIG_HZ_300 is not set

可供您设置。

要进行设置,最安全的方法是使用基于菜单的界面,例如make menuconfig
在menuconfig中,要查找给定内核配置参数的位置,请键入/以打开搜索框。