[问题] 监控程式执行时kernel的状况

楼主: wtchen (没有存在感的人)   2016-11-29 23:53:13
是这样的,我正在找寻nanosleep latency过大的原因。
目前使用Preempt RT kernel + RPi,
程式大概像这样:(priority已经是max)
uint64_t i=0;
while(1)
{
Device_read(); // 读取I2C/SPI
if (!(i%2)) fprintf(....); // 写入档案
nanosleep(....); // sleep
++i;
}
我发现只要我有执行fprintf或fwrite写入档案,nanosleep就有一定可能得到大latency
(周期约4ms,可是latency会有 0.5-1 s)
我试过setvbuf不过似乎没改善,想说是不是kernel的哪步骤执行太久了。
想要监看当有大latency时系统出了啥事,不知道有何建议?
谢谢。
补充:我试过用 blktrace
blktrace -d /dev/mmcblk0p1 -o test
blkparse -i test.blktrace.0 -o ./trace.txt
在latency过大的地方发现:
179,1 0 21 28.306876414 84 P N [jbd2/mmcblk0p2-]
179,1 0 22 28.306929414 84 U N [jbd2/mmcblk0p2-] 1
179,1 0 23 30.059962179 4689 P N [kworker/u2:3]
179,0 0 24 30.060346175 4689 A W 137216 + 8 <- (179,2) 0
179,1 0 25 30.060351175 4689 Q W 137216 + 8 [kworker/u2:3]
179,1 0 26 30.060368175 4689 G W 137216 + 8 [kworker/u2:3]
179,1 0 27 30.060853169 4689 I W 137216 + 16 [kworker/u2:3]
179,1 0 28 30.060887169 4689 UT N [kworker/u2:3] 14
179,1 0 29 30.061090167 83 D W 137216 + 16 [mmcqd/0]
不过看不懂 @@

Links booklink

Contact Us: admin [ a t ] ucptt.com