cnlostain 发表于 2014-10-13 10:58

[求助][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, 请各位指教啊。
多谢~

Tinnal 发表于 2014-10-13 11:26

1,2 都可以呀。3精度太低。

comba_sellie 发表于 2014-10-13 20:06

本帖最后由 comba_sellie 于 2014-10-13 20:07 编辑

查看内核的do_gettimeofday函数实现,只要硬件支持 原则上是可以精确到ns级的

搜索clocksource 选择最高rate的结构体 里面有个read方法 那个应该就是你的硬件上所能达到的最高精度时钟。

hmsghnh 发表于 2014-10-14 16:03

spin_lock_irqsave-> spin_unlock_irqrestore
这个时间都用统计?本来spinlock的工作本来就是快速返回的,看看代码就知道了。

统计这个世界干啥用的,好像路子不是很对啊

Tinnal 发表于 2014-10-14 22:42

hmsghnh 发表于 2014-10-14 16:03 static/image/common/back.gif
spin_lock_irqsave-> spin_unlock_irqrestore
这个时间都用统计?本来spinlock的工作本来就是快速返回 ...

理论是的,但是代码是人写的,写得不好就会导致关中断时间过长,这对系统的影响是致命的。因此,对关中断的时间进行统计是对Linux系统可维可测能力的重要补充。

comba_sellie 发表于 2014-10-15 09:20

看错啦 :em02:
竟然还有PMU这么准的计数机制 期待高人解答

comba_sellie 发表于 2014-10-15 09:20

看错啦 :em02:
竟然还有PMU这么准的计数机制 期待高人解答

cnlostain 发表于 2014-10-15 11:09

回复 2# Tinnal
多谢回复 但是我目前还没有找到一个比较简单的接口去访问PMU


   

cnlostain 发表于 2014-10-15 11:11

回复 3# comba_sellie

恩多谢, 但是我现在比较担心的是有些时间的更新是依赖于中断的, 在终端被disable的情况下可能取不到相应的时间, 也就是说这个接口本身
的静态的精度是够的,但是动态的精度不够。


   

comba_sellie 发表于 2014-10-15 16:42

我用的架构 read实现方式是直接读CPU内部的寄存器 计数是实时更新的
难道你的没有?
页: [1] 2
查看完整版本: [求助][ARM]统计中断关闭时间