Linux磁盘IO、网络IO、零拷贝详解

2 02 3 年,朋友问我Linux中的I/O操作。
我向他解释说I/O就是输入和输出。
例如,将文件复制到计算机上,或者计算机将文件发送到互联网上,这些都是I/O操作。

他说,怎么实现的?我说,好吧,这得从用户空间和内核空间开始。
用户空间是程序运行的地方,内核空间是操作系统管理硬件的地方。
在Linux中,用户空间无法直接访问内核空间的数据,因此数据传输必须绕道而行。

他问:旁路流程是怎样的?举个例子,如果你使用read()函数读取一个文件,系统首先会检查内核缓冲区中是否有你想要的数据。
如果有,会直接复制给您;如果没有,将从磁盘读取它,然后复制给您。

他又问写文档怎么样?我想说的是,编写文件更复杂。
在将其写入磁盘之前,必须将其从用户空间复制到内核缓冲区。
中间需要复制三遍。

然后他问,网络I/O和磁盘I/O一样吗?我想说几乎是一样的,无论是读数据还是写数据,但是网络I/O延迟可能会更大,因为涉及到网络传输。

再问一下,如何提高I/O效率?我只想说Linux有不同的方法,例如直接I/O和mmap。
直接I/O意味着数据直接在用户空间和磁盘之间传输,mmap将内存映射到文件以最大限度地减少复制。

最后他问,Linux中有哪些类型的I/O模型?我就说一下,有BIO、NIO、I/O、IO和异步IO复用,每种都有自己的特点和适用场景。

他听后说,哦,原来很复杂啊。
你说,是的,I/O操作是计算机系统非常重要的一部分,Linux就是通过这些机制来提高性能的。
他点点头,说道:“我明白了,谢谢你。
”我说,不客气,你想做什么都可以。

浅淡linux的IO和磁盘IO的检测

结论: 1 . Linux I/O分类包括缓冲和非缓冲、直接和间接、同步阻塞和非阻塞、同步和异步。
2 、文件系统I/O通过应用层的系统调用进行,内核层维护文件数据结构。
3 、公共块层负责数据映射、零拷贝、逻辑卷管理、I/O请求处理。
4 . I/O调度器层包含NOOP、CFQ、Deadline、Anticipatory等算法。
5 、磁盘I/O检测重点关注IOPS、BW和Lat。
FIO是一种常用的检测工具。
6 . FIO测试步骤包括下载、安装、编写脚本、执行测试、分析结果。
7 . FIO 测试的示例包括混合测试、顺序读取、随机写入和顺序写入。

Linux查看磁盘io开销的几种方法

说到Linux系统中的磁盘IO开销,我确实有一些体会。
我使用Linux这么多年,使用这些命令来检查IO开销是很平常的事情。

我们先来说说top命令。
我基本上每天都会用这个命令来查看CPU信息。
查看 top 命令的输出并重点关注 Cpu(s) 行。
这里的 %wa 是一个很大的百分比。
它告诉你CPU等待IO的时间比例。
我以前也遇到过这种情况。
当%wa的值超过3 0%的时候,哎呀,我就知道IO压力相当大了。

然后是vmstat命令,我也经常使用它。
通过它,我可以获得系统各种状态的统计数据。
我通常输入 vmstat2 5 ,以便每 2 5 秒刷新一次信息。
然后你看看那些bi和bo。
这两项表示每秒发送到块设备和从块设备接收的块数。
之前见过一个案例,bi和bo的值极高,每秒有几十上百个块设备操作,这说明磁盘IO确实很忙。

我们来谈谈iostat命令。
这需要安装sysstat工具集,但在我使用的服务器上,这通常是预先安装的。
使用iostat -dx命令,我可以看到磁盘的详细扩展信息。
重点关注的是r/s和w/s,以及rKB/s和wKB/s。
一旦这些值很高,我就知道读写操作和数据传输很频繁。

总之,这三个命令各有千秋。
top命令是一个快速判断工具,vmstat命令提供了一些基本的IO统计信息,iostat命令是全面诊断IO开销的好帮手。
当然,这些只是一些基本的使用方法。
在实际应用中,可能需要结合更多的情况和工具来进行分析。
不得不说,我在这方面的经验可能还不够丰富。
我还记得数据在X左右,但我建议你检查一下。

Linux查看磁盘io开销的几种方法

说实话,在审视Linux系统中的磁盘IO开销时,我还是在摸着石头过河。
这些说明确实非常有用,但您需要知道如何使用它们。

我们先来说说top命令。
上次我调整服务器时,当CPU wa值飙升到3 0%以上时,硬盘灯疯狂闪烁。
老实说,高wa并不一定意味着光盘很慢。
也可能是 CPU 正在等待内存 IO,但情况基本相同。
我记得有一次系统突然卡住了。
当我抬头一看,我发现wa已经跳到了5 0%。
然后我检查了iostat,发现确实是一个SQL查询将磁盘推到了极限。

vmstat命令很有趣,特别适合查看实时波动。
我曾经检查过数据中心的机器。
我喜欢打开 vmstat 1 2 0 并每秒检查一次。
bi和bo值较大确实表明IO繁忙,但这取决于流向。
例如,在NFS文件传输测试中,bi和bo会立即飙升,但只要它们不继续增加,通常没什么大不了的。
我发现 Procs 部分中 b 和 w 较高的情况较少,但理论是正确的。
我的一个朋友在调优数据库时,将交换进程数减少到个位数,系统运行顺利。

对于iostat,您需要安装sysstat。
虽然不方便,但是功能齐全。
上次我为客户端调优 SSD 服务器时,我使用 iostat -dx 看到 rKB/s 和 wKB/s 实际上达到了 2 00MB/s。
这仍然是SATA SSD。
后来换成了NVMe,达到了6 00MB/s。
请注意,该值必须与硬件限制进行比较。
对于5 00GB/s的硬盘来说,3 00MB/s的读取已经算很高了。

说真的,这些命令必须一起使用。
比如上面的wa提醒你注意,然后使用vmstat确认磁盘是否繁忙,最后使用iostat检查某些IO参数。
我记得系统慢的时候,top wa不高,vmstat bi bo一般,但是iostat等待时间居然是5 00ms。
检查了半天,是坏扇区。
所以你看,只看数字是没有用的,你需要看整体。

术语“块设备”是相当抽象的。
严格来说,是指硬盘或者SSD。
我会在参数解释部分添加一些细节。
例如bi bo单位是一个块,默认是每块5 1 2 字节,所以1 00个块就是5 0KB。
现在许多系统默认使用 4 KB 块,因此请记住这一差异。