点击上方“C语言与CPP编程”,选择“关注/置顶/星标公众号”
干货福利,第一时间送达!
传统的 System Call I/O由 CPU 直接处理数据的传送,数据拷贝时会一直占用 CPU 的资源。
(相关资料图)
读操作
当应用程序执行 read 系统调用读取一块数据的时候,如果这块数据已经存在于用户进程的页内存中,就直接从内存中读取数据。
read(file_fd,tmp_buf,len);
发起数据读取的流程如下:
写操作
当应用程序准备好数据,执行 write 系统调用发送网络数据时,先将数据从用户空间的页缓存拷贝到内核空间的网络缓冲区(Socket Buffer)中,然后再将写缓存中的数据拷贝到网卡设备完成数据发送。
write(socket_fd,tmp_buf,len);
基于传统的 I/O 写入方式,write() 系统调用会触发 2 次上下文切换,1 次 CPU 拷贝和 1 次 DMA 拷贝。
用户程序发送网络数据的流程如下:
网络 I/O
磁盘 I/O
高性能优化的 I/O
页缓存(PageCache)技术。
其中,页缓存(PageCache) 是操作系统对文件的缓存,用来减少对磁盘的 I/O 操作,以页为单位的,内容就是磁盘上的物理块,页缓存能帮助程序对文件进行顺序读写的速度几乎接近于内存的读写速度,主要原因就是由于 OS 使用 PageCache 机制对读写访问操作进行了性能优化。
页缓存读取策略:当进程发起一个读操作 (比如,进程发起一个 read() 系统调用),它首先会检查需要的数据是否在页缓存中:
如果在,则放弃访问磁盘,而直接从页缓存中读取。
如果不在,则内核调度块 I/O 操作从磁盘去读取数据,并读入紧随其后的少数几个页面(不少于一个页面,通常是三个页面),然后将数据放入页缓存中。
页缓存写策略:当进程发起 write 系统调用写数据到文件中,先写到页缓存,然后方法返回。此时数据还没有真正的保存到文件中去,Linux 仅仅将页缓存中的这一页数据标记为 “脏”,并且被加入到脏页链表中。
然后,由 flusher 回写线程周期性将脏页链表中的页写到磁盘,让磁盘中的数据和内存中保持一致,最后清理“脏”标识。在以下三种情况下,脏页会被写回磁盘:
存储设备的 I/O 栈
由图可见,从系统调用的接口再往下,Linux 下的 IO 栈致大致有三个层次:
Linux IO系统
这下一目了然了吧?传统的 Buffered IO 使用 read 读取文件的过程什么样的?假设要去读一个冷文件(Cache 中不存在),open 打开文件内核后建立了一系列的数据结构,接下来调用 read,到达文件系统这一层,发现 Page Cache 中不存在该位置的磁盘映射,然后创建相应的 Page Cache 并和相关的扇区关联。
然后请求继续到达块设备层,在 IO 队列里排队,接受一系列的调度后到达设备驱动层,此时一般使用 DMA 方式读取相应的磁盘扇区到 Cache 中,然后 read 拷贝数据到用户提供的用户态 buffer 中去(read 的参数指出的)。
整个过程有几次拷贝? 从磁盘到 Page Cache 算第一次的话,从 Page Cache 到用户态 buffer 就是第二次了。而 mmap 做了什么?mmap 直接把 Page Cache 映射到了用户态的地址空间里了,所以 mmap 的方式读文件是没有第二次拷贝过程的。
那 Direct IO 做了什么? 这个机制更狠,直接让用户态和块 IO 层对接,直接放弃 Page Cache,从磁盘直接和用户态拷贝数据。好处是什么?写操作直接映射进程的buffer到磁盘扇区,以 DMA 的方式传输数据,减少了原本需要到 Page Cache 层的一次拷贝,提升了写的效率。
对于读而言,第一次肯定也是快于传统的方式的,但是之后的读就不如传统方式了(当然也可以在用户态自己做 Cache,有些商用数据库就是这么做的)。
除了传统的 Buffered IO 可以比较自由的用偏移+长度的方式读写文件之外,mmap 和 Direct IO 均有数据按页对齐的要求,Direct IO 还限制读写必须是底层存储设备块大小的整数倍(甚至 Linux 2.4 还要求是文件系统逻辑块的整数倍)。
所以接口越来越底层,换来表面上的效率提升的背后,需要在应用程序这一层做更多的事情。所以想用好这些高级特性,除了深刻理解其背后的机制之外,也要在系统设计上下一番功夫。
I/O Buffering
如图,当程序调用各类文件操作函数后,用户数据(User Data)到达磁盘(Disk)的流程如图所示。
2. 系统调用的 read/write 和真实的磁盘读写之间也存在一层 buffer,这里用术语 Kernel buffer cache 来指代这一层缓存。
在 Linux 下,文件的缓存习惯性的称之为 Page Cache,而更低一级的设备的缓存称之为 Buffer Cache。
这两个概念很容易混淆,这里简单的介绍下概念上的区别:Page Cache 用于缓存文件的内容,和文件系统比较相关。文件的内容需要映射到实际的物理磁盘,这种映射关系由文件系统来完成;Buffer Cache 用于缓存存储设备块(比如磁盘扇区)的数据,而不关心是否有文件系统的存在(文件系统的元数据缓存在 Buffer Cache 中)。
你好,我是飞宇,本硕均于某中流985 CS就读,先后于百度搜索以及字节某电商部门担任Linux C/C++后端研发工程师。
同时,我也是知乎博主@韩飞宇,日常分享C/C++、计算机学习经验、工作体会,欢迎点击阅读原文围观我分享的学习经验
我组建了一些社群一起交流,群里有大牛也有小白,如果你有意可以一起进群交流。
欢迎你添加我的微信,我拉你进技术交流群。此外,我也会经常在微信上分享一些计算机学习经验以及工作体验,还有一些内推机会。
扫描上方二维码,加我微信
我的私人微信
点击阅读原文查看你错过的宝藏
标签:
-
微动态丨深入理解Linux的I/O系统
点击上方“C语言与CPP编程”,选择“关注 置顶 星标公众号”干货福利,第一时间送达!传统的SystemCallI O
-
重庆:桥下空间改造为城市增色
重庆:桥下空间改造为城市增色
-
真复苏了!“五一”假期出行人次、旅游收入等多项数据超过2019年同期
【真复苏了!“五一”假期出行人次、旅游收入等多项数据超过2019年同期】“五一”假期收官。5月3日晚间,文
-
俄方:有无人机袭击克里姆林宫 莫斯科已禁飞无人机 每日消息
当地时间5月3日,克里姆林宫表示,有两架无人机对克宫进行了攻击。俄方及时通过电子战系统采取行动,使试图
-
环球热资讯!【能源广角】着力破解绿氢输送难题
正如石油、天然气凭借成熟的管网系统实现了对煤炭的快速替代,管道输氢也有助于扩大绿氢消费半径和销量。氢
-
环球速看:选择大城市逐梦还是小城市安稳
前不久有位读者提了个关于offer选择的问题,他的背景还是不错的,本科中流985,保研到了top2,研究方向是和
-
毛霉菌最怕什么_毛霉菌 世界今亮点
1、毛霉菌(mucor)又叫黑霉、长毛霉。2、毛霉菌是接合菌亚门接合菌纲毛霉目毛霉科真菌中的一个大属。3、以
-
世界看热讯:民间故事大全200字左右(民间故事大全200字)
民间故事大全200字左右,民间故事大全200字这个很多人还不知道,现在让我们一起来看看吧!1、 《过年的传说
-
焦点播报:不得不防,乌克兰一旦攻破扎波罗热,俄罗斯可就危险了
继美国和乌克兰在周二早些时候同步发布了俄罗斯军队伤亡数字之后,俄罗斯国防部也在周二晚间发布了乌克兰的
-
实时:【晓歌】你是我的...谁?
“此生谁料,心在天山,身老沧洲。”娟秀的字迹在一份已经增厚无数次的本子上铺开。呜,不是很懂这句话的意
-
崩坏三(当舰长出差三个月回来后,女武神会。。。。)
up考完试就回来更新啦,大家接着看咯舰长换了个新形象“我回来啦!!”还没有走进宿舍,舰长已经忍不住呐喊
-
焦点消息!尼山世界古典文明论坛在维也纳成功举办
记者范佳5月2日,以“中西文化交流与互鉴”为主题的尼山世界古典文明论坛在维也纳国际中心成功举办。中国常
-
年轻人痛风发病率越来越高,多半与这5个不良习惯有关,趁早改
根据国家风湿病数据中心的调查显示,中国痛风患者的平均年龄在48 28岁,整体上表现出明显的年轻化趋势。从2
-
追梦:普尔最后的三分不是我们输球的原因 他在那儿之前已10中6 全球滚动
西部半决赛G1,勇士112-117不敌湖人。赛后,追梦更新了播客。谈到普尔的三分时,追梦表示:“他的那个三分
-
突发!一直升机坠落,3人遇难,现场画面曝光 焦点热闻
5月2日,有网友爆料称,西安白鹿仓景区一架直升机坠落。现场视频显示,坠落的直升机有受损。另一段视频中有
-
欧盟禁止乌克兰向五国出口部分粮食
欧盟委员会当地时间5月2日发表声明称,从即日起到6月5日,禁止乌克兰的小麦、玉米、油菜籽和葵花籽,出口到
-
剑网3怀旧服气纯宏怎么设置(剑网3缘起纯阳输出宏设置)-环球观焦点
1、《剑网3怀旧服》气纯宏怎么设置2、2、3、气纯宏自动补坐忘,自动破苍穹,自动回蓝4、 skill[prepare:
-
即时看!湖南一师分数线_湖南一师
1、这个我知道!要想教初中:一、要有大专以上的学历;二、要有教师证。2、目前来看像你说的那种靠学校分配
-
全球观速讯丨活动鞋架怎么组装_鞋架怎么组装
你们好,最近小品发现有诸多的小伙伴们对于活动鞋架怎么组装,鞋架怎么组装这个问题都颇为感兴趣的,今天小
-
“五一”期间多地基础设施工程建设持续推进-重点聚焦
新华社北京5月2日电题:“五一”期间多地基础设施工程建设持续推进坚守是建设者的常态,奋斗是劳动者不变的底
-
今日观点!1-0!中甲升班马疯狂庆祝,25岁本土射手暴力抽射破中超旧主!
这是第一阶段最后一轮比赛,前9轮北京人和积16分排在A组积分榜第二,泰州远大积15分位列第三,小组第一的成
-
星巴克2023财年第二季度全球同店销售额增长11%
5月3日消息,星巴克发布截至2023年4月2日的2023财年第二季度财报。报告期内,综合净收入增长14%至87亿美元
-
安阳市副市长常慧芹到殷都区人民医院调研紧密型医共体建设工作
3月3日,安阳市副市长常慧芹,市政府副秘书长李超,市卫健委党组书记、主任张金文,市医保局党组书记郝利民
-
世界简讯:澳洲稀土公司加快推进坦桑尼亚Ngualla项目,摆脱中国稀土依赖
据报道,5月1日周一,澳大利亚Peak稀土公司表示,已从高净值和离岸机构投资者那里锁定2,750万澳元(合1,800
-
仙女湖区加大投入做实民生实事
大江网 大江新闻客户端新余讯(江西日报全媒体记者胡光华、江拓华通讯员朱圣辉)走进新余市仙女湖区江口电厂
-
CNT和SES宣布将为加拉帕戈斯群岛居民提供“最好的4G/5G移动服务”
据Satnews5月1日报道,为了帮助厄瓜多尔加快其在环境脆弱的加拉帕戈斯群岛的数字包容计划,电信提供商CNT和
-
【全球热闻】知名巨头突然宣布:涨价!
在降价4个月后,特斯拉宣布上调国产车型售价。5月2日,特斯拉上调国产Model3售价至23 19万元,此前为22 99
-
东莞市商业银行最新排名(东莞市商业银行)_要闻速递
1、不是的,东莞银行原来是东莞商业银行,东莞农村商业银行就是原来的农村信用社,是完全不同的两个银行。以上
-
听小说赚钱软件哪个好 听小说用什么软件好
今天来聊聊关于听小说赚钱软件哪个好,听小说用什么软件好的文章,现在就为大家来简单介绍下听小说赚钱软件
-
RMC:梅西此次出行是与俱乐部沟通有误解,他应不会遭到队内处罚
直播吧5月2日讯据法国媒体RMC报道,梅西此次出行两方人士各有不同的说法,他应该不会因这次的事件被队内处