[問題] 監控程式執行時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