在今天的采访中,我们请来了 Meta 内核团队的核心系统工程师 David Vernet。他从事 BPF(伯克利包过滤器)和 Linux 内核调度程序的工作。本系列采访重点介绍为 Linux 内核做出贡献的 Meta 软件工程师。Meta Linux 内核团队与更广泛的 Linux 社群合作,为内核添加新功能,并确保内核在 Meta 生产数据中心中良好运行。团队中的工程师与业内同行合作,使内核更适合 Meta 的工作负载,并使 Linux 更适合所有用户。
我是一名系统工程师,大部分职业生涯都与内核有关,并且也在用户空间以及微内核领域工作了一段时间。现在,我大部分时间都在关注 BPF 和 Linux 内核调度程序。
在获得数学学位后,我便开启了作为网页开发人员的职业生涯。读完研究生后,我意识到自己做过的最开心的事便是破解底层系统并弄清楚计算机的工作原理。
我不负责内核中任何子系统的维护,所以我一整天的工作几乎都是编码和工程。话虽如此,但参与上游 Linux 内核社群是加入内核团队最酷的部分之一,所以我仍会花一些时间阅读上游的讨论。我常见的一天是这样度过的:
阅读各种上游论坛中的一些讨论,例如 BPF 和 mm。我通常每天花大约 30-60 分钟在这上面,具体取决于当天的情况。
然后做我手头的项目。最近,我做的是向 BPF 添加用户空间环形缓冲区映射类型。
为 lwn.net 撰稿。
我最近为 BPF 中的新映射类型提交了一个补丁集。它允许用户空间通过环形缓冲区向内核中的 BPF 程序发布消息。这种映射类型非常有用,它为用户空间框架以高性能方式驱动 BPF 程序中的逻辑奠定了基础。
Meta 内核团队拥有强大的上游优先文化。我们在 Meta 内核中发现的错误修复以及我们想要添加的功能几乎总是首先提交给上游内核,然后再反向移植到我们的内部内核。
我喜欢做 API 架构和设计的工作。内核代码需要保证永不崩溃,能够持久运行。我发现在内核中构建系统是一件令人欣慰的事情,这样可以很容易地推断出正确性和稳健性,并提供直观的 API,使内核的其他部分可以轻松地使用你的代码。
我也喜欢与上游社区一起迭代。整个社区都在关注着你的补丁,人们可以帮助你发现代码中的错误并提出你自己可能从未考虑过的改进建议,这实在太棒了。很多人觉得这个过程很繁琐,但我觉得这个过程事半功倍。
我们介绍了 Linux 内核中的实时补丁功能,描述了我们如何在 Meta 使用这一功能,以及我们作为超大规模的组织在使用该功能时会面临的一些独特挑战。
最大的误解是,这个社群是一个只有受邀者才能参与 Linux 内核相关工作的封闭式俱乐部。当然,你必须对操作系统有所了解才能成为一个富有成效的贡献者,并准备好在代码中存在改进空间时接受建设性的批评。无论如何,这一社群总是欢迎那些以开放的心态参与进来并愿意做出贡献的人们。
关于如何融入到 Linux 内核社群,人们已经发布了很多信息。我针对如何参与 Linux 内核上游邮件列表写了一篇博文。此外,还讨论了如何提交你的第一个补丁。Greg Kroah-Hartman 的这个视频也说明了如何编写并提交你的第一个 Linux 内核补丁。
在了解内核本身的资源方面,有许多资源和书籍可供参考,例如:
我开设了一个博客,在那里谈论我作为一位系统工程师的经历:https://www.bytelab.codes/。我发表的文章范围甚广,包括适合新手上路的主题和更深入讨论内核代码的进阶主题。欢迎大家前来浏览,如果有什么需要与我讨论的,请随时告诉我。
如需了解有关 Meta Open Source 的更多信息,请访问我们的 Open Source 网站、订阅我们的 YouTube 频道,或在 Twitter、Facebook 和 LinkedIn 上关注我们。
图像版权:Tux 企鹅是 Larry Ewing (lewing@isc.tamu.edu) 和 GIMP 的原创设计。