当前位置: 首页 > article >正文

LWN:继续探索原子缓冲写(atomic buffered writes)

关注了就能看到更多这么棒的文章哦Jonathan CorbetGemini translation原文链接https://lwn.net/Articles/1060063/许多应用程序需要能够将多块multi-block数据块写入磁盘并确保该操作要么成功完成要么完全失败——换句话说写入操作不会部分完成即“撕裂” [torn]。多年来内核开发人员一直致力于提供原子写atomic writes作为满足这一需求的一种方式例如可以参考 2023 年、2024 年和 2025 年两次的 Linux 存储、文件系统、内存管理和 BPF (LSFMMBPF) 峰会的相关议题。虽然目前一些文件系统已经支持原子直接 I/Oatomic direct I/O但原子缓冲 I/Oatomic buffered I/O仍不支持。填补这一空白似乎肯定会成为 2026 年 LSFMMBPF 的主题但得益于早期的讨论解决方案的雏形可能已经开始显现。Pankaj Raghav 于 2 月 13 日发起了这项讨论指出 ext4 和 XFS 现在在使用直接 I/O 时都支持原子写但支持原子缓冲 I/O “仍然是一个有争议的话题”。目前有两个尚未落实的提案旨在添加此功能一个是 John Garry 在 2024 年提交的系列补丁另一个是 Ojaswin Mujoo 最近提交的补丁集。这些提案停滞不前部分原因是担心 I/O 路径增加的复杂性以及原子缓冲写是否真的有必要。PostgreSQL 数据库经常被提及为该功能的潜在用户与许多其他数据库管理系统不同它使用缓冲 I/O。PostgreSQL 的代码通常必须费尽周折来确保部分的 I/O 操作不会损坏数据库有时甚至会牺牲性能。PostgreSQL 是一个重要的用户但并非所有开发人员都确信原子缓冲写是解决其问题的办法例如Christoph Hellwig 评论道“我认为更好的议题应该是我们如何帮助 postgres 摆脱缓冲 I/O而不是为它们增加更多的特殊情况。”PostgreSQL 开发人员 Andres Freund 回应称该项目确实正在致力于添加直接 I/O 支持但其性能尚未达到缓冲 I/O 方法的水平。但他表示直接 I/O 仅对某些大型安装场景有用。对于较小的系统或者数据库作为具有自身内存需求的较大型应用程序的一部分运行的系统内核可以管理内存分配的缓冲 I/O 设置仍然表现更好。他指出即使直接 I/O 成为 PostgreSQL 的一个具有竞争力的选项“超过 50% 的用户”仍然无法从中受益。对话中的大多数开发人员似乎都接受原子缓冲 I/O 有其合理的用例尽管 Hellwig 仍然持保留意见。不过达成“有一个解决方案会很好”的共识本身并不能产生解决方案。原子直接 I/O 是一个复杂的问题需要内核在整个过程中将 I/O 请求保持在一起直到最终写入存储设备。缓冲 I/O 增加了复杂性因为这些操作必须经过页缓存page cache而且实际的写入操作通常是在内核抽出时间时的另一个时间点执行的。在内核中以这种方式跟踪原子性要求并防止多个操作相互干扰并非易事。在讨论初期Mujoo 建议一种可能的解决方案是对原子缓冲写使用通写writethrough语义。换句话说当用户空间发起请求原子行为的缓冲写时这将通过使用带有RWF_ATOMIC标志的pwritev2()来完成内核将立即启动将数据写入磁盘的过程。这将允许创建一个短期的固定pin以将页面保留在内存中如果装满数据的页面在操作过程中被推送到交换分区 [swap]则很难执行原子写并允许内核在操作进行期间防止对这些页面的任何其他更改。这样就不需要寻找一种方法来跟踪页缓存中脏数据dirty data的原子写了。Jan Kara 同意通写行为可能会很有趣。他说这将允许重用许多现有的直接 I/O 基础设施从而使解决方案变得简单得多。他说真正的问题在于通写行为是否对 PostgreSQL 有用。Freund 回答说通写确实会有用即使在没有原子行为的情况下也是如此。他建议通过要求原子缓冲写在包含RWF_ATOMIC的同时包含一个新的RWF_WRITETHROUGH标志来实现这样如果内核以后实现了不带通写的原子缓冲写用户空间就不会看到行为变化。Raghav 询问了提议的RWF_WRITETHROUGH标志与现有的RWF_DSYNC之间的区别指出前者可能像大多数缓冲写一样是异步的而后者是同步的。然而Dave Chinner 不同意这种解释他认为通写行为本质上是同步的以便可以立即报告错误。他说获得异步行为的方法是使用异步 I/O 接口asynchronous-I/O interface或io_uring。但他表示RWF_WRITETHROUGH本身在行为上应与直接 I/O 写入完全相同允许使用现有的 I/O 路径来实现它。RWF_DSYNC仍然会有所不同因为它强制存储设备将数据提交到持久介质而RWF_WRITETHROUGH不会执行那个额外的步骤意味着数据可能会保留在设备的写缓存中。为了尝试总结讨论Raghav 发布了一组提议的结论第一步将是实现提议的通写行为并立即启动请求的操作。然而仅靠通写并不能保证原子行为因此还有更多工作要做。下一步将是确保正在写入的数据在操作进行期间不被修改。幸运的是内核长期以来一直有一种机制——稳定页stable pages可以派上用场。通过防止对正在写入的缓冲区进行修改内核可以防止数据损坏。后续步骤将包括在开始操作之前小心地将完整数据范围复制到页缓存中并确保缓冲区是在单个原子操作中写入的。不可避免地还会有其他细节需要处理例如指定和强制执行用于原子写的缓冲区的对齐要求alignment requirements。但看起来通往原子缓冲写的道路正开始变得清晰。在问题完全解决之前可能还需要再进行六次左右的 LSFMMBPF 会议。LWN 评论概述评论区对这一漫长的开发周期进行了调侃有用户笑称“再开六次左右的会就能解决问题”。有用户询问原子写在带有掉电保护Power Loss Prevention, PLP和不带 PLP 的驱动器上的实现差异好奇 PLP 驱动器在数据库工作负载中是否表现更佳。此外读者指出通写行为在一般场景下也很有用例如文件管理器在向可移动设备复制数据时可以利用它从而避免出现“文件复制飞快但弹出设备却需要数分钟”的意外。还有读者对 LWN 关于文件系统的深度文章表示感谢认为这些内容填补了该领域的知识空白。全文完LWN 文章遵循 CC BY-SA 4.0 许可协议。欢迎分享、转载及基于现有协议再创作长按下面二维码关注关注 LWN 深度文章以及开源社区的各种新近言论

相关文章:

LWN:继续探索原子缓冲写(atomic buffered writes)

关注了就能看到更多这么棒的文章哦~Jonathan CorbetGemini translation原文链接:https://lwn.net/Articles/1060063/ 许多应用程序需要能够将多块(multi-block)数据块写入磁盘,并确保该操作要么成功完成,要…...

C++继承机制深度解析

继承机制详解继承是面向对象编程的核心特性之一,允许新的类(派生类)基于现有类(基类)构建,实现代码复用和层次化设计。C中继承的关键点如下:一、基础语法class Base { // 基类 protected:int b…...

12:人脸识别技术入门:从像素特征到Haar级联分类器原理

作者: HOS(安全风信子) 日期: 2026-03-15 主要来源平台: GitHub 摘要: 本文从基础的像素特征出发,深入解析了人脸识别技术的发展历程,重点讲解了Haar级联分类器的核心原理。通过理论与实践相结合的方式&…...

MongoDB查询执行计划解读:executionStats详细分析与性能诊断

MongoDB查询性能的瓶颈往往隐藏在查询执行计划中。通过explain()获取的executionStats提供了查询执行的完整剖析,是诊断性能问题的"X光片"。本文将系统阐述执行计划的核心指标,提供可落地的诊断方法,帮助您快速定位查询瓶颈&#x…...

MongoDB WiredTiger存储引擎调优:如何优化缓存与并发参数

MongoDB 3.2默认使用的WiredTiger存储引擎是性能优化的核心战场。其缓存机制、并发控制和I/O策略直接影响数据库吞吐量与延迟。不合理的配置可能导致CPU利用率飙升、I/O瓶颈或内存溢出,而科学调优可将吞吐量提升40%以上。本文系统阐述WiredTiger核心参数的原理与配置…...

基于多元宇宙优化算法的储能充放电策略优化研究(Python代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

基于SpringBoot+Vue的+疫情物资捐赠和分配系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】

系统架构设计### 摘要 新冠疫情暴发以来,全球范围内医疗物资的捐赠和分配成为社会关注的重点问题。传统的物资管理方式依赖人工操作,效率低下且容易出现信息不对称、分配不均等问题。为提升物资流转的透明度和效率,开发一套高效的疫情物资捐赠…...

llmfit:自动找到适配你硬件的大模型方案

参考: https://github.com/AlexsJones/llmfit 安装: curl -fsSL https://llmfit.axjns.dev/install.sh | sh使用: llmfit有打分,需要资源和预测推理tokens速度点击具体模型查看细节...

杰理之人声消除使用方法【篇】

原因:目前人声消除算法添加到各个解码流中,不像以前添加到mixer节点后。...

VS Code 配置 Java JDK

VS Code 配置 Java JDK 的最简单、最推荐的做法(2025-2026 最新方式)如下: 推荐方式一:最省事(强烈推荐新手)直接安装 Coding Pack for Java(微软官方推荐的一键包)官网地址&#xf…...

工程设计类学习(DAY26):静电防护全攻略:从产生到防护

每日更新教程,评论区答疑解惑,小白也能变大神!" 目录 全面解析:静电放电(ESD)的产生、危害与电路防护设计指南 1. 静电放电(ESD)的产生机理 1.1 摩擦与剥离起电 1.2 感应起…...

Thinkphp和Laravel框架微信小程序面向小学生的阅读交流系统的设计与实现

目录需求分析技术选型系统模块设计开发阶段划分关键实现细节测试与部署维护与迭代项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作需求分析 明确系统核心功能:面向小学生的阅读交流系统需包…...

KIHU快狐|户外触摸一体机支持防静电设计保护内部电路安全

在现代社会,户外触摸一体机已经成为许多公共场所、商业中心和交通枢纽的重要设备。然而,户外环境复杂多变,静电问题成为影响设备稳定性和寿命的重要因素。[KIHU快狐]户外触摸一体机通过其独特的防静电设计,有效保护内部电路安全&a…...

液下泵公司选哪家

朋友们,最近好几个做化工、污水处理的朋友都在问我同一个问题:“液下泵到底选哪家公司的靠谱?” 说实话,这问题真不是一两句能说清的。市面上公司太多了,都说自己好,价格从几千到十几万都有,选错…...

基于Chrome140的VK账号自动化(关键词浏览)——运行脚本(三)

引言在之前撰写的前两篇文章当中,我们有条不紊地分别完成了开发环境的精心搭建与核心框架的严谨实现。通过一系列细致的操作和代码编写,成功构建了一个基于 动作执行器(action_executor) 与 状态机模式 的 VK 自动化浏览系统。这个…...

Obsidian智能体学习(一)

今天干了啥 说实话,今天就干了一件事:把Obsidian和AI模型连起来。 为什么选Obsidian 市面上笔记软件一大堆,为啥偏偏选Obsidian? 简单说,它就是个文件夹管理器,所有笔记都是纯文本的Markdown文件&#…...

AI写论文必备清单!4款AI论文写作工具,轻松搞定各类学术论文!

为你排忧解难的四款AI论文写作工具 还在为撰写期刊论文而烦恼吗?面对大量的文献资料、繁琐的格式要求以及反复的修改过程,低效率已经成为许多学术人员的共同痛点!别担心,接下来要介绍的四款AI论文写作工具,经过实测&a…...

【教程】OpenClaw(Clawdbot)华为云10分钟部署及使用保姆级流程

【教程】OpenClaw(Clawdbot)华为云10分钟部署及使用保姆级流程。OpenClaw(Clawdbot/Moltbot)作为开源、本地优先的AI助理框架,凭借724小时在线响应、多任务自动化执行、跨平台协同等核心能力,成为个人办公与…...

串行调用 3 个 API 总翻车?这 3 种错误处理策略让 Skill 稳如泰山

🚀 本文收录于Github:AI-From-Zero 项目 —— 一个从零开始系统学习 AI 的知识库。如果觉得有帮助,欢迎 ⭐ Star 支持! 一个Skill需要串行调用三个外部API,如何正确处理局部失败?一、最常见的错误&#xff…...

GitHub学生认证保姆级教程,两年Copilot!

一、材料准备1.纸质证明准备以下纸质资料:2.信息文字材料准备(关于学校的学校官网基本上都有):① 学校邮箱 ② 市,省,国 (如:Changshu,Suzhou,China)(学校地址) ③ 学校官…...

升级炸裂!zmaiFy 双版本 AI 断句革新,字幕翻译效率再翻番

在影视内容出海与跨语言观影需求爆发的当下,字幕翻译与音频转录的效率、精准度,直接决定了内容传播的广度与深度。2026 年 3 月,一站式字幕处理平台 zmaiFy 迎来重磅版本升级,豆包模型大版本迭代 多模型语义断句升级双重福利重磅…...

基于matlab的模拟退火算法优化TSP(SA-TSP),最优路径动态寻优。 输出最优路径值、...

基于matlab的模拟退火算法优化TSP(SA-TSP),最优路径动态寻优。 输出最优路径值、路径曲线、迭代曲线。 数据可更换自己的,程序已调通,可直接运行。咱们今天来玩点刺激的——用MATLAB搞个会自己找最优路线的模拟退火快递小哥!先看效…...

一种融合Circle混沌映射、Levy飞行策略与透镜成像折射学习的改进长鼻浣熊优化算法--MA...

一种改进的长鼻浣熊优化算法--MATLAB 改进包括: Circle混沌映射 Levy飞行策略 透镜成像折射学习长鼻浣熊优化算法(COOA)最近在群体智能领域冒了个泡,这货模仿了浣熊水下摸石头找食物的行为。原始版本在复杂问题上容易卡在局…...

LiuJuan20260223Zimage镜像免配置:内置模型路径校验、依赖自动安装与健康检查脚本

LiuJuan20260223Zimage镜像免配置:内置模型路径校验、依赖自动安装与健康检查脚本 1. 开箱即用:一个为LiuJuan图片生成而优化的AI镜像 如果你正在寻找一个能快速生成LiuJuan风格图片的AI工具,但又不想折腾复杂的模型部署和环境配置&#xf…...

扣子平台客服智能体实战:从架构设计到生产环境部署

最近在负责公司客服系统的智能化升级,原来的系统在高并发下经常“罢工”,用户意图识别也总是不准,搞得客服和用户都很头疼。经过一番调研和折腾,我们最终基于扣子平台的客服智能体,搭建了一套相对稳定、高效的解决方案…...

Infoseek品牌公关:主动防控舆情,筑牢品牌发展根基

数字化时代信息传播呈现“快、广、杂”的特点,网络中一句负面评价、一条不实谣言,都可能快速发酵为品牌危机,严重影响企业口碑与经营。多数中小企业缺乏专业公关能力,面对舆情往往被动应对,不仅处置成本高、效率低&…...

Qwen-Image-2512-Pixel-Art-LoRA 商业案例:为品牌打造限量版像素艺术数字藏品

Qwen-Image-2512-Pixel-Art-LoRA 商业案例:为品牌打造限量版像素艺术数字藏品 最近几年,数字藏品这个概念越来越火,很多品牌都在琢磨怎么用它来和用户玩点新花样。但说实话,很多项目要么是简单地把实体产品拍个照做成数字版&…...

pycharm实现skills示例

文章目录步骤报错 未找到技能: python步骤 1、新建一个项目,名称为:skills_demo 2、在项目根目录下,创建一个名为 main.py 的文件,并将以下代码复制进去,代码: import json import os from dataclasses i…...

Linux vim编辑器中文乱码解决方案

问题现象在Linux终端中,命令行可以正常显示中文,但使用Vim打开文件时,中文内容变成乱码(如���或��),或者Vim启动时报错E749: Empty buffer。这通常…...

小白程序员必看:轻松入门大模型Agent实战技巧(含收藏)

本文详细介绍了大模型Agent的核心构成(LLM、记忆、工具、规划)及与普通Prompt调用的区别。深入解析了规划模块(CoT/ToT/GoT)、工具类型与定义、ReAct框架原理、记忆模块分类。同时,探讨了死循环解决、工具调用准确率提…...