[20250907]使用dmsetup建立模拟慢速设备.txt
--//测试需要有时候需要建立模拟慢速设备,以前测试我使用usb盘,实际上效果也不是很好。实际上通过dmsetup的low level logical
--//volume management功能建立一个delay的磁盘设备来模拟慢速设备。
--//自己做一些尝试并做一个记录。
1.建立文件:
# mkdir /home/oracle/slowdisk
# cd /home/oracle/slowdisk
# dd if=/dev/zero of=sd0.dd bs=1M count=20
# losetup -f --show /home/oracle/slowdisk/sd0.dd
/dev/loop0
# losetup -l
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE
/dev/loop0 0 0 0 0 /home/oracle/slowdisk/sd0.dd
--//这样文件/home/oracle/slowdisk/sd0.dd关联设备/dev/loop0.
--//建立ext2文件系统。
# mkfs -t ext2 /dev/loop0
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: done
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
5136 inodes, 20480 blocks
1024 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=20971520
3 block groups
8192 blocks per group, 8192 fragments per group
1712 inodes per group
Superblock backups stored on blocks:
8193
Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
--//注我没有分区,感觉没有必要,直接使用整个设备。
--//尝试mount看看。
# mkdir -p /mnt/slowdisk/
# mount /dev/loop0 /mnt/slowdisk/
# umount /dev/loop0
--//OK没有任何问题。
2.使用dmsetup:
--//先尝试linear方式。
# echo "0 40960 linear /dev/loop0 0" | dmsetup create dm0
-- 0 40960:映射的起始扇区和长度(单位是扇区,512 字节)。
# blockdev --getsz /dev/loop0
40960
--//可以通过blockdev --getsz 获得。
-- linear :Device Mapper 的目标类型,表示线性映射。
-- /dev/loop0 0:底层设备及其起始扇区。
-- 0 是源设备的偏移量
-- dm0:你创建的设备映射名称,之后可通过 /dev/mapper/dm0 访问。
# dmsetup table dm0
0 40960 linear 7:0 0
# dmsetup info dm0
Name: dm0
State: ACTIVE
Read Ahead: 256
Tables present: LIVE
Open count: 0
Event number: 0
Major, minor: 253, 0
Number of targets: 1
# dmsetup status dm0
0 40960 linear
# mount /dev/mapper/dm0 /mnt/slowdisk/
# umount /dev/mapper/dm0
# dmsetup remove dm0
3.使用dmsetup使用延迟模式。
# echo "0 40960 delay /dev/loop0 0 1000" | dmsetup create dm0
--//最后的参数1000表示延迟1000ms即1秒。注意执行时很慢,有点耐心,也许需要将近1分钟才能完成。
# dmsetup table dm0
0 40960 delay 7:0 0 1000
# dmsetup status dm0
0 40960 delay 0 0
--//简单验证:
# time tune2fs -l /dev/mapper/dm0 > /dev/null
real 0m1.022s
user 0m0.001s
sys 0m0.003s
--//执行需要1秒才完成。
# time dd if=/dev/mapper/dm0 of=/dev/null bs=1k count=4 status=none
real 0m1.005s
user 0m0.000s
sys 0m0.001s
# time dd if=/dev/mapper/dm0 of=/dev/null bs=1k count=5 status=none
real 0m2.041s
user 0m0.001s
sys 0m0.001s
--//读4K需要1秒,而5K需要2秒。说明1次读取的IO大小4K。
# time mount /dev/mapper/dm0 /mnt/slowdisk/
real 0m30.186s
user 0m0.000s
sys 0m0.005s
--//mount需要30秒完成。
# time umount /dev/mapper/dm0
real 0m2.047s
user 0m0.000s
sys 0m0.013s
4.取消关联:
# dmsetup remove dm0
# losetup -d /dev/loop0
# losetup -l
5.使用测试前可以先采用linear模式建立相关数据文件再关闭数据库,在设置dealy模式启动数据库,或者延迟设置不要这么大,不然真
的很慢。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3097326/ ,如需转载,请注明出处,否则将追究法律责任。