On Mon, Nov 29, 2010 at 12:12:28PM +1100, Dave Chinner wrote: > From: Dave Chinner <dchinner@xxxxxxxxxx> > > The xfaild often tries to rest to wait for congestion to pass of for > IO to complete, but is regularly woken in tail-pushing situations. > In severe cases, the xfsaild is getting woken tens of thousands of > times a second. Reduce the number needless wakeups by only waking > the xfsaild if the new target is larger than the old one. Further > make short sleeps uninterruptible as they occur when the xfsaild has > decided it needs to back off to allow some IO to complete and being > woken early is counter-productive. > > Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> Looks good, Reviewed-by: Christoph Hellwig <hch@xxxxxx> > --- > fs/xfs/linux-2.6/xfs_super.c | 20 ++++++++++++++++---- > 1 files changed, 16 insertions(+), 4 deletions(-) > > diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c > index 6cbebb2..8546805 100644 > --- a/fs/xfs/linux-2.6/xfs_super.c > +++ b/fs/xfs/linux-2.6/xfs_super.c > @@ -834,8 +834,11 @@ xfsaild_wakeup( > struct xfs_ail *ailp, > xfs_lsn_t threshold_lsn) > { > - ailp->xa_target = threshold_lsn; > - wake_up_process(ailp->xa_task); > + /* only ever move the target forwards */ > + if (XFS_LSN_CMP(threshold_lsn, ailp->xa_target) > 0) { > + ailp->xa_target = threshold_lsn; > + wake_up_process(ailp->xa_task); > + } > } > > STATIC int > @@ -847,8 +850,17 @@ xfsaild( > long tout = 0; /* milliseconds */ > > while (!kthread_should_stop()) { > - schedule_timeout_interruptible(tout ? > - msecs_to_jiffies(tout) : MAX_SCHEDULE_TIMEOUT); > + /* > + * for short sleeps indicating congestion, don't allow us to > + * get woken early. Otherwise all we do is bang on the AIL lock > + * without making progress. > + */ > + if (tout && tout <= 20) > + __set_current_state(TASK_KILLABLE); > + else > + __set_current_state(TASK_UNINTERRUPTIBLE); > + schedule_timeout(tout ? > + msecs_to_jiffies(tout) : MAX_SCHEDULE_TIMEOUT); > > /* swsusp */ > try_to_freeze(); > -- > 1.7.2.3 > > _______________________________________________ > xfs mailing list > xfs@xxxxxxxxxxx > http://oss.sgi.com/mailman/listinfo/xfs ---end quoted text--- _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs