自从 Bcachefs 文件系统被纳入 Linux 6.7 内核的上游版本以来,它就一直保持着良好的运行状态。但今天,Bcachefs 功能更新被提交到 Linux 6.9 合并窗口,而 Linus Torvalds 对其中一些建议代码并不满意。
为 Linux 6.9 提交的 Bcachefs 代码包括一些前期准备工作,如为子卷走读提供用户空间界面、改进目录结构检查、改进日志流水线以提高性能、改进丢弃路径以提高效率,以及其他优化。维护者肯特-奥弗斯特里特(Kent Overstreet)将针对 Linux 6.9 的 Bcachefs 改动的拉取请求总结为
针对 6.9 的 Bcachefs 更新
– 子卷子 btree;这是为子卷提供用户空间界面所必需的,这将在稍后推出
– 对目录结构检查进行了大量改进
– 改进了日志流水线处理,大大提高了高深度写入工作负载的性能
– 改进了丢弃路径:丢弃路径更高效,不再不必要地刷新日志
– 缓冲写入路径现在可以避免占用节点锁
– 调出各种库代码供 XFS 使用:时间统计、mean_and_variance、darray、eytzinger、thread_with_file
– 新的毫米助手:memalloc_flags_{save|restore}(memalloc_flags_{save|restore})。
– mempool 现在可以使用 kvmalloc 内存池
但让 Linus Torvalds 感到不解的是,这些补丁将 Bcachefs 代码中的一些元素移到了一些库类型的代码中,这样其他文件系统就可以很容易地重复使用这些代码–XFS 就是对可能重复使用某些 Bcachefs 函数感兴趣的文件系统。
Linus Torvalds 响应了 Bcachefs 的拉取请求:
我看了看 “让随机的 Bcachefs 代码成为一个库函数 “的内容,觉得毫无意义,最终决定在没有更多解释的情况下,我不会拉取这个功能(老实说,我觉得这些解释站不住脚)。
那些 “stdio_redirect_printf() “和 darray_char 都是没有解释的可怕接口。这些接口太恶心了。
把它放在你自己的代码中,不要试图把它变成通用库的东西。
如果你**要把它变成一个库,那么它必须是
(a) 多加解释
(b) 有更合理的命名,减少恶心和完全无意义的接口(”DARRAY()”)。
而且,仅仅找到一个共享此类代码的其他文件系统,还不足以证明它的接口和命名是合理的。
但最主要的问题是疯狂的数学运算。
该死的,我们很久以前就讨论过 “均值和方差 “这种愚蠢的垃圾。当时就错了,现在**还是错的。
你没有解释为什么不能使用**简单的 MAD(中位数绝对偏差)而不是方差。
这个错误的决定直接导致了对过于复杂的 128 位数学的无意义使用。
我当时就说这是疯狂的过度设计,而且据我所知,除了一些细微的类型名称细节外,绝对没有任何变化。
只要你把它改成只用 bcachefs,我就不介意。
但现在,你却试图把这些垃圾作为通用库代码推给其他人使用,这立刻就意味着我**介意过度设计的接口。
在其他方面,time_stats 看上去就像是一个有名称和用途的正常接口,但使用了这种可怕的基础架构后,它就变得不伦不类了。
在 Overstreet 阐述了自己的观点后,Torvalds 补充道
加权版本的代码实际上并没有改变。
方差值是不同的,但 MAD 和标准偏差之间的区别基本上只是一个常数因子(不同的分布会有所不同,但那又怎样?任何_特定_情况都会有特定的分布)。
那么,对于任何指数加权来说,常数因子为什么会 make _any_ difference 呢?
总之,你可以把代码放在 bcachefs 中。
也许 xfs 也想复制这些代码。我不在乎,这看起来很蠢,但这是文件系统的选择。
但如果我们要让它成为一个通用的内核库,它就必须是理智的。而不是为了一个随机的统计元素,让人们去做 64 位的平方根和 128 位的除法。
因此,从目前的情况来看,Linus Torvalds 并没有接受这个针对 Linux 6.9 内核的 Bcachefs 拉取请求,原因是拟议中的通用库代码。我们将拭目以待,看看未来几天是否会有新的拉取请求,放弃这些补丁或以其他方式重新修改,以满足 Linux 创建者的要求。