码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • linux写文件如何保证落盘?


    3.1.1. sync

    sync函数只是将所有修改过的块缓冲区排入写队列,然后就返回,它并不等待实际写磁盘操作结束。通常称为

    update的系统守护进程会周期性地(一般每隔30秒)调用sync函数。这就保证了定期冲洗内核的块缓冲区。命令

    sync也调用sync函数。sync会把对文件系统的元数据、缓存的文件数据写入所有底层的文件,对所有文件系统有

    用。sync 和 syncfs 起作用的是文件系统缓存,这些缓存是在内核空间管理的。

    3.1.2. syncfs

    syncfs需要一个文件描述符,只写入文件描述符指向的文件相关的文件系统数据的数据。

    3.1.3. fsync

    fsync函数只对由文件描述符filedes指定的单一文件起作用,并且等待写磁盘操作结束,然后返回。可用于数据库这样的应用程序,这种应用程序需要确保将修改过的块立即写到磁盘上。

    3.1.4. fdatasync

    fdatasync函数类似于fsync,但它只影响文件的数据部分。而除数据外,fsync还会同步更新文件的属性。对于提供事务支持的数据库,在事务提交时,都要确保事务日志(包含该事务所有的修改操作以及一个提交记录)完全写到硬盘上,才认定事务提交成功并返回给应用层。

    3.2. fsync与fdatasync区别

    除了同步文件的修改内容(脏页),fsync还会同步文件的描述信息(metadata,包括size、访问时间等等),因为文件的数据和metadata通常存在硬盘的不同地方,因此fsync至少需要两次IO写操作,多余的一次IO操作,根据Wikipedia的数据,当前硬盘驱动的平均寻道时间(Average seek time)大约是3~15ms,7200RPM硬盘的平均旋转延迟(Average rotational latency)大约为4ms,因此一次IO操作的耗时大约为10ms左右。Posix同样定义了fdatasync,放宽了同步的语义以提高性能:

    int fdatasync(int fd);

    fdatasync的功能与fsync类似,但是仅仅在必要的情况下才会同步,因此可以减少一次IO写操作。

    fdatasync does not flush modified metadata unless that metadata is needed in order to allow a

    subsequent data retrieval to be corretly handled.

    举例来说,文件的尺寸(st_size)如果变化,是需要立即同步的,否则OS一旦崩溃,即使文件的数据部分已同步,由于metadata没有同步,依然读不到修改的内容。而最后访问时间(atime)/修改时间(mtime)是不需要每次都同步的,只要应用程序对这两个时间戳没有苛刻的要求,基本没有问题。

    ref:

    linux同步机制(fdatasync fsync syncfs sync)详解 - 知乎

    函数sync、fsync与fdatasync的总结整理(必看篇) - 经验笔记

    linux同步IO函数:sync、fsync与fdatasync - 知乎

    https://lrita.github.io/images/posts/filesystem/Linux.Kernel.Write.Procedure.pdf

    write文件一个字节后何时发起写磁盘IO?

    延迟写与sync、fsync、fdatasync-CSDN博客

  • 相关阅读:
    d中nan接下来
    如何将 Transformer 应用于时间序列模型
    InputAction的使用
    datax与datax-web安装部署
    LeetCode --- 1475. Final Prices With a Special Discount in a Shop 解题报告
    Windows 安装 MySQL 5.7详细步骤
    pycharm使用运行Docker容器的python解释器
    libusb系列-007-Qt下使用libusb1.0.26源码
    时序数据库 TimescaleDB 安装与使用
    Bean的加载方式
  • 原文地址:https://blog.csdn.net/wwwlyj123321/article/details/134235860
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号