LINUX 读写 IO相关理解

2020-03-13  本文已影响0人  oasis_m

声明:所有文章只作为学习笔记用,转载非原创
https://www.cnblogs.com/cobbliu/p/5389556.html
https://blog.csdn.net/yiyeguzhou100/article/details/100529160
https://www.cnblogs.com/cobbliu/p/5389556.html

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

  1. getconf PAGESIZE/PAGE_SIZE 返回值单位为Bytes

参考 # 网络IO和磁盘IO详解
https://www.cnblogs.com/sunsky303/p/8962628.html
https://www.cnblogs.com/newjiang/p/9541223.html 读写缓存
https://www.jianshu.com/p/4cbdfbdb7552

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 的大量中断负载。

开发

https://www.cnblogs.com/hesper/p/11547263.html

珍藏 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

https://www.jianshu.com/p/76ca793daf1d
磁盘读写小记录
https://www.jianshu.com/p/76ca793daf1d

$ 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]

https://www.jianshu.com/p/76ca793daf1d

2730287-2bd9566db9a245ea.png

磁盘IO场景

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

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

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

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

发起IO请求请的步骤简析

(以最长链路为例)

i/o 问题处理
https://blog.csdn.net/hixiaoxiaoniao/article/details/86295712

ss
http://www.ttlsa.com/linux-command/ss-replace-netstat/

上一篇下一篇

猜你喜欢

热点阅读