我想跟蹤一段代碼中的抖動,我知道有很多潛在的源(任務切換,系統調用,緩存未命中,將任務移動到另一個CPU ,cpu throttling等),我知道如何跟蹤所有這些,但唯一一個我不知道如何跟蹤內核花費在中斷服務上的時間。數據在/ proc/stat中,但是它以低分辨率測量soft-irq和irq中的時間,我正在尋找更高分辨率的東西。我如何獲得Linux內核服務中斷花費的時間
有沒有辦法讓內核服務中斷花費的時間縮短到納秒或至少微秒?
我想跟蹤一段代碼中的抖動,我知道有很多潛在的源(任務切換,系統調用,緩存未命中,將任務移動到另一個CPU ,cpu throttling等),我知道如何跟蹤所有這些,但唯一一個我不知道如何跟蹤內核花費在中斷服務上的時間。數據在/ proc/stat中,但是它以低分辨率測量soft-irq和irq中的時間,我正在尋找更高分辨率的東西。我如何獲得Linux內核服務中斷花費的時間
有沒有辦法讓內核服務中斷花費的時間縮短到納秒或至少微秒?
是把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
看到這些漂亮的答案:
您可以編譯自定義內核,在中斷輸入/退出時翻轉gpio,然後在邏輯分析器上跟蹤定時。 – TJD
任何測量某些東西的嘗試都會影響某些東西(程度不同)。所以外部測量是首選,比如@TJD的評論。 – sawdust