* [RFC][PATCH -mm] vmscan: fix swapout on sequential IO
@ 2008-07-23 18:41 Rik van Riel, Rik van Riel
2008-07-23 18:48 ` Johannes Weiner
2008-07-24 6:26 ` KOSAKI Motohiro
0 siblings, 2 replies; 6+ messages in thread
From: Rik van Riel, Rik van Riel @ 2008-07-23 18:41 UTC (permalink / raw)
To: Johannes Weiner; +Cc: linux-mm
Only force the scanning of every LRU list if we could not easily
find a page to evict. This preserves the balancing done by
get_scan_ratio(), while ensuring the VM will make progress
when there is serious memory pressure.
Signed-off-by: Rik van Riel <riel@redhat.com>
---
This should fix the "dd if=/dev/sda of=/dev/null causes swapout"
problem that has been seen with the new split LRU VM.
mm/vmscan.c | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
Index: linux-2.6.26-rc8-mm1/mm/vmscan.c
===================================================================
--- linux-2.6.26-rc8-mm1.orig/mm/vmscan.c 2008-07-23 14:19:09.000000000 -0400
+++ linux-2.6.26-rc8-mm1/mm/vmscan.c 2008-07-23 14:36:26.000000000 -0400
@@ -1447,24 +1447,27 @@ static unsigned long shrink_zone(int pri
unsigned long nr_to_scan;
unsigned long nr_reclaimed = 0;
unsigned long percent[2]; /* anon @ 0; file @ 1 */
+ unsigned int force_scan = 0;
enum lru_list l;
+ /*
+ * If we do not immediately find pages to evict, put some
+ * pressure on every LRU list to guarantee progress.
+ */
+ if (priority < DEF_PRIORITY - 2)
+ force_scan = 1;
+
get_scan_ratio(zone, sc, percent);
for_each_evictable_lru(l) {
if (scan_global_lru(sc)) {
int file = is_file_lru(l);
- int scan;
- /*
- * Add one to nr_to_scan just to make sure that the
- * kernel will slowly sift through each list.
- */
- scan = zone_page_state(zone, NR_LRU_BASE + l);
+ int scan = zone_page_state(zone, NR_LRU_BASE + l);
if (priority) {
scan >>= priority;
scan = (scan * percent[file]) / 100;
}
- zone->lru[l].nr_scan += scan + 1;
+ zone->lru[l].nr_scan += scan + force_scan;
nr[l] = zone->lru[l].nr_scan;
if (nr[l] >= sc->swap_cluster_max)
zone->lru[l].nr_scan = 0;
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RFC][PATCH -mm] vmscan: fix swapout on sequential IO
2008-07-23 18:41 [RFC][PATCH -mm] vmscan: fix swapout on sequential IO Rik van Riel, Rik van Riel
@ 2008-07-23 18:48 ` Johannes Weiner
2008-07-23 19:29 ` Rik van Riel
2008-07-24 6:26 ` KOSAKI Motohiro
1 sibling, 1 reply; 6+ messages in thread
From: Johannes Weiner @ 2008-07-23 18:48 UTC (permalink / raw)
To: Rik van Riel; +Cc: linux-mm
Hi Rik,
Rik van Riel <riel@surriel.com> writes:
> From: Rik van Riel <riel@redhat.com>
>
> Only force the scanning of every LRU list if we could not easily
> find a page to evict. This preserves the balancing done by
> get_scan_ratio(), while ensuring the VM will make progress
> when there is serious memory pressure.
>
> Signed-off-by: Rik van Riel <riel@redhat.com>
> ---
> This should fix the "dd if=/dev/sda of=/dev/null causes swapout"
> problem that has been seen with the new split LRU VM.
>
> mm/vmscan.c | 17 ++++++++++-------
> 1 file changed, 10 insertions(+), 7 deletions(-)
>
> Index: linux-2.6.26-rc8-mm1/mm/vmscan.c
> ===================================================================
> --- linux-2.6.26-rc8-mm1.orig/mm/vmscan.c 2008-07-23 14:19:09.000000000 -0400
> +++ linux-2.6.26-rc8-mm1/mm/vmscan.c 2008-07-23 14:36:26.000000000 -0400
> @@ -1447,24 +1447,27 @@ static unsigned long shrink_zone(int pri
> unsigned long nr_to_scan;
> unsigned long nr_reclaimed = 0;
> unsigned long percent[2]; /* anon @ 0; file @ 1 */
> + unsigned int force_scan = 0;
> enum lru_list l;
>
> + /*
> + * If we do not immediately find pages to evict, put some
> + * pressure on every LRU list to guarantee progress.
> + */
> + if (priority < DEF_PRIORITY - 2)
> + force_scan = 1;
> +
> get_scan_ratio(zone, sc, percent);
>
> for_each_evictable_lru(l) {
> if (scan_global_lru(sc)) {
> int file = is_file_lru(l);
> - int scan;
> - /*
> - * Add one to nr_to_scan just to make sure that the
> - * kernel will slowly sift through each list.
> - */
> - scan = zone_page_state(zone, NR_LRU_BASE + l);
> + int scan = zone_page_state(zone, NR_LRU_BASE + l);
> if (priority) {
> scan >>= priority;
> scan = (scan * percent[file]) / 100;
> }
> - zone->lru[l].nr_scan += scan + 1;
> + zone->lru[l].nr_scan += scan + force_scan;
The accumulation aspect is not gone, though. If the system has reached
the force-scan priority swap_cluster_max times, the next scan, even if
long after the last scan, will scan bogus lists.
> nr[l] = zone->lru[l].nr_scan;
> if (nr[l] >= sc->swap_cluster_max)
> zone->lru[l].nr_scan = 0;
Hannes
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RFC][PATCH -mm] vmscan: fix swapout on sequential IO
2008-07-23 18:48 ` Johannes Weiner
@ 2008-07-23 19:29 ` Rik van Riel
2008-07-23 19:38 ` Johannes Weiner
0 siblings, 1 reply; 6+ messages in thread
From: Rik van Riel @ 2008-07-23 19:29 UTC (permalink / raw)
To: Johannes Weiner; +Cc: linux-mm
On Wed, 23 Jul 2008 20:48:10 +0200
Johannes Weiner <hannes@saeurebad.de> wrote:
> > - zone->lru[l].nr_scan += scan + 1;
> > + zone->lru[l].nr_scan += scan + force_scan;
>
> The accumulation aspect is not gone, though. If the system has reached
> the force-scan priority swap_cluster_max times, the next scan, even if
> long after the last scan, will scan bogus lists.
Which I suspect is the desired behaviour.
Better go out of balance a little, than risk an OOM kill.
--
All rights reversed.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RFC][PATCH -mm] vmscan: fix swapout on sequential IO
2008-07-23 19:29 ` Rik van Riel
@ 2008-07-23 19:38 ` Johannes Weiner
0 siblings, 0 replies; 6+ messages in thread
From: Johannes Weiner @ 2008-07-23 19:38 UTC (permalink / raw)
To: Rik van Riel; +Cc: linux-mm
Hi,
Rik van Riel <riel@surriel.com> writes:
> On Wed, 23 Jul 2008 20:48:10 +0200
> Johannes Weiner <hannes@saeurebad.de> wrote:
>
>> > - zone->lru[l].nr_scan += scan + 1;
>> > + zone->lru[l].nr_scan += scan + force_scan;
>>
>> The accumulation aspect is not gone, though. If the system has reached
>> the force-scan priority swap_cluster_max times, the next scan, even if
>> long after the last scan, will scan bogus lists.
>
> Which I suspect is the desired behaviour.
>
> Better go out of balance a little, than risk an OOM kill.
Okay, I agree with that. It will at least keep the balance for some
longer :)
Hannes
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RFC][PATCH -mm] vmscan: fix swapout on sequential IO
2008-07-23 18:41 [RFC][PATCH -mm] vmscan: fix swapout on sequential IO Rik van Riel, Rik van Riel
2008-07-23 18:48 ` Johannes Weiner
@ 2008-07-24 6:26 ` KOSAKI Motohiro
2008-07-24 12:20 ` Rik van Riel
1 sibling, 1 reply; 6+ messages in thread
From: KOSAKI Motohiro @ 2008-07-24 6:26 UTC (permalink / raw)
To: Rik van Riel, Rik van Riel; +Cc: kosaki.motohiro, Johannes Weiner, linux-mm
> - zone->lru[l].nr_scan += scan + 1;
> + zone->lru[l].nr_scan += scan + force_scan;
> nr[l] = zone->lru[l].nr_scan;
> if (nr[l] >= sc->swap_cluster_max)
> zone->lru[l].nr_scan = 0;
looks good to me.
Reviewed-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [RFC][PATCH -mm] vmscan: fix swapout on sequential IO
2008-07-24 6:26 ` KOSAKI Motohiro
@ 2008-07-24 12:20 ` Rik van Riel
0 siblings, 0 replies; 6+ messages in thread
From: Rik van Riel @ 2008-07-24 12:20 UTC (permalink / raw)
To: KOSAKI Motohiro; +Cc: Rik van Riel, Johannes Weiner, linux-mm
On Thu, 24 Jul 2008 15:26:44 +0900
KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> wrote:
> > - zone->lru[l].nr_scan += scan + 1;
> > + zone->lru[l].nr_scan += scan + force_scan;
> > nr[l] = zone->lru[l].nr_scan;
> > if (nr[l] >= sc->swap_cluster_max)
> > zone->lru[l].nr_scan = 0;
>
> looks good to me.
>
> Reviewed-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
I'm still benchmarking it, against 2.6.26, 2.6.26-rc8-mm1 and
2.6.26-rc8-mm1 with the "evict cache first" patch.
So far the results look promising. I hope to publish the
benchmark results later today, when I have a full set of
all tests against all these kernels.
I have been running tests for about a week now.
--
All rights reversed.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2008-07-24 12:20 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-07-23 18:41 [RFC][PATCH -mm] vmscan: fix swapout on sequential IO Rik van Riel, Rik van Riel
2008-07-23 18:48 ` Johannes Weiner
2008-07-23 19:29 ` Rik van Riel
2008-07-23 19:38 ` Johannes Weiner
2008-07-24 6:26 ` KOSAKI Motohiro
2008-07-24 12:20 ` Rik van Riel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox