环形缓冲区是Linux内核的核心部分。驱动程序,子系统和很多通用功能用printk()共享错误和普通消息。输入dmesg或sudo dmesg在终端中查看其内容。

John Ogness提供了长达57分钟的视频,标题为“为什么printk()如此复杂? ”

(https://linuxreviews.org/Why_is_printk()_so_complicated%3F),详细介绍了Linux内核的环形缓冲区的历史,自1991年Linux 0.01以来,2019 Linux会议上,他指出了printk()实现存在的问题,并printk()在那次会议上提出了一系列改进建议和内核的环形缓冲区功能。他的一些工作现在已经合并到Linux git树中,以确保它在几个月后发布时将成为Linux 5.10的一部分。

Linus Torvalds已合并John Ogness编写的一系列补丁中的第一个补丁,以使其printk()更加现代,安全和实用。

最大的新事物是完全无锁的环形缓冲区实现,包括对连续的支持。它将允许在没有死锁风险的任何情况下存储和读取消息,并且不需要临时的每个单独CPU缓冲区。

目前访问共享区仍由logbuf_lock序列化。它可以同步其他一些操作,例如用于格式化消息的临时缓冲区,syslog和kmsg_dump操作。解除锁定的问题正在讨论,为下一个版本做好准备。”


printk问题

相关文章: