Injecting delays into block layer

From: Oleksandr Natalenko
Date: Thu Nov 21 2019 - 02:13:30 EST


Hi Paolo et al.

I have a strong suspect that something is going wrong when the underlying block device responds with a large delay. What makes me thinking so is that I use a VM on some cloud provider, and they have substantial block device latency resulting in permanently high (~20%) iowait. It spikes occasionally when their cluster is overloaded, and when that happens, the I/O in my VM may stop and never recover. This is a rare occasion, but it really happens.

What's worse, so far I've seen such a behaviour with BFQ only. I'm still testing other schedulers though.

Important note: I have no strict evidences that this is *the* case, thus I'm asking for some suggestions. My idea is to fire up a local VM and inject delays to a block device while performing some I/O from within the VM.

So the question is: how can those delays be injected? Using dm-delay? Can those delays be random?

Thanks in advance.

--
Oleksandr Natalenko (post-factum)