On Tue, Jul 26 2016, Mikulas Patocka wrote: > On Sat, 23 Jul 2016, NeilBrown wrote: > >> "dirtying ... from the reclaim context" ??? What does that mean? >> According to >> Commit: 26eecbf3543b ("[PATCH] vm: pageout throttling") >> From the history tree, the purpose of throttle_vm_writeout() is to >> limit the amount of memory that is concurrently under I/O. >> That seems strange to me because I thought it was the responsibility of >> each backing device to impose a limit - a maximum queue size of some >> sort. > > Device mapper doesn't impose any limit for in-flight bios. I would suggest that it probably should. At least it should "set_wb_congested()" when the number of in-flight bios reaches some arbitrary threshold. The write-back throttling needs this to get an estimate of how fast the backing device is, so it can share the dirty_threshold space fairly among the different backing devices. I added an arbitrary limit to raid1 back in 2011 (34db0cd60f8a1f) because the lack of a limit was causing problems. Specifically the write queue would get so long that ext3 would block for an extended period when trying to flush a transaction, and that blocked lots of other things, like atime updates. Maybe there have been other fixes since then to other parts of the puzzle, but the congestion tracking still seems to be an important part of the picture and I think it would be best if every bdi would admit to being congested well before it has consumed a significant fraction of memory in its output queue. > I've made some patches that limit in-flight bios for device mapper in > the past, but there were not integrated into upstream. I second the motion to resurrect these. Thanks, NeilBrown