[PATCH 2/3] Refactor zone_reclaim code (v5)

2011-03-29 Thread Balbir Singh
Changelog v3
1. Renamed zone_reclaim_unmapped_pages to zone_reclaim_pages

Refactor zone_reclaim, move reusable functionality outside
of zone_reclaim. Make zone_reclaim_unmapped_pages modular

Signed-off-by: Balbir Singh bal...@linux.vnet.ibm.com
Reviewed-by: Christoph Lameter c...@linux.com
---
 mm/vmscan.c |   35 +++
 1 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/mm/vmscan.c b/mm/vmscan.c
index 4923160..5b24e74 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2949,6 +2949,27 @@ static long zone_pagecache_reclaimable(struct zone *zone)
 }
 
 /*
+ * Helper function to reclaim unmapped pages, we might add something
+ * similar to this for slab cache as well. Currently this function
+ * is shared with __zone_reclaim()
+ */
+static inline void
+zone_reclaim_pages(struct zone *zone, struct scan_control *sc,
+   unsigned long nr_pages)
+{
+   int priority;
+   /*
+* Free memory by calling shrink zone with increasing
+* priorities until we have enough memory freed.
+*/
+   priority = ZONE_RECLAIM_PRIORITY;
+   do {
+   shrink_zone(priority, zone, sc);
+   priority--;
+   } while (priority = 0  sc-nr_reclaimed  nr_pages);
+}
+
+/*
  * Try to free up some pages from this zone through reclaim.
  */
 static int __zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int 
order)
@@ -2957,7 +2978,6 @@ static int __zone_reclaim(struct zone *zone, gfp_t 
gfp_mask, unsigned int order)
const unsigned long nr_pages = 1  order;
struct task_struct *p = current;
struct reclaim_state reclaim_state;
-   int priority;
struct scan_control sc = {
.may_writepage = !!(zone_reclaim_mode  RECLAIM_WRITE),
.may_unmap = !!(zone_reclaim_mode  RECLAIM_SWAP),
@@ -2981,17 +3001,8 @@ static int __zone_reclaim(struct zone *zone, gfp_t 
gfp_mask, unsigned int order)
reclaim_state.reclaimed_slab = 0;
p-reclaim_state = reclaim_state;
 
-   if (zone_pagecache_reclaimable(zone)  zone-min_unmapped_pages) {
-   /*
-* Free memory by calling shrink zone with increasing
-* priorities until we have enough memory freed.
-*/
-   priority = ZONE_RECLAIM_PRIORITY;
-   do {
-   shrink_zone(priority, zone, sc);
-   priority--;
-   } while (priority = 0  sc.nr_reclaimed  nr_pages);
-   }
+   if (zone_pagecache_reclaimable(zone)  zone-min_unmapped_pages)
+   zone_reclaim_pages(zone, sc, nr_pages);
 
nr_slab_pages0 = zone_page_state(zone, NR_SLAB_RECLAIMABLE);
if (nr_slab_pages0  zone-min_slab_pages) {

--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[REPOST] [PATCH 2/3] Refactor zone_reclaim code (v3)

2011-01-20 Thread Balbir Singh
Changelog v3
1. Renamed zone_reclaim_unmapped_pages to zone_reclaim_pages

Refactor zone_reclaim, move reusable functionality outside
of zone_reclaim. Make zone_reclaim_unmapped_pages modular

Signed-off-by: Balbir Singh bal...@linux.vnet.ibm.com
---
 mm/vmscan.c |   35 +++
 1 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/mm/vmscan.c b/mm/vmscan.c
index e841cae..3b25423 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2815,6 +2815,27 @@ static long zone_pagecache_reclaimable(struct zone *zone)
 }
 
 /*
+ * Helper function to reclaim unmapped pages, we might add something
+ * similar to this for slab cache as well. Currently this function
+ * is shared with __zone_reclaim()
+ */
+static inline void
+zone_reclaim_pages(struct zone *zone, struct scan_control *sc,
+   unsigned long nr_pages)
+{
+   int priority;
+   /*
+* Free memory by calling shrink zone with increasing
+* priorities until we have enough memory freed.
+*/
+   priority = ZONE_RECLAIM_PRIORITY;
+   do {
+   shrink_zone(priority, zone, sc);
+   priority--;
+   } while (priority = 0  sc-nr_reclaimed  nr_pages);
+}
+
+/*
  * Try to free up some pages from this zone through reclaim.
  */
 static int __zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int 
order)
@@ -2823,7 +2844,6 @@ static int __zone_reclaim(struct zone *zone, gfp_t 
gfp_mask, unsigned int order)
const unsigned long nr_pages = 1  order;
struct task_struct *p = current;
struct reclaim_state reclaim_state;
-   int priority;
struct scan_control sc = {
.may_writepage = !!(zone_reclaim_mode  RECLAIM_WRITE),
.may_unmap = !!(zone_reclaim_mode  RECLAIM_SWAP),
@@ -2847,17 +2867,8 @@ static int __zone_reclaim(struct zone *zone, gfp_t 
gfp_mask, unsigned int order)
reclaim_state.reclaimed_slab = 0;
p-reclaim_state = reclaim_state;
 
-   if (zone_pagecache_reclaimable(zone)  zone-min_unmapped_pages) {
-   /*
-* Free memory by calling shrink zone with increasing
-* priorities until we have enough memory freed.
-*/
-   priority = ZONE_RECLAIM_PRIORITY;
-   do {
-   shrink_zone(priority, zone, sc);
-   priority--;
-   } while (priority = 0  sc.nr_reclaimed  nr_pages);
-   }
+   if (zone_pagecache_reclaimable(zone)  zone-min_unmapped_pages)
+   zone_reclaim_pages(zone, sc, nr_pages);
 
nr_slab_pages0 = zone_page_state(zone, NR_SLAB_RECLAIMABLE);
if (nr_slab_pages0  zone-min_slab_pages) {

--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [REPOST] [PATCH 2/3] Refactor zone_reclaim code (v3)

2011-01-20 Thread Christoph Lameter

Reviewed-by: Christoph Lameter c...@linux.com

--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [REPOST] [PATCH 2/3] Refactor zone_reclaim code (v3)

2011-01-20 Thread Balbir Singh
* Christoph Lameter c...@linux.com [2011-01-20 08:50:40]:

 
 Reviewed-by: Christoph Lameter c...@linux.com


Thanks for the review! 

-- 
Three Cheers,
Balbir
--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/3] Refactor zone_reclaim (v2)

2010-12-23 Thread Balbir Singh
* MinChan Kim minchan@gmail.com [2010-12-15 07:38:42]:

 On Tue, Dec 14, 2010 at 8:45 PM, Balbir Singh bal...@linux.vnet.ibm.com 
 wrote:
  * MinChan Kim minchan@gmail.com [2010-12-14 19:01:26]:
 
  Hi Balbir,
 
  On Fri, Dec 10, 2010 at 11:31 PM, Balbir Singh
  bal...@linux.vnet.ibm.com wrote:
   Move reusable functionality outside of zone_reclaim.
   Make zone_reclaim_unmapped_pages modular
  
   Signed-off-by: Balbir Singh bal...@linux.vnet.ibm.com
   ---
    mm/vmscan.c |   35 +++
    1 files changed, 23 insertions(+), 12 deletions(-)
  
   diff --git a/mm/vmscan.c b/mm/vmscan.c
   index e841cae..4e2ad05 100644
   --- a/mm/vmscan.c
   +++ b/mm/vmscan.c
   @@ -2815,6 +2815,27 @@ static long zone_pagecache_reclaimable(struct 
   zone *zone)
    }
  
    /*
   + * Helper function to reclaim unmapped pages, we might add something
   + * similar to this for slab cache as well. Currently this function
   + * is shared with __zone_reclaim()
   + */
   +static inline void
   +zone_reclaim_unmapped_pages(struct zone *zone, struct scan_control *sc,
   +                               unsigned long nr_pages)
   +{
   +       int priority;
   +       /*
   +        * Free memory by calling shrink zone with increasing
   +        * priorities until we have enough memory freed.
   +        */
   +       priority = ZONE_RECLAIM_PRIORITY;
   +       do {
   +               shrink_zone(priority, zone, sc);
   +               priority--;
   +       } while (priority = 0  sc-nr_reclaimed  nr_pages);
   +}
 
  As I said previous version, zone_reclaim_unmapped_pages doesn't have
  any functions related to reclaim unmapped pages.
 
  The scan control point has the right arguments for implementing
  reclaim of unmapped pages.
 
 I mean you should set up scan_control setup in this function.
 Current zone_reclaim_unmapped_pages doesn't have any specific routine
 related to reclaim unmapped pages.
 Otherwise, change the function name with just zone_reclaim_pages. I
 think you don't want it.

Done, I renamed the function to zone_reclaim_pages.

Thanks!

-- 
Three Cheers,
Balbir
--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 2/3] Refactor zone_reclaim code (v3)

2010-12-23 Thread Balbir Singh
Changelog v3
1. Renamed zone_reclaim_unmapped_pages to zone_reclaim_pages

Refactor zone_reclaim, move reusable functionality outside
of zone_reclaim. Make zone_reclaim_unmapped_pages modular

Signed-off-by: Balbir Singh bal...@linux.vnet.ibm.com
---
 mm/vmscan.c |   35 +++
 1 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/mm/vmscan.c b/mm/vmscan.c
index e841cae..3b25423 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2815,6 +2815,27 @@ static long zone_pagecache_reclaimable(struct zone *zone)
 }
 
 /*
+ * Helper function to reclaim unmapped pages, we might add something
+ * similar to this for slab cache as well. Currently this function
+ * is shared with __zone_reclaim()
+ */
+static inline void
+zone_reclaim_pages(struct zone *zone, struct scan_control *sc,
+   unsigned long nr_pages)
+{
+   int priority;
+   /*
+* Free memory by calling shrink zone with increasing
+* priorities until we have enough memory freed.
+*/
+   priority = ZONE_RECLAIM_PRIORITY;
+   do {
+   shrink_zone(priority, zone, sc);
+   priority--;
+   } while (priority = 0  sc-nr_reclaimed  nr_pages);
+}
+
+/*
  * Try to free up some pages from this zone through reclaim.
  */
 static int __zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int 
order)
@@ -2823,7 +2844,6 @@ static int __zone_reclaim(struct zone *zone, gfp_t 
gfp_mask, unsigned int order)
const unsigned long nr_pages = 1  order;
struct task_struct *p = current;
struct reclaim_state reclaim_state;
-   int priority;
struct scan_control sc = {
.may_writepage = !!(zone_reclaim_mode  RECLAIM_WRITE),
.may_unmap = !!(zone_reclaim_mode  RECLAIM_SWAP),
@@ -2847,17 +2867,8 @@ static int __zone_reclaim(struct zone *zone, gfp_t 
gfp_mask, unsigned int order)
reclaim_state.reclaimed_slab = 0;
p-reclaim_state = reclaim_state;
 
-   if (zone_pagecache_reclaimable(zone)  zone-min_unmapped_pages) {
-   /*
-* Free memory by calling shrink zone with increasing
-* priorities until we have enough memory freed.
-*/
-   priority = ZONE_RECLAIM_PRIORITY;
-   do {
-   shrink_zone(priority, zone, sc);
-   priority--;
-   } while (priority = 0  sc.nr_reclaimed  nr_pages);
-   }
+   if (zone_pagecache_reclaimable(zone)  zone-min_unmapped_pages)
+   zone_reclaim_pages(zone, sc, nr_pages);
 
nr_slab_pages0 = zone_page_state(zone, NR_SLAB_RECLAIMABLE);
if (nr_slab_pages0  zone-min_slab_pages) {

--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/3] Refactor zone_reclaim (v2)

2010-12-14 Thread Minchan Kim
Hi Balbir,

On Fri, Dec 10, 2010 at 11:31 PM, Balbir Singh
bal...@linux.vnet.ibm.com wrote:
 Move reusable functionality outside of zone_reclaim.
 Make zone_reclaim_unmapped_pages modular

 Signed-off-by: Balbir Singh bal...@linux.vnet.ibm.com
 ---
  mm/vmscan.c |   35 +++
  1 files changed, 23 insertions(+), 12 deletions(-)

 diff --git a/mm/vmscan.c b/mm/vmscan.c
 index e841cae..4e2ad05 100644
 --- a/mm/vmscan.c
 +++ b/mm/vmscan.c
 @@ -2815,6 +2815,27 @@ static long zone_pagecache_reclaimable(struct zone 
 *zone)
  }

  /*
 + * Helper function to reclaim unmapped pages, we might add something
 + * similar to this for slab cache as well. Currently this function
 + * is shared with __zone_reclaim()
 + */
 +static inline void
 +zone_reclaim_unmapped_pages(struct zone *zone, struct scan_control *sc,
 +                               unsigned long nr_pages)
 +{
 +       int priority;
 +       /*
 +        * Free memory by calling shrink zone with increasing
 +        * priorities until we have enough memory freed.
 +        */
 +       priority = ZONE_RECLAIM_PRIORITY;
 +       do {
 +               shrink_zone(priority, zone, sc);
 +               priority--;
 +       } while (priority = 0  sc-nr_reclaimed  nr_pages);
 +}

As I said previous version, zone_reclaim_unmapped_pages doesn't have
any functions related to reclaim unmapped pages.
The function name is rather strange.
It would be better to add scan_control setup in function inner to
reclaim only unmapped pages.

-- 
Kind regards,
Minchan Kim
--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/3] Refactor zone_reclaim (v2)

2010-12-14 Thread Minchan Kim
On Tue, Dec 14, 2010 at 8:45 PM, Balbir Singh bal...@linux.vnet.ibm.com wrote:
 * MinChan Kim minchan@gmail.com [2010-12-14 19:01:26]:

 Hi Balbir,

 On Fri, Dec 10, 2010 at 11:31 PM, Balbir Singh
 bal...@linux.vnet.ibm.com wrote:
  Move reusable functionality outside of zone_reclaim.
  Make zone_reclaim_unmapped_pages modular
 
  Signed-off-by: Balbir Singh bal...@linux.vnet.ibm.com
  ---
   mm/vmscan.c |   35 +++
   1 files changed, 23 insertions(+), 12 deletions(-)
 
  diff --git a/mm/vmscan.c b/mm/vmscan.c
  index e841cae..4e2ad05 100644
  --- a/mm/vmscan.c
  +++ b/mm/vmscan.c
  @@ -2815,6 +2815,27 @@ static long zone_pagecache_reclaimable(struct zone 
  *zone)
   }
 
   /*
  + * Helper function to reclaim unmapped pages, we might add something
  + * similar to this for slab cache as well. Currently this function
  + * is shared with __zone_reclaim()
  + */
  +static inline void
  +zone_reclaim_unmapped_pages(struct zone *zone, struct scan_control *sc,
  +                               unsigned long nr_pages)
  +{
  +       int priority;
  +       /*
  +        * Free memory by calling shrink zone with increasing
  +        * priorities until we have enough memory freed.
  +        */
  +       priority = ZONE_RECLAIM_PRIORITY;
  +       do {
  +               shrink_zone(priority, zone, sc);
  +               priority--;
  +       } while (priority = 0  sc-nr_reclaimed  nr_pages);
  +}

 As I said previous version, zone_reclaim_unmapped_pages doesn't have
 any functions related to reclaim unmapped pages.

 The scan control point has the right arguments for implementing
 reclaim of unmapped pages.

I mean you should set up scan_control setup in this function.
Current zone_reclaim_unmapped_pages doesn't have any specific routine
related to reclaim unmapped pages.
Otherwise, change the function name with just zone_reclaim_pages. I
think you don't want it.

-- 
Kind regards,
Minchan Kim
--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/3] Refactor zone_reclaim (v2)

2010-12-14 Thread Balbir Singh
* MinChan Kim minchan@gmail.com [2010-12-14 19:01:26]:

 Hi Balbir,
 
 On Fri, Dec 10, 2010 at 11:31 PM, Balbir Singh
 bal...@linux.vnet.ibm.com wrote:
  Move reusable functionality outside of zone_reclaim.
  Make zone_reclaim_unmapped_pages modular
 
  Signed-off-by: Balbir Singh bal...@linux.vnet.ibm.com
  ---
   mm/vmscan.c |   35 +++
   1 files changed, 23 insertions(+), 12 deletions(-)
 
  diff --git a/mm/vmscan.c b/mm/vmscan.c
  index e841cae..4e2ad05 100644
  --- a/mm/vmscan.c
  +++ b/mm/vmscan.c
  @@ -2815,6 +2815,27 @@ static long zone_pagecache_reclaimable(struct zone 
  *zone)
   }
 
   /*
  + * Helper function to reclaim unmapped pages, we might add something
  + * similar to this for slab cache as well. Currently this function
  + * is shared with __zone_reclaim()
  + */
  +static inline void
  +zone_reclaim_unmapped_pages(struct zone *zone, struct scan_control *sc,
  +                               unsigned long nr_pages)
  +{
  +       int priority;
  +       /*
  +        * Free memory by calling shrink zone with increasing
  +        * priorities until we have enough memory freed.
  +        */
  +       priority = ZONE_RECLAIM_PRIORITY;
  +       do {
  +               shrink_zone(priority, zone, sc);
  +               priority--;
  +       } while (priority = 0  sc-nr_reclaimed  nr_pages);
  +}
 
 As I said previous version, zone_reclaim_unmapped_pages doesn't have
 any functions related to reclaim unmapped pages.
 The function name is rather strange.
 It would be better to add scan_control setup in function inner to
 reclaim only unmapped pages.

OK, that is an idea worth looking at, I'll revisit this function.

Thanks for the review!

-- 
Three Cheers,
Balbir
--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 2/3] Refactor zone_reclaim (v2)

2010-12-10 Thread Balbir Singh
Move reusable functionality outside of zone_reclaim.
Make zone_reclaim_unmapped_pages modular

Signed-off-by: Balbir Singh bal...@linux.vnet.ibm.com
---
 mm/vmscan.c |   35 +++
 1 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/mm/vmscan.c b/mm/vmscan.c
index e841cae..4e2ad05 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2815,6 +2815,27 @@ static long zone_pagecache_reclaimable(struct zone *zone)
 }
 
 /*
+ * Helper function to reclaim unmapped pages, we might add something
+ * similar to this for slab cache as well. Currently this function
+ * is shared with __zone_reclaim()
+ */
+static inline void
+zone_reclaim_unmapped_pages(struct zone *zone, struct scan_control *sc,
+   unsigned long nr_pages)
+{
+   int priority;
+   /*
+* Free memory by calling shrink zone with increasing
+* priorities until we have enough memory freed.
+*/
+   priority = ZONE_RECLAIM_PRIORITY;
+   do {
+   shrink_zone(priority, zone, sc);
+   priority--;
+   } while (priority = 0  sc-nr_reclaimed  nr_pages);
+}
+
+/*
  * Try to free up some pages from this zone through reclaim.
  */
 static int __zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int 
order)
@@ -2823,7 +2844,6 @@ static int __zone_reclaim(struct zone *zone, gfp_t 
gfp_mask, unsigned int order)
const unsigned long nr_pages = 1  order;
struct task_struct *p = current;
struct reclaim_state reclaim_state;
-   int priority;
struct scan_control sc = {
.may_writepage = !!(zone_reclaim_mode  RECLAIM_WRITE),
.may_unmap = !!(zone_reclaim_mode  RECLAIM_SWAP),
@@ -2847,17 +2867,8 @@ static int __zone_reclaim(struct zone *zone, gfp_t 
gfp_mask, unsigned int order)
reclaim_state.reclaimed_slab = 0;
p-reclaim_state = reclaim_state;
 
-   if (zone_pagecache_reclaimable(zone)  zone-min_unmapped_pages) {
-   /*
-* Free memory by calling shrink zone with increasing
-* priorities until we have enough memory freed.
-*/
-   priority = ZONE_RECLAIM_PRIORITY;
-   do {
-   shrink_zone(priority, zone, sc);
-   priority--;
-   } while (priority = 0  sc.nr_reclaimed  nr_pages);
-   }
+   if (zone_pagecache_reclaimable(zone)  zone-min_unmapped_pages)
+   zone_reclaim_unmapped_pages(zone, sc, nr_pages);
 
nr_slab_pages0 = zone_page_state(zone, NR_SLAB_RECLAIMABLE);
if (nr_slab_pages0  zone-min_slab_pages) {

--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 2/3] Refactor zone_reclaim

2010-11-30 Thread Balbir Singh
Refactor zone_reclaim, move reusable functionality outside
of zone_reclaim. Make zone_reclaim_unmapped_pages modular

Signed-off-by: Balbir Singh bal...@linux.vnet.ibm.com
---
 mm/vmscan.c |   35 +++
 1 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/mm/vmscan.c b/mm/vmscan.c
index 325443a..0ac444f 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -2719,6 +2719,27 @@ static long zone_pagecache_reclaimable(struct zone *zone)
 }
 
 /*
+ * Helper function to reclaim unmapped pages, we might add something
+ * similar to this for slab cache as well. Currently this function
+ * is shared with __zone_reclaim()
+ */
+static inline void
+zone_reclaim_unmapped_pages(struct zone *zone, struct scan_control *sc,
+   unsigned long nr_pages)
+{
+   int priority;
+   /*
+* Free memory by calling shrink zone with increasing
+* priorities until we have enough memory freed.
+*/
+   priority = ZONE_RECLAIM_PRIORITY;
+   do {
+   shrink_zone(priority, zone, sc);
+   priority--;
+   } while (priority = 0  sc-nr_reclaimed  nr_pages);
+}
+
+/*
  * Try to free up some pages from this zone through reclaim.
  */
 static int __zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int 
order)
@@ -2727,7 +2748,6 @@ static int __zone_reclaim(struct zone *zone, gfp_t 
gfp_mask, unsigned int order)
const unsigned long nr_pages = 1  order;
struct task_struct *p = current;
struct reclaim_state reclaim_state;
-   int priority;
struct scan_control sc = {
.may_writepage = !!(zone_reclaim_mode  RECLAIM_WRITE),
.may_unmap = !!(zone_reclaim_mode  RECLAIM_SWAP),
@@ -2751,17 +2771,8 @@ static int __zone_reclaim(struct zone *zone, gfp_t 
gfp_mask, unsigned int order)
reclaim_state.reclaimed_slab = 0;
p-reclaim_state = reclaim_state;
 
-   if (zone_pagecache_reclaimable(zone)  zone-min_unmapped_pages) {
-   /*
-* Free memory by calling shrink zone with increasing
-* priorities until we have enough memory freed.
-*/
-   priority = ZONE_RECLAIM_PRIORITY;
-   do {
-   shrink_zone(priority, zone, sc);
-   priority--;
-   } while (priority = 0  sc.nr_reclaimed  nr_pages);
-   }
+   if (zone_pagecache_reclaimable(zone)  zone-min_unmapped_pages)
+   zone_reclaim_unmapped_pages(zone, sc, nr_pages);
 
nr_slab_pages0 = zone_page_state(zone, NR_SLAB_RECLAIMABLE);
if (nr_slab_pages0  zone-min_slab_pages) {

--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/3] Refactor zone_reclaim

2010-11-30 Thread Christoph Lameter

Reviewed-by: Christoph Lameter c...@linux.com

--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/3] Refactor zone_reclaim

2010-11-30 Thread KAMEZAWA Hiroyuki
On Tue, 30 Nov 2010 15:45:55 +0530
Balbir Singh bal...@linux.vnet.ibm.com wrote:

 Refactor zone_reclaim, move reusable functionality outside
 of zone_reclaim. Make zone_reclaim_unmapped_pages modular
 
 Signed-off-by: Balbir Singh bal...@linux.vnet.ibm.com

Why is this min_mapped_pages based on zone (IOW, per-zone) ?


Thanks,
-Kame

--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/3] Refactor zone_reclaim

2010-11-30 Thread Balbir Singh
* Balbir Singh bal...@linux.vnet.ibm.com [2010-12-01 10:16:34]:

 * KAMEZAWA Hiroyuki kamezawa.hir...@jp.fujitsu.com [2010-12-01 10:23:29]:
 
  On Tue, 30 Nov 2010 15:45:55 +0530
  Balbir Singh bal...@linux.vnet.ibm.com wrote:
  
   Refactor zone_reclaim, move reusable functionality outside
   of zone_reclaim. Make zone_reclaim_unmapped_pages modular
   
   Signed-off-by: Balbir Singh bal...@linux.vnet.ibm.com
  
  Why is this min_mapped_pages based on zone (IOW, per-zone) ?
 
 
 Kamezawa-San, this has been the design before the refactoring (it is
 based on zone_reclaim_mode and reclaim based on top of that).  I am
 reusing bits of existing technology. The advantage of it being
 per-zone is that it integrates well with kswapd. 


My local MTA failed to deliver the message, trying again. 

-- 
Three Cheers,
Balbir
--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 2/3] Refactor zone_reclaim

2010-11-30 Thread Minchan Kim
Hi Balbir,

On Tue, Nov 30, 2010 at 7:15 PM, Balbir Singh bal...@linux.vnet.ibm.com wrote:
 Refactor zone_reclaim, move reusable functionality outside
 of zone_reclaim. Make zone_reclaim_unmapped_pages modular

 Signed-off-by: Balbir Singh bal...@linux.vnet.ibm.com
 ---
  mm/vmscan.c |   35 +++
  1 files changed, 23 insertions(+), 12 deletions(-)

 diff --git a/mm/vmscan.c b/mm/vmscan.c
 index 325443a..0ac444f 100644
 --- a/mm/vmscan.c
 +++ b/mm/vmscan.c
 @@ -2719,6 +2719,27 @@ static long zone_pagecache_reclaimable(struct zone 
 *zone)
  }

  /*
 + * Helper function to reclaim unmapped pages, we might add something
 + * similar to this for slab cache as well. Currently this function
 + * is shared with __zone_reclaim()
 + */
 +static inline void
 +zone_reclaim_unmapped_pages(struct zone *zone, struct scan_control *sc,
 +                               unsigned long nr_pages)
 +{
 +       int priority;
 +       /*
 +        * Free memory by calling shrink zone with increasing
 +        * priorities until we have enough memory freed.
 +        */
 +       priority = ZONE_RECLAIM_PRIORITY;
 +       do {
 +               shrink_zone(priority, zone, sc);
 +               priority--;
 +       } while (priority = 0  sc-nr_reclaimed  nr_pages);
 +}
 +

I don't see any specific logic about naming
zone_reclaim_unmapped_pages in your function.
Maybe, caller of this function have to handle sc-may_unmap. So, this
function's naming
is not good.
As I see your logic, the function name would be just zone_reclaim_pages
If you want to name it with zone_reclaim_unmapped_pages, it could be
better with setting sc-may_unmap in this function.


-- 
Kind regards,
Minchan Kim
--
To unsubscribe from this list: send the line unsubscribe kvm in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html