On Thu, Aug 26, 2010 at 04:14:16PM +0100, Mel Gorman wrote: > If congestion_wait() is called with no BDIs congested, the caller will > sleep for the full timeout and this is an unnecessary sleep. That, I think, is an invalid assumption. congestion_wait is used in some places as a backoff mechanism that waits for some IO work to be done, with congestion disappearing being a indication that progress has been made and so we can retry sooner than the entire timeout. For example, if _xfs_buf_lookup_pages() fails to allocate page cache pages for a buffer, it will kick the xfsbufd to writeback dirty buffers (so they can be freed) and immediately enter congestion_wait(). If there isn't congestion when we enter congestion_wait(), we still want to give the xfsbufds a chance to clean some pages before we retry the allocation for the new buffer. Removing the congestion_wait() sleep behaviour will effectively _increase_ memory pressure with XFS on fast disk subsystems because it now won't backoff between failed allocation attempts... Perhaps a congestion_wait_iff_congested() variant is needed for the VM? I can certainly see how it benefits the VM from a latency perspective, but it is the opposite behaviour that is expected in other places... Cheers, Dave. -- Dave Chinner david@xxxxxxxxxxxxx -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxxx For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>