systemd 项目开发人员已经开始研究和修复“systemd-journald”组件中长期存在的架构问题,该问题导致写入磁盘的数据量(写入放大)远高于日志的实际量。
事情可以追溯到 2020 年 3 月,当时有人在 bug 跟踪系统中提交了一份报告,指出生成大约 500 KB 的文本日志会导致 SSD 上超过 700 MB 的物理写入操作。systemd 的开发者断然否认了这个问题,并回应说“你不懂文件系统的工作原理”,拒绝进行性能分析,最终以“无法处理”为由关闭了该工单。开发者的回复遭到了数百名用户的反对,但项目方的立场依然坚定。
2026 年初,提交了第二份问题报告。在报告中,独立开发者 ValdikSS 使用隔离的 cgroup 和 loop 设备进行了详细的性能分析,清楚地展示了问题发生的机制:由于使用了内存映射文件 (mmap) 和二进制哈希表,即使写入一条 750 字节的文本消息也会导致内存指纹的修改,从而导致整个 4 千字节的页面被刷新到磁盘,并在块设备级别产生 50 到 70 KB 的 I/O。
继昨天 Hacker News 首页报道和无可辩驳的合成测试发布之后,该项目的维护者改变了他们的措辞,并开始致力于优化 journald 的缓存刷新机制和索引存储结构。
来源: opennet.ru
