Skip to the content.

scsi_debug

https://sg.danny.cz/sg/scsi_debug.html

scsi debug 来模拟 raid1 必有问题,为什么

modprobe scsi_debug max_luns=2 dev_size_mb=10000 mdadm –create –failfast –verbose /dev/md0 –level=1 –raid-devices=2 /dev/sdb /dev/sda

创建 scsi_debug 的时候指定大小

sudo rmmod scsi_debug sudo modprobe scsi_debug dev_size_mb=300

添加更多的盘

cd /sys/bus/pseudo/drivers/scsi_debug
cat dev_size_mb # 输出 8

echo 2 | sudo tee max_luns
echo 1 | sudo tee add_host

然后 lsblk 可以看到

sdc               8:32   0     8M  0 disk
sdd               8:48   0     8M  0 disk
sde               8:64   0     8M  0 disk

lsscsi

[4:0:0:0]    disk    Linux    scsi_debug       0191  /dev/sdc
[5:0:0:0]    disk    Linux    scsi_debug       0191  /dev/sdd
[5:0:0:1]    disk    Linux    scsi_debug       0191  /dev/sde

构建一个无限延迟的

cd /sys/module/scsi_debug/parameters
echo 10000000 | sudo tee delay

使用 src/c/fs/aio-minimal.c 测试,效果完全相同:

 sudo  cat /proc/9388/stack

[sudo] password for martins3:
[<0>] exit_aio+0x122/0x140
[<0>] __mmput+0x12/0x110
[<0>] exit_mm+0xb1/0x110
[<0>] do_exit+0x20b/0x4a0
[<0>] do_group_exit+0x30/0x80
[<0>] get_signal+0x7b3/0x7d0
[<0>] arch_do_signal_or_restart+0x35/0x100
[<0>] syscall_exit_to_user_mode+0x126/0x210
[<0>] do_syscall_64+0x8c/0x170
[<0>] entry_SYSCALL_64_after_hwframe+0x76/0x7e

但是很快就会被 offline 掉:

[139547.581734] sd 4:0:0:0: Power-on or device reset occurred
[139557.802249] sd 4:0:0:0: Power-on or device reset occurred
[139568.041740] sd 4:0:0:0: Power-on or device reset occurred
[139578.281910] sd 4:0:0:0: Power-on or device reset occurred
[139588.521684] sd 4:0:0:0: Device offlined - not ready after error recovery
[139588.523287] sd 4:0:0:0: [sdc] tag#10 FAILED Result: hostbyte=DID_TIME_OUT driverbyte=DRIVER_OK cmd_age=101s
[139588.525147] sd 4:0:0:0: [sdc] tag#10 CDB: Read(10) 28 00 00 00 00 00 00 00 08 00
[139588.527762] I/O error, dev sdc, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 0

可以看到 /sys/block/sdd/inflight 结果为

 cat inflight
       2        0

dm

dm-dust

dm-delay

https://serverfault.com/questions/523509/linux-how-to-simulate-hard-disk-latency-i-want-to-increase-iowait-value-withou

echo "0 `sudo blockdev --getsz /dev/nvme1n1` delay /dev/nvme1n1 0 5000" | sudo dmsetup create delayed
# 不知道为什么,这个执行的特别慢

# 可以动态修改吗? 想要注入一个超长时间的延迟,结果 mkfs 都要超时
sudo mkfs.ext4 /dev/mapper/delayed

https://github.com/kawamuray/ddi

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。