On Thu, Apr 21, 2011 at 11:33:25AM +0800, Wu Fengguang wrote: > I collected the writeback_single_inode() traces (patch attached for > your reference) each for several test runs, and find much more > I_DIRTY_PAGES after patchset. Dave, do you know why there are so many > I_DIRTY_PAGES (or radix tag) remained after the XFS ->writepages() call, > even for small files? > > wfg /tmp% g -c I_DIRTY_PAGES trace-* > trace-moving-expire-1:28213 > trace-no-moving-expire:6684 > > wfg /tmp% g -c I_DIRTY_DATASYNC trace-* > trace-moving-expire-1:179 > trace-no-moving-expire:193 > > wfg /tmp% g -c I_DIRTY_SYNC trace-* > trace-moving-expire-1:29394 > trace-no-moving-expire:31593 > > wfg /tmp% wc -l trace-* > 81108 trace-moving-expire-1 > 68562 trace-no-moving-expire Likely just timing. When IO completes and updates the inode IO size, XFS calls mark_inode_dirty() again to ensure that the metadata that was changed gets written out at a later point in time. Hence every single file that is created by the test will be marked dirty again after the first write has returned and disappeared. Why you see different numbers? it's timing dependent based on Io completion rates - if you have a fast disk the IO completion can occur before write_inode() is called and so the inode can be written and the dirty page state removed in the one writeback_single_inode() call... That's my initial guess without looking at it in any real detail, anyway. 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/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>