[求助][ARM]统计中断关闭时间
在ARM&linux平台上如何统计代码流程当中
spin_lock_irqsave-> spin_unlock_irqrestore
关中断的大概时间, 起码能够精确到毫秒级别
在x86的平台上可以使用rdtsc这类硬件的高精度定时器来获取高精度的动态时间, 但是在ARM上应该如何操作那, 请各位ARM高手给点建议。
目前使用的HZ是128, NO_HZ配置打开。
我看了一些获取时间的接口例如current_kernel_time/do_gettimeofday等等。
但是感觉他们的精度应该是达不到需要, 因为我看有些时间是依赖中断去更新的, 因此在关中断的上下文里面获取这个时间
即使静态的精度再高都没有意义。
查了一部分信息, 感觉可行的可能有
1. 访问PMU, 获取CPU cycle用来转换时间
2. 通过特定的watchdog 定时器
3. 通过RTC(但是不缺定RTC的精度能符合需求)
但是对ARM 实在不怎么熟悉, 目前使用的CPU平台是瑞萨的R8A7791, 请各位指教啊。
多谢~ 1,2 都可以呀。3精度太低。 本帖最后由 comba_sellie 于 2014-10-13 20:07 编辑
查看内核的do_gettimeofday函数实现,只要硬件支持 原则上是可以精确到ns级的
搜索clocksource 选择最高rate的结构体 里面有个read方法 那个应该就是你的硬件上所能达到的最高精度时钟。 spin_lock_irqsave-> spin_unlock_irqrestore
这个时间都用统计?本来spinlock的工作本来就是快速返回的,看看代码就知道了。
统计这个世界干啥用的,好像路子不是很对啊 hmsghnh 发表于 2014-10-14 16:03 static/image/common/back.gif
spin_lock_irqsave-> spin_unlock_irqrestore
这个时间都用统计?本来spinlock的工作本来就是快速返回 ...
理论是的,但是代码是人写的,写得不好就会导致关中断时间过长,这对系统的影响是致命的。因此,对关中断的时间进行统计是对Linux系统可维可测能力的重要补充。 看错啦 :em02:
竟然还有PMU这么准的计数机制 期待高人解答 看错啦 :em02:
竟然还有PMU这么准的计数机制 期待高人解答 回复 2# Tinnal
多谢回复 但是我目前还没有找到一个比较简单的接口去访问PMU
回复 3# comba_sellie
恩多谢, 但是我现在比较担心的是有些时间的更新是依赖于中断的, 在终端被disable的情况下可能取不到相应的时间, 也就是说这个接口本身
的静态的精度是够的,但是动态的精度不够。
我用的架构 read实现方式是直接读CPU内部的寄存器 计数是实时更新的
难道你的没有?
页:
[1]
2