linux-kernel – 谁在Linux上调用delay_tsc()
我使用OProfile来分析我的
Linux盒子.在分析过程中,我发现除了“native_safe_halt”函数之外,“
delay_tsc ”是消耗cpu周期的第二个最重要的函数(大约10%).似乎delay_tsc()是一个繁忙的循环.但是谁叫它,它的功能是什么?
解决方法
没有人直接调用它,因为它是你链接到的那个源代码中的本地函数.调用它的方法是通过发布的__delay()函数.
当你调用__delay()时,这将使用delay_fn函数指针(也是该文件的本地)来选择几个延迟函数之一.默认情况下,选择的是delay_loop(),它使用x86指令尝试标记时间. 但是,如果调用了use_tsc_delay()(在引导时),它会将函数指针切换到delay_tsc(),它使用时间戳计数器(CPU计数器)来标记时间. 任何需要合理可靠的高分辨率延迟功能的内核代码都会调用它.您可以在内核中看到引用__delay here(很多地方)的所有代码. 我认为,在分析方面,忽略花在该函数上的时间可能是非常安全的,因为它的意图是延迟.换句话说,花费很长时间才能完成这项工作并不是很有用 – 如果打电话者不想延迟,他们就不会打电话. 该列表中的一些示例: >看门狗定时器使用它来调整内核的速度,使其输出不会相互混淆,延迟当前内核ID的某些倍数.> ATI帧缓冲驱动程序似乎将其用于低级访问硬件之间的延迟.实际上,它在许多设备驱动程序中用于此目的相当多.>它在启动期间用于确定jiffies与实际硬件速度之间的关系. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |