> Il giorno 18 gen 2019, alle ore 12:10, Andrea Righi <righi.andrea@xxxxxxxxx> ha scritto: > > On Fri, Jan 18, 2019 at 12:04:17PM +0100, Paolo Valente wrote: >> >> >>> Il giorno 18 gen 2019, alle ore 11:31, Andrea Righi <righi.andrea@xxxxxxxxx> ha scritto: >>> >>> This is a redesign of my old cgroup-io-throttle controller: >>> https://lwn.net/Articles/330531/ >>> >>> I'm resuming this old patch to point out a problem that I think is still >>> not solved completely. >>> >>> = Problem = >>> >>> The io.max controller works really well at limiting synchronous I/O >>> (READs), but a lot of I/O requests are initiated outside the context of >>> the process that is ultimately responsible for its creation (e.g., >>> WRITEs). >>> >>> Throttling at the block layer in some cases is too late and we may end >>> up slowing down processes that are not responsible for the I/O that >>> is being processed at that level. >>> >>> = Proposed solution = >>> >>> The main idea of this controller is to split I/O measurement and I/O >>> throttling: I/O is measured at the block layer for READS, at page cache >>> (dirty pages) for WRITEs, and processes are limited while they're >>> generating I/O at the VFS level, based on the measured I/O. >>> >> >> Hi Andrea, >> what the about the case where two processes are dirtying the same >> pages? Which will be charged? >> >> Thanks, >> Paolo > > Hi Paolo, > > in this case only the first one will be charged for the I/O activity > (the one that changes a page from clean to dirty). This is probably not > totally fair in some cases, but I think it's a good compromise, Absolutely, I just wanted to better understand this point. > at the > end rewriting the same page over and over while it's already dirty > doesn't actually generate I/O activity, until the page is flushed back > to disk. > Right. Thanks, Paolo > Obviously I'm open to other better ideas and suggestions. > > Thanks! > -Andrea