linux内核io读写,LINUX 读写 IO相关理解

如何查看Linux系统的内存页大小:

getconf PAGESIZE/PAGE_SIZE 返回值单位为Bytes

buffers 是用来给块设备使用的缓存区,他只记录文件系统的 metadata 以及 tacking in-flight pages;cached 是用来给文件做缓冲。

意思就是说,buffers 用来存储目录里面有什么内容和权限,而 cached 用来记忆我们打开的文件。我们稍微来做一个实验,还是之前的那一台机器,我们观察 /proc/meminfo 下面的相关选项的数据变化。

首先,磁盘IO主要的延时是由(以15000rpm硬盘为例): 机械转动延时(机械磁盘的主要性能瓶颈,平均为2ms) + 寻址延时(2~3ms) + 块传输延时(一般4k每块,40m/s的传输速度,延时一般为0.1ms) 决定。(平均为5ms)

而网络IO主要延时由: 服务器响应延时 + 带宽限制 + 网络延时 + 跳转路由延时 + 本地接收延时 决定。(一般为几十到几千毫秒,受环境干扰极大)

文件io

https://blog.csdn.net/weixin_39446980/article/details/85235537

IO,其实意味着:数据不停地搬入搬出缓冲区而已(使用了缓冲区)。比如,用户程序发起读操作,导致“ syscall read ”系统调用,就会把数据搬入到 一个buffer中;用户发起写操作,导致 “syscall write ”系统调用,将会把一个 buffer 中的数据 搬出去(发送到网络中 or 写入到磁盘文件)。DMA(Direct Memory Access,直接内存存取,不需要CPU参与) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。

开发

珍藏 linux 同步IO: sync、fsync与fdatasync

https://blog.csdn.net/younger_china/article/details/51127127

缓冲区高速缓存或页面高速缓存

https://www.cnblogs.com/mlgjb/p/7991903.html

当将数据写入文件时,内核通常先将该数据复制到其中一个缓冲区中,如果该缓冲区尚未写满,则并不将其排入输出队列,而是等待其写满或者当内核需要重用该缓冲区以便存放其他磁盘块数据时,再将该缓冲排入输出队列,然后待其到达队首时,才进行实际的I/O操作。这种输出方式被称为延迟写(delayed write)

iowait

$ cat /sys/block/sda1/queue/scheduler

[noop] anticipatory deadline cfq

修改为cfq

$ echo 'cfq'>/sys/block/sda1/queue/scheduler

立刻生效

$ cat /sys/block/sda1/queue/scheduler

noop anticipatory deadline [cfq]

ed26f786e73d

2730287-2bd9566db9a245ea.png

磁盘IO场景

用户调用标准C库进行IO操作,数据流为:应用程序buffer->C库标准IObuffer->文件系统page cache->通过具体文件系统到磁盘。

用户调用文件IO,数据流为:应用程序buffer->文件系统page cache->通过具体文件系统到磁盘。

用户打开文件时使用O_DIRECT,绕过page cache直接读写磁盘。

用户使用类似dd工具,并使用direct参数,绕过系统cache与文件系统直接写磁盘。

发起IO请求请的步骤简析

(以最长链路为例)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值