Re: [v5][PATCH 6/6] mm: vmscan: drain batch list during long operations

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Jun 03, 2013 at 01:02:10PM -0700, Dave Hansen wrote:
>
>From: Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>
>
>This was a suggestion from Mel:
>
>	http://lkml.kernel.org/r/20120914085634.GM11157@xxxxxxxxx
>
>Any pages we collect on 'batch_for_mapping_removal' will have
>their lock_page() held during the duration of their stay on the
>list.  If some other user is trying to get at them during this
>time, they might end up having to wait.
>
>This ensures that we drain the batch if we are about to perform a
>pageout() or congestion_wait(), either of which will take some
>time.  We expect this to help mitigate the worst of the latency
>increase that the batching could cause.
>
>I added some statistics to the __remove_mapping_batch() code to
>track how large the lists are that we pass in to it.  With this
>patch, the average list length drops about 10% (from about 4.1 to
>3.8).  The workload here was a make -j4 kernel compile on a VM
>with 200MB of RAM.
>
>I've still got the statistics patch around if anyone is
>interested.
>
>Signed-off-by: Dave Hansen <dave.hansen@xxxxxxxxxxxxxxx>
>---
>

Reviewed-by: Wanpeng Li <liwanp@xxxxxxxxxxxxxxxxxx>

> linux.git-davehans/mm/vmscan.c |   10 ++++++++++
> 1 file changed, 10 insertions(+)
>
>diff -puN mm/vmscan.c~drain-batch-list-during-long-operations mm/vmscan.c
>--- linux.git/mm/vmscan.c~drain-batch-list-during-long-operations	2013-06-03 12:41:31.661762522 -0700
>+++ linux.git-davehans/mm/vmscan.c	2013-06-03 12:41:31.665762700 -0700
>@@ -1001,6 +1001,16 @@ static unsigned long shrink_page_list(st
> 			if (!sc->may_writepage)
> 				goto keep_locked;
>
>+			/*
>+			 * We hold a bunch of page locks on the batch.
>+			 * pageout() can take a while, so drain the
>+			 * batch before we perform pageout.
>+			 */
>+			nr_reclaimed +=
>+		               __remove_mapping_batch(&batch_for_mapping_rm,
>+		                                      &ret_pages,
>+		                                      &free_pages);
>+
> 			/* Page is dirty, try to write it out here */
> 			switch (pageout(page, mapping, sc)) {
> 			case PAGE_KEEP:
>_
>
>--
>To unsubscribe, send a message with 'unsubscribe linux-mm' in
>the body to majordomo@xxxxxxxxx.  For more info on Linux MM,
>see: http://www.linux-mm.org/ .
>Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxx.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@xxxxxxxxx";> email@xxxxxxxxx </a>




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]