linux中sync和direct的区别

[学习如逆水行舟,不进则退]
对于linux中一些常用的写操作,对比一下direct和sync的区别,后面会专门起个专题讲一下linux中的缓存机制和page cache
在这里插入图片描述
linux中sync和direct区别
o_direct
绕过缓冲区高速缓存,直接IO
直接IO:Linux允许应用程序在执行磁盘IO时绕过缓冲区高速缓存,从用户空间直接将数据传递到文件或磁盘设备,称为直接IO(direct IO)或者裸IO(raw IO)
应用场景:数据库系统,其高速缓存和IO优化机制均自成一体,无需内核消耗CPU时间和内存去完成相同的任务
弊端:可能会大大降低性能,内核对缓冲区告诉缓存做了不少优化,包括:按顺序预读取,在成簇磁盘块上执行IO,允许访问同一文件的多个进程共享高速缓存的缓冲区
注意可能发生的不一致性:若一进程以O_DIRECT标志打开某文件,而另一进程以普通(即使用了高速缓存缓冲区)打开同一文件,则由直接IO所读写的数据与缓冲区高速缓存中内容之间不存在一致性,应尽量避免这一场景
使用直接IO需要遵守的一些限制:
1、用于传递数据的缓冲区,其内存边界必须对齐为块大小的整数倍
2、数据传输的开始点,即文件和设备的偏移量,必须是块大小的整数倍
3、待传递数据的长度必须是块大小的整数倍。
不遵守上述任一限制均将导致EINVAL错误。
O_SYNC
以同步方式写入文件
功能:强制刷新内核缓冲区到输出文件。这是有必要的,因为为了数据安全,需要确保将数据真正写入磁盘或者磁盘的硬件告诉缓存中
同步IO的定义:某一IO操作,要么已成功完成到磁盘的数据传递,要么被诊断为不成功。
linux定义了两种同步IO完成类型:
1、确保针对文件的一次更新传递了足够的信息(部分文件元数据)到磁盘,以便于之后对数据的获取
2、确保针对文件的一次更新传递了所有的信息(所有文件元数据)到磁盘,即使有些在后续对文件数据的操作并不需要。
常用函数
fsync 作用:fsync()系统调用将使缓冲数据和fd相关的所有元数据都刷新到磁盘上
fdatasync 作用:fdatasync()系统调用的作用类似fsync(),只是强制文件处于synchronized IO data integrity compeletion状态。
sync系统调用 作用:sync()系统调用会使包含更新文件信息的所有内核缓冲区(即数据块、指针块、元数据等)刷新到磁盘上。
detail:若内容发生变化的内核缓冲区在30s内未经显式方式同步到磁盘上,则一条长期运行的内核线程会确保将其刷新到磁盘上。这一做法是为了规避缓冲区与相关磁盘文件内容长期处于不一致状态
使所有写入同步:O_SYNC 调用open后,每个write调用会自动将文件数据和元数据刷新到磁盘上,即按照Synchronized IO file integrity completion的要求执行写操作
两者区别:fdatasync()可能会减少磁盘操作的次数,由fsync()调用请求的两次变成一次。例如,修改了文件的数据,而文件大小不变,那么调用fdatasync调用请求只强制进行了数据更新,相比之下,fsync()调用会强制将元数据传递到磁盘上,而元数据和文件数据通常驻留在磁盘的不同区域,更新这些数据需要反复在整个磁盘上执行寻道操作
有无O_SYNC性能对比
场景:将一百万字节写入一个ext2文件系统上的新创建文件,比较写入时间
结果

结论
采用O_SYNC标志(或者频繁调用fsync(), fdatasync()或sync())对性能影响极大。
性能下降的直接表现为运行总用时大为增加:在缓冲区为1字节的情况下,运行时间相差1000多倍。
以O_SYNC标志执行写操作时运行总用时和CPU时间之间的巨大差异(1030 - 98.8),原因是系统在每个缓冲区中将数据向磁盘传递时会把程序阻塞起来
IO缓冲层次关系
首先,通过stdio库将用户数据传递到stdio缓冲区,该缓冲区位于用户态内存区。
当缓冲区填满,stdio库会调用write()系统调用,将数据传递到内核高速缓冲区,该缓冲区位于内核态内存区。
最终,内核发起磁盘操作

左侧虚线方框中为可于任何时刻显式强制刷新各类缓冲区的调用。
右侧所示为促使刷新自动化的调用:通过禁用stdio的缓冲,和在文件输出类的系统调用中启用同步,从而使每个write()调用立刻刷新到磁盘
区别
o_direct:任何读写操作都只在用户态地址空间和磁盘之间传送而不经过page cache
O_SYNC: 只影响写操作,block当前写进程,先从用户态内存写入page cache, 再从page cache写入磁盘,然后才返回到用户进程
O_DIRECT: 无缓冲的输入、输出
O_SYNC:以同步IO方式打开文件

回龙观的春天
关注 关注
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
linux 文件传输 connect direct,Linux Direct 文件读写(文件DIO)
weixin_36179402的博客
05-14 871
有时候,读写文件并不想要使用系统缓存(page cache),此时 direct 文件读写就派上了用场,使用方法:(1)打开文件时,添加O_DIRECT参数:需要定义_GNU_SOURCE,否则找不到O_DIRECT宏定义示例片段:#define _GNU_SOURCE#include #include #include int fd = open("test.out", O_RDWR | O_C...
文件IOdirectsync标志位——O_DIRECT和O_SYNC详析
weixin_30249203的博客
08-22 1491
man手册里介绍O_DIRECT标志是这么介绍的: O_DIRECT (since Linux 2.4.10) Try to minimize cache effects of the I/O to and from this file. In general this will degrade performance, but it is useful in special situation...
Linux命令sync详解
听风的鱼鱼儿
07-14 2735
sync命令是一个简单的Linux命令,用于将文件系统的数据刷写到磁盘。其主要目的是确保所有在内存缓冲区的数据都被写入磁盘,从而保障数据的持久性和一致性。在进行关机、重启或执行重要文件操作前,使用sync命令可以极大地减少数据丢失的风险。
探索osync:高效双向文件同步工具
最新发布
gitblog_01037的博客
08-09 433
探索osync:高效双向文件同步工具 osyncA robust two way (bidirectional) file sync script based on rsync with fault tolerance, POSIX ACL support, time control and near realtime sync项目地址:https://gitcode.com/gh_mirror...
遇到direct path sync等待事件
msdnchina的专栏@JiNan,ShanDong
05-30 2171
遇到direct path sync等待事件
Linux direct io使用例子
weixin_33847182的博客
11-27 868
Linux direct io使用 在linux 2.6内核上使用direct io不难,只需按照如下几点来做即可: 1,在open文件时加上O_DIRECT旗标,这样以通告内核我们想对该文件进行直接io操作。 2,在源文件的最顶端加上_GNU_SOURCE宏定义,或在编译时加在命令行上也可以,否则将提示: direct_io_write_file.c: In function 'main': d...
Linux通过配置wpa_supplicant,支持wifi-direct功能
04-04
请用有道云笔记打开
hw_host1x02_sync.rar_Linux/Unix编程_Unix_Linux_
08-11
Linux和Unix系统,这样的程序通常需要利用系统调用来实现低级别的硬件访问和进程间同步。 描述提到的“Function naming determines intended use for Linux v2.13.6.”指出函数命名对于理解该软件在Linux ...
Linux DRM Developer-文翻译_linux_DRM_drm开发者文档_
10-04
Linux Direct Rendering Manager (DRM) 是Linux内核用于图形硬件管理的重要组件,它为现代图形处理器(GPU)提供了一个接口,使得操作系统可以高效地控制显示子系统。这份"Linux DRM Developer-文翻译"文档是...
安装fio命令linux,在Linux安装和使用Fio来测评硬盘性能
weixin_34285757的博客
04-29 2522
本文使用 Ubuntu 操作系统,并且具有 sudo 或 root 权限。将进行完整安装和使用 Fio,实践证明 Fio 在 Debian、Ubuntu、Red Hat、Fedora、CentOS、Mandriva、Arch Linux 等版本运行良好。Fio简介Fio(Flexible I/O Tester)是一款由 Jens Axboe 开发的用于测评和压力/硬件验证的自由开源的软件。它支持...
Linuxdd命令使用实例教程
09-15
Linux的`dd`命令是一个强大的工具,用于复制和转换文件。它的工作原理是按照指定的块大小读取源文件,然后进行转换,并将结果写入目标文件。`dd`命令在系统维护、磁盘克隆、格式化媒介以及数据转换等场景非常...
open 函数的O_DIRECT和O_SYNC区别
cyq6239075的博客
10-23 4613
In a perfect world, there would be no operating system crashes, power outages or disk failures, and programmers wouldn't have to worry about coding for these corner cases. Unfortunately, these failure...
KVM虚拟化之磁盘:磁盘缓存模式
刘元林的博客
08-07 3112
虚拟化一般网络和存储都是难点。下图所示,磁盘I/O从虚拟机到宿主物理机存储的过程。 其虚拟机镜像并不是必须的。并不一定要给虚拟机创建虚拟磁盘文件。我们可以通过逻辑映射,将SAN的块设备指定给虚拟机使用。这里我们暂讨论宿主机模拟磁盘的场景。 如上图,缓存模式作用在虚拟化层和宿主机文件系统或块设备之间。 性能:none>unsafe>writeback>writeththrough 数据一致性:writethrough...
Linux I/O系列之直接内存(Direct IO)原理剖析和使用
跳小闹成长记
08-10 5239
在上一篇文章《Linux I/O操作fsync后数据就安全了么(fsync、fwrite、fflush、mmap、write barriers详解)》咱们一起学习了在Linux如何将数据安全的写入到磁盘。其我们提到了直接IO。使用它能够在磁盘缓存空间和用户空间直接建立一个通道,这样咱们在用户空间就能够直接操作磁盘的数据。本文咱们就一起深入学习直接IO。
dd命令测试linux磁盘io情况,使用dd命令简单测试磁盘性能
weixin_39636645的博客
04-30 295
1.dd命令的简单使用工作,我们经常需要测试磁盘的性能,我们可以使用 dd 命令对系统的磁盘性能进行一个测试。dd if=/dev/zero of=/mnt/test/testfile bs=1G count=1 oflag=directif:表示从/dev/zero这个设备读取数据,在类UNIX 操作系统,/dev/zero是一个特殊的设备文件,当你读它的时候,它会提供无限的空字符(NULL...
linux内核O_SYNC,文件IO - O_DIRECT和O_SYNC详解《转载》
weixin_39790102的博客
04-30 569
用于传递数据的缓冲区,其内存边界必须对齐为块大小的整数倍数据传输的开始点,即文件和设备的偏移量,必须是块大小的整数倍待传递数据的长度必须是块大小的整数倍。不遵守上述任一限制均将导致EINVAL错误。二,O_SYNC,以同步方式写入文件功能:强制刷新内核缓冲区到输出文件。这是有必要的,因为为了数据安全,需要确保将数据真正写入磁盘或者磁盘的硬件告诉缓存。我们先熟悉一下同步IO相关定义和系统调用。同步...
Unix环境高级编程学习——文件IO
baidu_34933057的博客
08-23 667
文件IO
linux 的直接direct io O_DIRECT
zlpzlpzyd的专栏
01-01 1171
Direct IO也叫无缓冲IO,裸IO(rawIO),意思是使用无缓冲IO对文件进行读写,不会经过page cache。通常,我们使用的文件流读取、内存映射都属于 Cache IO,因为将数据写入文件,首先会写入cache,最终再落盘到 IO device 或者称为 disk上。cache IO 使得我们在写入、读取(预读取、顺序读取等特性)文件数据的时候,性能得以提升,能够从cache(内存)读取数据。
Linux进阶-文件IO操作
weixin_47077788的博客
11-22 976
Linux内核:屏蔽硬件区别,把所有的硬件设备抽象成文件,提供统一的接口给用户使用。
写文章

热门文章

  • IPD相关概念及时间点 10936
  • ceph 网络问题常用排查手段 2747
  • linux中sync和direct的区别 2072
  • CephFS 介绍及使用经验分享 1768
  • linux audit(安全审计功能) 1282

分类专栏

  • 工具 4篇
  • 生活随想

最新评论

  • ceph 网络问题常用排查手段

    ng_wind: iperf3 的 -d 参数是--debug 才对吧?

  • IPD相关概念及时间点

    weixin_40883452: 请问最后一个图有清晰版吗 求

  • ceph 网络问题常用排查手段

    大隐于家: 这个版本iperf3 能用双向测试,请教版本号表情包

  • IPD相关概念及时间点

    royallewis: 第三张图有清晰版吗

  • IPD相关概念及时间点

    caochen12345: 求第三个图高清版,放大也看不清文字,谢谢

最新文章

  • XX产品竞争力分析
  • 云计算、虚拟化、大数据、人工智能
  • linux性能工具分析图谱
2020年25篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家福建主题商场美陈供应常州玻璃钢花盆厂家直销安徽户外玻璃钢雕塑供应商商场大象美陈气球造型南京圆柱形玻璃钢花盆宁夏玻璃钢公园雕塑南充品牌玻璃钢卡通雕塑安徽商场美陈报价成都抽象玻璃钢雕塑销售厂家合肥设计玻璃钢雕塑玻璃钢雕塑 合同安庆玻璃钢雕塑订制福建走廊商场美陈售价耐腐蚀玻璃钢雕塑哪家好江门发光小品玻璃钢雕塑生产商玻璃钢酒保人物雕塑图片昆明卡通玻璃钢雕塑厂家奉贤区知名玻璃钢雕塑多少钱郴州玻璃钢雕塑生产公司哪家好宣威玻璃钢烤漆雕塑厂家商场门型美陈用什么做的镜面玻璃钢雕塑在线咨询河南水果玻璃钢雕塑多少钱公园主题玻璃钢雕塑厂家批发芜湖抽象玻璃钢雕塑价位玻璃钢马马赛克雕塑哈尔滨三门峡玻璃钢卡通雕塑白银公园玻璃钢雕塑定制玻璃钢雕塑谷仓雕塑上树脂好还是玻璃钢好香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化