谁在Linux上调用delay_tsc()

时间:2011-11-09 04:52:59

标签: linux-kernel

我使用OProfile来分析我的Linux盒子。在分析过程中,我发现除了“native_safe_halt”函数之外,“delay_tsc”是消耗cpu周期的第二个最重要的函数(大约10%)。似乎delay_tsc()是一个繁忙的循环。但谁称之为它的功能是什么?

1 个答案:

答案 0 :(得分:6)

没有人直接调用它,因为它是你链接到的那个源代码中的本地函数。调用它的方法是发布的__delay()函数。

当你调用__delay()时,这将使用delay_fn函数指针(也是该文件的本地指针)来选择几个延迟函数之一。默认情况下,选择的是delay_loop(),它使用x86指令尝试标记时间。

但是,如果调用use_tsc_delay()(在引导时),它会将函数指针切换到delay_tsc(),它使用时间戳计数器(CPU计数器)来标记时间。

任何需要合理可靠的高分辨率延迟功能的内核代码都会调用它。您可以在内核中看到引用__delay here(很多地方)的所有代码。

我认为,在分析方面,由于 intent 要延迟,忽略在该函数中花费的时间可能非常安全。换句话说,花费很长时间才能完成这项工作并不是很有用 - 如果打电话者不想延迟,他们就不会打电话。

该列表中的一些示例:

  • 看门狗定时器使用它来调整内核的速度,使其输出不会相互混淆,延迟当前内核ID的某些倍。
  • ATI帧缓冲驱动程序似乎将其用于低级访问硬件之间的延迟。事实上,它在许多设备驱动程序中用于相当多的目的。
  • 在启动过程中使用它来计算jiffies与实际硬件速度之间的关系。