linux 磁盘IO是怎么工作的

linux将VFS作为中间层来连接应用程序和文件系统。
对应用程序来说,只需要与VFS的标准文件接口交互,不需要关注文件的具体实现
对文件系统来说,只需要按照VFS的标准,就可以无缝对接各种应用程序

VFS内部通过目录项dentry,索引节点inode、逻辑块以及超级块等数据结构来管理文件
目录项dentry 记录了文件名,以及与其他目录项的关系,这部分数据存在内存缓存中
索引节点inode,记录了文件的元数据
逻辑块,是由8块连续扇区构成的最小读写单元,用来存储文件数据
超级块,用来记录文件系统的整体状态,如索引节点和逻辑块的使用状况
以上三种数据存放在磁盘中

磁盘是可以持久化数据的设备,根据存储介质的不同可以分为机械硬盘HDD和固态磁盘SDD,
无论是HDD还是SDD,顺序IO都比随机IO要快
对HDD来说,因为读数据需要挪动磁头和盘片旋转,随机IO需要更多的磁头寻道和盘片旋转,因此顺序IO更快。
对SDD来说,存在先擦除后写入的限制,随机读写会产生更多的垃圾回收。
HDD的最小读写单位是一个扇区,512字节,但我们通常都是使用8个连续扇区组成一个逻辑块来使用。
SDD的最小读写单位一般是4KB。

根据接口的不同可以分为IDE,SATA ,SAS,SCSI等,不同的接口往往分配不同的设备名,IDE设备会分配hd前缀的设备名,SATA接口设备会分配sd前缀的设备名

在Linux中,磁盘实际上作为块设备来管理的,以块为单位读写数据,支持随机读写。

通用块层 与VFS类似,是介于文件系统和磁盘设备之间,两个功能:
1.向上为文件系统和应用程序提供访问块设备的标准接口
2.通用块层会给文件系统和应用程序发来的IO请求排队,通过重新排序、请求合并等方式提高磁盘的IO效率

IO栈
linux存储系统的IO栈,由上到下三层:文件系统层、通用块层、设备层

image.png

存储系统的IO,通常是系统中最慢的一环,一般会通过各种缓存方式来优化IO效率。

磁盘的性能指标
五个常见指标,使用率、饱和度、IOPS、吞吐率、响应时间。
使用率,磁盘处理IO的时间百分比,>80%意味着磁盘瓶颈
饱和度,磁盘处理IO的繁忙程度,过高的饱和度也意味着磁盘瓶颈,打到100%时,磁盘无法接受新的IO请求。
IOPS,每秒IO请求数
吞吐量,每秒的IO请求大小
响应时间,IO从发出请求到收到响应的时间
在数据库、大量小文件的大量随机读写的应用场景中IOPS更能反映系统的整体性能,而对于多媒体顺序读写比较多的场景中,吞吐量则更能反映系统的整体性能
磁盘的性能读写测试工具使用fio

观测磁盘的性能指标
iostat是最常用的磁盘性能观测工具

[root@ocbot-1 ~]# iostat -d -x 1
Linux 3.10.0-957.12.1.el7.x86_64 (ocbot-1)      11/03/2021      _x86_64_        (8 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.94    0.57    0.94    11.74   190.65   267.95     0.01    9.19    2.14   13.45   0.65   0.10

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00    45.00    0.00  230.00     0.00  3680.00    32.00     1.52    6.62    0.00    6.62   1.13  25.90

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00

各指标含义如下图


image.png

其中%util 就是磁盘使用率
r/s+w/s 就是IOPS
rkb/s+wkb/s就是磁盘的吞吐量
r_wait+w_wait 就是磁盘响应时间

进程IO观测
使用pidstat

[root@ocbot-1 ~]# pidstat -d 1
Linux 3.10.0-957.12.1.el7.x86_64 (ocbot-1)      11/03/2021      _x86_64_        (8 CPU)
10:42:46 PM   UID       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command

kB_rd/s 是进程每秒读取的数据大小
kB_wr/s,每秒发出的写请求大小
kB_ccwr/s 每秒取消的写请求大小

然后iotop 是类似于top的工具,可以看到当前io比较大的程序

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容