我使用OProfile来分析我的Linux盒子。在分析过程中,我发现除了“native_safe_halt
”函数之外,“delay_tsc
”是消耗cpu周期的第二个最重要的函数(大约10%)。似乎delay_tsc()
是一个繁忙的循环。但谁称之为它的功能是什么?
答案 0 :(得分:6)
没有人直接调用它,因为它是你链接到的那个源代码中的本地函数。调用它的方法是发布的__delay()
函数。
当你调用__delay()
时,这将使用delay_fn
函数指针(也是该文件的本地指针)来选择几个延迟函数之一。默认情况下,选择的是delay_loop()
,它使用x86指令尝试标记时间。
但是,如果调用use_tsc_delay()
(在引导时),它会将函数指针切换到delay_tsc()
,它使用时间戳计数器(CPU计数器)来标记时间。
任何需要合理可靠的高分辨率延迟功能的内核代码都会调用它。您可以在内核中看到引用__delay
here(很多地方)的所有代码。
我认为,在分析方面,由于 intent 要延迟,忽略在该函数中花费的时间可能非常安全。换句话说,花费很长时间才能完成这项工作并不是很有用 - 如果打电话者不想延迟,他们就不会打电话。
该列表中的一些示例: