Re: [patch 1/2/4] mm: writeback: cleanups in preparation for per-zone dirty limits

2011-09-28 Thread Mel Gorman
On Fri, Sep 23, 2011 at 04:41:07PM +0200, Johannes Weiner wrote:
 On Thu, Sep 22, 2011 at 10:52:42AM +0200, Johannes Weiner wrote:
  On Wed, Sep 21, 2011 at 04:02:26PM -0700, Andrew Morton wrote:
   Should we rename determine_dirtyable_memory() to
   global_dirtyable_memory(), to get some sense of its relationship with
   zone_dirtyable_memory()?
  
  Sounds good.
 
 ---
 
 The next patch will introduce per-zone dirty limiting functions in
 addition to the traditional global dirty limiting.
 
 Rename determine_dirtyable_memory() to global_dirtyable_memory()
 before adding the zone-specific version, and fix up its documentation.
 
 Also, move the functions to determine the dirtyable memory and the
 function to calculate the dirty limit based on that together so that
 their relationship is more apparent and that they can be commented on
 as a group.
 
 Signed-off-by: Johannes Weiner jwei...@redhat.com

Acked-by: Mel Gorman m...@suse.de

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


Re: [patch 1/2/4] mm: writeback: cleanups in preparation for per-zone dirty limits

2011-09-27 Thread Minchan Kim
On Fri, Sep 23, 2011 at 04:41:07PM +0200, Johannes Weiner wrote:
 On Thu, Sep 22, 2011 at 10:52:42AM +0200, Johannes Weiner wrote:
  On Wed, Sep 21, 2011 at 04:02:26PM -0700, Andrew Morton wrote:
   Should we rename determine_dirtyable_memory() to
   global_dirtyable_memory(), to get some sense of its relationship with
   zone_dirtyable_memory()?
  
  Sounds good.
 
 ---
 
 The next patch will introduce per-zone dirty limiting functions in
 addition to the traditional global dirty limiting.
 
 Rename determine_dirtyable_memory() to global_dirtyable_memory()
 before adding the zone-specific version, and fix up its documentation.
 
 Also, move the functions to determine the dirtyable memory and the
 function to calculate the dirty limit based on that together so that
 their relationship is more apparent and that they can be commented on
 as a group.
 
 Signed-off-by: Johannes Weiner jwei...@redhat.com
Reviewed-by: Minchan Kim minchan@gmail.com
-- 
Kinds regards,
Minchan Kim
--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[patch 1/2/4] mm: writeback: cleanups in preparation for per-zone dirty limits

2011-09-23 Thread Johannes Weiner
On Thu, Sep 22, 2011 at 10:52:42AM +0200, Johannes Weiner wrote:
 On Wed, Sep 21, 2011 at 04:02:26PM -0700, Andrew Morton wrote:
  Should we rename determine_dirtyable_memory() to
  global_dirtyable_memory(), to get some sense of its relationship with
  zone_dirtyable_memory()?
 
 Sounds good.

---

The next patch will introduce per-zone dirty limiting functions in
addition to the traditional global dirty limiting.

Rename determine_dirtyable_memory() to global_dirtyable_memory()
before adding the zone-specific version, and fix up its documentation.

Also, move the functions to determine the dirtyable memory and the
function to calculate the dirty limit based on that together so that
their relationship is more apparent and that they can be commented on
as a group.

Signed-off-by: Johannes Weiner jwei...@redhat.com
---
 mm/page-writeback.c |   92 +-
 1 files changed, 46 insertions(+), 46 deletions(-)

diff --git a/mm/page-writeback.c b/mm/page-writeback.c
index c8acf8a..78604a6 100644
--- a/mm/page-writeback.c
+++ b/mm/page-writeback.c
@@ -186,12 +186,12 @@ static unsigned long highmem_dirtyable_memory(unsigned 
long total)
 }
 
 /**
- * determine_dirtyable_memory - amount of memory that may be used
+ * global_dirtyable_memory - number of globally dirtyable pages
  *
- * Returns the numebr of pages that can currently be freed and used
- * by the kernel for direct mappings.
+ * Returns the global number of pages potentially available for dirty
+ * page cache.  This is the base value for the global dirty limits.
  */
-static unsigned long determine_dirtyable_memory(void)
+static unsigned long global_dirtyable_memory(void)
 {
unsigned long x;
 
@@ -205,6 +205,47 @@ static unsigned long determine_dirtyable_memory(void)
 }
 
 /*
+ * global_dirty_limits - background-writeback and dirty-throttling thresholds
+ *
+ * Calculate the dirty thresholds based on sysctl parameters
+ * - vm.dirty_background_ratio  or  vm.dirty_background_bytes
+ * - vm.dirty_ratio or  vm.dirty_bytes
+ * The dirty limits will be lifted by 1/4 for PF_LESS_THROTTLE (ie. nfsd) and
+ * real-time tasks.
+ */
+void global_dirty_limits(unsigned long *pbackground, unsigned long *pdirty)
+{
+   unsigned long background;
+   unsigned long dirty;
+   unsigned long uninitialized_var(available_memory);
+   struct task_struct *tsk;
+
+   if (!vm_dirty_bytes || !dirty_background_bytes)
+   available_memory = global_dirtyable_memory();
+
+   if (vm_dirty_bytes)
+   dirty = DIV_ROUND_UP(vm_dirty_bytes, PAGE_SIZE);
+   else
+   dirty = (vm_dirty_ratio * available_memory) / 100;
+
+   if (dirty_background_bytes)
+   background = DIV_ROUND_UP(dirty_background_bytes, PAGE_SIZE);
+   else
+   background = (dirty_background_ratio * available_memory) / 100;
+
+   if (background = dirty)
+   background = dirty / 2;
+   tsk = current;
+   if (tsk-flags  PF_LESS_THROTTLE || rt_task(tsk)) {
+   background += background / 4;
+   dirty += dirty / 4;
+   }
+   *pbackground = background;
+   *pdirty = dirty;
+   trace_global_dirty_state(background, dirty);
+}
+
+/*
  * couple the period to the dirty_ratio:
  *
  *   period/2 ~ roundup_pow_of_two(dirty limit)
@@ -216,7 +257,7 @@ static int calc_period_shift(void)
if (vm_dirty_bytes)
dirty_total = vm_dirty_bytes / PAGE_SIZE;
else
-   dirty_total = (vm_dirty_ratio * determine_dirtyable_memory()) /
+   dirty_total = (vm_dirty_ratio * global_dirtyable_memory()) /
100;
return 2 + ilog2(dirty_total - 1);
 }
@@ -416,47 +457,6 @@ static unsigned long hard_dirty_limit(unsigned long thresh)
return max(thresh, global_dirty_limit);
 }
 
-/*
- * global_dirty_limits - background-writeback and dirty-throttling thresholds
- *
- * Calculate the dirty thresholds based on sysctl parameters
- * - vm.dirty_background_ratio  or  vm.dirty_background_bytes
- * - vm.dirty_ratio or  vm.dirty_bytes
- * The dirty limits will be lifted by 1/4 for PF_LESS_THROTTLE (ie. nfsd) and
- * real-time tasks.
- */
-void global_dirty_limits(unsigned long *pbackground, unsigned long *pdirty)
-{
-   unsigned long background;
-   unsigned long dirty;
-   unsigned long uninitialized_var(available_memory);
-   struct task_struct *tsk;
-
-   if (!vm_dirty_bytes || !dirty_background_bytes)
-   available_memory = determine_dirtyable_memory();
-
-   if (vm_dirty_bytes)
-   dirty = DIV_ROUND_UP(vm_dirty_bytes, PAGE_SIZE);
-   else
-   dirty = (vm_dirty_ratio * available_memory) / 100;
-
-   if (dirty_background_bytes)
-   background = DIV_ROUND_UP(dirty_background_bytes, PAGE_SIZE);
-   else
-   background = (dirty_background_ratio *