多年来一直在努力彻底检查 Linux 内核的 printk() 代码,并且作为其中的一部分,最新的补丁系列提供线程控制台打印支持。
这种线程控制台打印支持正在实现早在 2019 年起草的计划,即为每个注册的控制台创建一个内核线程,并使控制台打印与 printk() 调用者完全分离。
大量参与 printk() 返工的 John Ogness 解释了这个线程控制台打印代码:
本系列为每个注册的控制台实现了一个 kthread。kthreads 从 printk ringbuffer 中无锁地检索记录,也不会导致彼此之间的任何锁争用。这允许控制台全速运行。例如,netconsole 能够比串行或 vt 控制台更快地转储记录。
Ogness 继续补充道,“在某些情况下,kthread 打印是不够的。例如,在 kthread 存在之前的早期引导期间或在恐慌情况下,kthread 可能没有机会调度。在这些情况下,当前的方法使用直接在 printk() 调用者上下文中打印。 ”
这种最初形式的线程控制台打印支持只修改了不到一千行的 printk 代码。
原创文章,作者:校长,如若转载,请注明出处:https://www.yundongfang.com/Yun125777.html