use*_*233 8 linux performance io
是否可以为 I/O 操作设置任意延迟?
我想了解 iowait 和磁盘 %util 如何影响性能。有很多工具可以对磁盘施加压力(bonnie++ 等),但我正在寻找一种方法来引入延迟,就像 tc(流量控制)工具对网络所做的那样。可以使用 hdparm 工具禁用一些优化,例如将 AAM 设置为安静或禁用 DMA 并切换到 PIO 模式 - 这只是减少 I/O 的间接方法。
查看设备映射器设备的“延迟”目标。这正是它存在的原因。
以下是如何实现这一目标的示例:
[root@centos6 ~]# dd if=/dev/zero of=/tmp/100M-of-zeroes bs=1024k count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.141834 s, 739 MB/s
Run Code Online (Sandbox Code Playgroud)
Dev-mapper 只从一个块设备映射到另一个块设备,而不是在文件和块设备之间映射。这就是环回设备的工作。
[root@centos6 ~]# losetup --show --find /tmp/100M-of-zeroes
/dev/loop0
Run Code Online (Sandbox Code Playgroud)
由于这是 dev-mapper 稍后需要的东西......
[root@centos6 ~]# blockdev --getsize /dev/loop0
204800
Run Code Online (Sandbox Code Playgroud)
# echo "0 204800 delay /dev/loop0 0 200" | dmsetup create dm-slow
(about a 30 second pause here with no output)
Run Code Online (Sandbox Code Playgroud)
上面“echo”命令中设备映射器设置表中的字段是:
0)204800)delay)/dev/loop/0)0)200)我们只有一行,因为我们将整个设备映射器设备视为相同,但这让您可以拥有具有不同支持设备的不同扇区,只有其中一些变慢,只有其中一些出现错误,等等。
有关更多信息,请参阅https://linux.die.net/man/8/dmsetup,包括可能也有用的“flakey”映射器类型。device-mapper 延迟功能的权威文档位于https://www.kernel.org/doc/Documentation/device-mapper/delay.txt
[root@centos6 ~]# dd if=/dev/mapper/dm-slow of=/dev/null count=25000
25000+0 records in
25000+0 records out
12800000 bytes (13 MB) copied, 10.2028 s, 1.3 MB/s
Run Code Online (Sandbox Code Playgroud)
是的,这很慢,尤其是与原始版本相比:
[root@centos6 ~]# dd if=/dev/loop0 of=/dev/null count=25000
25000+0 records in
25000+0 records out
12800000 bytes (13 MB) copied, 0.0361308 s, 354 MB/s
Run Code Online (Sandbox Code Playgroud)
所以映射的设备肯定会引入延迟。
我故意把事情分开,所以这个过程很容易遵循。但是,您可以轻松地将上述步骤组合成更少的命令。