Linux5.10将有一个完全无锁的环形缓冲区

2020-10-18 00:09:33

跳转到导航跳转到搜索Linus Torvalds已经合并了John Ogness的一组printk()补丁,这些补丁使内核环形缓冲区(如果您输入dmesg会看到的)完全无锁。这是一个很大的改进,它允许存储和读取消息,而不需要每个CPU的临时缓冲区,没有死锁风险。

视频版权所有2019 John Ogness/Linux Plumbers Conference 2019。根据知识共享署名(CC BY)许可。幻灯片:Lpc2019慢跑printk.pdf。

环形缓冲区是Linux内核的核心部分。驱动程序、子系统和广泛的功能使用printk()来共享有关正在进行的操作的错误和一般消息。您可以通过在终端中键入dmesg或sudo dmesg来查看它的内容。

约翰·奥格尼斯做了一段57分钟的视频,题目是“为什么printk()如此复杂?”详细介绍了自1991年Linux 0.01(linux-0.01.tar.gz)在2019年Linux Plumbers Conference上发布以来,Linux内核环形缓冲区的历史。他指出了长期使用的printk()实现的问题,并在那次会议上提出了一套改进printk()和内核的环形缓冲区功能的想法。他的一些工作现在已经合并到Linux git树中,以确保它在几个月后发布时将成为Linux5.10的一部分。

Linus Torvalds合并了John Ogness编写的一系列补丁中的第一个,目的是使printk()更现代、更安全、更实用。

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

访问仍由logbuf_lock序列化。它只同步少量操作,例如格式化消息的临时缓冲区、syslog和kmsg_dump操作。正在讨论解除锁定的问题,应该已经为下一个版本做好了准备。";

当Linux5.10发布并且Linux5.11合并窗口在圣诞节前后打开时,将解决logbuf_lock的剩余使用问题。

LinuxReviews欢迎所有评论。如果您不想匿名,请注册或登录。这是免费的。