1. 程式人生 > 其它 >printk輸出執行緒名,執行緒id,cpuid和prio的實現【轉】

printk輸出執行緒名,執行緒id,cpuid和prio的實現【轉】

轉自:https://jgsun.github.io/2020/07/18/printk-more/

1. Overview

我們知道,ftrace輸出含有執行緒名,執行緒id和cpuid,非常有助於分析問題,是否可以讓prink輸出也帶有這些資訊的?本文介紹了其實現方法。

  • ftrace 輸出格式
         modprobe-514 [001] .... 177.645097: cpld_irq_unmask: hwirq 2, virq 26
         modprobe-514 [001] .... 177.645103: cpld_irq_unmask: ire=0x15, irs=0x16, ina=0x0
         modprobe-514 [001] .... 177.645105: cpld_irq_unmask: hwirq 2, virq 26, idata->mask 0x4
         modprobe-514 [001] .... 177.645106: cpld_irq_unmask: cpld_ic->masked=0xff, cpld_ic->started=0x0
         modprobe-514 [001] .... 177.645141: cpld_irq_unmask: cpld_ic->masked=0xfb, cpld_ic->started=0x4
    

    2. 程式碼修改

補丁link: 0001-kernel-printk-print-comm-cpuid-pid-and-prio.patch

3. printk輸出格式效果

[ 0.000000] ( swapper-0 [00] 20) Booting Linux on physical CPU 0x0000000000 [0x411fd070]
[ 0.000000] ( swapper-0 [00] 20) Linux version 5.6.11 (jgsun@VirtualBox) (gcc version 9.2.1 20191025 (GNU Toolchain for the A-profile Architecture 9.2-2019.12 (arm-9.10))) #2 SMP Sat Jul 18 15:08:23 CST 2020
[ 0.000000] ( swapper-0 [00] 20) Machine model: linux,dummy-virt
[ 0.000000] ( swapper-0 [00] 20) efi: Getting EFI parameters from FDT:
[ 0.000000] ( swapper-0 [00] 20) efi: UEFI not found.
[ 0.000000] ( swapper-0 [00] 20) On node 0 totalpages: 131072
[ 0.000000] ( swapper-0 [00] 20) DMA zone: 2048 pages used for memmap
[ 0.000000] ( swapper-0 [00] 20) DMA zone: 0 pages reserved
[ 0.000000] ( swapper-0 [00] 20) DMA zone: 131072 pages, LIFO batch:31
[ 0.000000] ( swapper-0 [00] 20) psci: probing for conduit method from DT.
[ 0.000000] ( swapper-0 [00] 20) psci: PSCIv0.2 detected in firmware.
[ 0.000000] ( swapper-0 [00] 20) psci: Using standard PSCI v0.2 function IDs
[ 0.000000] ( swapper-0 [00] 20) psci: Trusted OS migration not required

4. CONFIG_PRINTK_CALLER: Show caller information on printks

kernel配置選項Show caller information on printks也可以打印出執行緒id,但是我們的解決方案列印的更加全面,不僅包括執行緒id,還可以包含執行緒名,cpuid和優先順序prio,也許也可以考慮把這個patch推到社群讓更多人受益。

[ 0.000000][ T0] ( swapper-0 [00] 20) Booting Linux on physical CPU 0x0000000000 [0x411fd070]
[ 0.000000][ T0] ( swapper-0 [00] 20) Linux version 5.6.11 (jgsun@VirtualBox) (gcc version 9.2.1 20191025 (GNU Toolchain for the A-profile Architecture 9.2-2019.12 (arm-9.10))) #4 SMP Sat Jul 18 16:57:53 CST 2020
[ 0.000000][ T0] ( swapper-0 [00] 20) Machine model: linux,dummy-virt
[ 0.000000][ T0] ( swapper-0 [00] 20) efi: Getting EFI parameters from FDT:
[ 0.000000][ T0] ( swapper-0 [00] 20) efi: UEFI not found.
[ 0.000000][ T0] ( swapper-0 [00] 20) On node 0 totalpages: 131072
[ 0.000000][ T0] ( swapper-0 [00] 20) DMA zone: 2048 pages used for memmap
[ 0.000000][ T0] ( swapper-0 [00] 20) DMA zone: 0 pages reserved
[ 0.000000][ T0] ( swapper-0 [00] 20) DMA zone: 131072 pages, LIFO batch:31