Device Mapper умеет не только объединять и шифровать устройства. У него есть target
dm-delay, который специально добавляет задержку к I/O.Это удобно для тестов: можно проверить, как система, файловая система или приложение ведут себя с медленным storage, не меняя реальный диск.
⏺Создаём задержку
Например, добавим 100 мс к чтению и 200 мс к записи:
echo "0 $(blockdev --getsz /dev/nvme0n1) delay /dev/nvme0n1 0 100 /dev/nvme0n1 0 200" \
| dmsetup create slowdisk
Проверяем:
dmsetup table slowdisk
lsblk
Теперь /dev/mapper/slowdisk обращается к тому же storage, но I/O проходит через dm-delay.
⏺Где возникает задержка
Схематично путь выглядит так:
application
↓
filesystem
↓
block layer
↓
dm-delay
↓
NVMe / SSD
dm-delay получает bio, удерживает его заданное время и только потом отправляет дальше.
Важно: физический диск при этом ничего не «замедляет». Дополнительная latency появляется именно в Device Mapper.
⏺Зачем это нужно
Например, можно воспроизвести ситуацию:
обычный SSD
↓
latency ~ сотни μs
dm-delay
↓
latency ~ сотни ms
И посмотреть, что произойдёт с timeout’ами, очередями I/O, fsync, RAID или приложением.
После теста mapping удаляется:
dmsetup remove slowdisk
