2013-04-17 14 views
3

我想跟蹤一段代碼中的抖動,我知道有很多潛在的源(任務切換,系統調用,緩存未命中,將任務移動到另一個CPU ,cpu throttling等),我知道如何跟蹤所有這些,但唯一一個我不知道如何跟蹤內核花費在中斷服務上的時間。數據在/ proc/stat中,但是它以低分辨率測量soft-irq和irq中的時間,我正在尋找更高分辨率的東西。我如何獲得Linux內核服務中斷花費的時間

有沒有辦法讓內核服務中斷花費的時間縮短到納秒或至少微秒?

+1

您可以編譯自定義內核,在中斷輸入/退出時翻轉gpio,然後在邏輯分析器上跟蹤定時。 – TJD

+1

任何測量某些東西的嘗試都會影響某些東西(程度不同)。所以外部測量是首選,比如@TJD的評論。 – sawdust

回答

1

是把printk的調用之前和之後handle_IRQ計時器在屏幕上通常高分辨率一個:

86 /* 
87 * asm_do_IRQ is the interface to be used from assembly code. 
88 */ 
89 asmlinkage void __exception_irq_entry 
90 asm_do_IRQ(unsigned int irq, struct pt_regs *regs) 
91 { 
92   handle_IRQ(irq, regs); 
93 } 
94 

如果你問有關irq_latency看到這些漂亮的答案:

What is the irq latency due to the operating system?

+2

請注意,printk()不是免費的。如果將內核消息打印到控制檯上,則測量結果可能會以生成該輸出所花費的時間爲主! – duskwuff

+0

同意您可以使用循環計數器取決於您的平臺,並通過將delta與核心頻率相除來計算時間差。 – 0x90

相關問題