All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <20120112085904.GG24386@cmpxchg.org>

diff --git a/a/1.txt b/N1/1.txt
index 8ee7f45..93f0852 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,30 +1,30 @@
 On Wed, Jan 11, 2012 at 01:42:31PM -0800, Ying Han wrote:
-> On Tue, Jan 10, 2012 at 7:02 AM, Johannes Weiner <hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org> wrote:
+> On Tue, Jan 10, 2012 at 7:02 AM, Johannes Weiner <hannes@cmpxchg.org> wrote:
 > > Right now, memcg soft limits are implemented by having a sorted tree
-> > of memcgs that are in excess of their limits.  Under global memory
+> > of memcgs that are in excess of their limits.  Under global memory
 > > pressure, kswapd first reclaims from the biggest excessor and then
-> > proceeds to do regular global reclaim.  The result of this is that
+> > proceeds to do regular global reclaim.  The result of this is that
 > > pages are reclaimed from all memcgs, but more scanning happens against
 > > those above their soft limit.
 > >
 > > With global reclaim doing memcg-aware hierarchical reclaim by default,
 > > this is a lot easier to implement: everytime a memcg is reclaimed
 > > from, scan more aggressively (per tradition with a priority of 0) if
-> > it's above its soft limit.  With the same end result of scanning
+> > it's above its soft limit.  With the same end result of scanning
 > > everybody, but soft limit excessors a bit more.
 > >
 > > Advantages:
 > >
-> >  o smoother reclaim: soft limit reclaim is a separate stage before
-> >    global reclaim, whose result is not communicated down the line and
-> >    so overreclaim of the groups in excess is very likely.  After this
-> >    patch, soft limit reclaim is fully integrated into regular reclaim
-> >    and each memcg is considered exactly once per cycle.
+> >  o smoother reclaim: soft limit reclaim is a separate stage before
+> >    global reclaim, whose result is not communicated down the line and
+> >    so overreclaim of the groups in excess is very likely.  After this
+> >    patch, soft limit reclaim is fully integrated into regular reclaim
+> >    and each memcg is considered exactly once per cycle.
 > >
-> >  o true hierarchy support: soft limits are only considered when
-> >    kswapd does global reclaim, but after this patch, targetted
-> >    reclaim of a memcg will mind the soft limit settings of its child
-> >    groups.
+> >  o true hierarchy support: soft limits are only considered when
+> >    kswapd does global reclaim, but after this patch, targetted
+> >    reclaim of a memcg will mind the soft limit settings of its child
+> >    groups.
 > 
 > Why we add soft limit reclaim into target reclaim?
 
@@ -50,46 +50,46 @@ for local pressure as well?
 
 I am not quite sure what you are objecting to.
 
-> >  o code size: soft limit reclaim requires a lot of code to maintain
-> >    the per-node per-zone rb-trees to quickly find the biggest
-> >    offender, dedicated paths for soft limit reclaim etc. while this
-> >    new implementation gets away without all that.
+> >  o code size: soft limit reclaim requires a lot of code to maintain
+> >    the per-node per-zone rb-trees to quickly find the biggest
+> >    offender, dedicated paths for soft limit reclaim etc. while this
+> >    new implementation gets away without all that.
 > >
 > > Test:
 > >
 > > The test consists of two concurrent kernel build jobs in separate
-> > source trees, the master and the slave.  The two jobs get along nicely
+> > source trees, the master and the slave.  The two jobs get along nicely
 > > on 600MB of available memory, so this is the zero overcommit control
-> > case.  When available memory is decreased, the overcommit is
+> > case.  When available memory is decreased, the overcommit is
 > > compensated by decreasing the soft limit of the slave by the same
 > > amount, in the hope that the slave takes the hit and the master stays
 > > unaffected.
 > >
-> >                                    600M-0M-vanilla         600M-0M-patched
-> > Master walltime (s)               552.65 (  +0.00%)       552.38 (  -0.05%)
-> > Master walltime (stddev)            1.25 (  +0.00%)         0.92 ( -14.66%)
-> > Master major faults               204.38 (  +0.00%)       205.38 (  +0.49%)
-> > Master major faults (stddev)       27.16 (  +0.00%)        13.80 ( -47.43%)
-> > Master reclaim                     31.88 (  +0.00%)        37.75 ( +17.87%)
-> > Master reclaim (stddev)            34.01 (  +0.00%)        75.88 (+119.59%)
-> > Master scan                        31.88 (  +0.00%)        37.75 ( +17.87%)
-> > Master scan (stddev)               34.01 (  +0.00%)        75.88 (+119.59%)
-> > Master kswapd reclaim           33922.12 (  +0.00%)     33887.12 (  -0.10%)
-> > Master kswapd reclaim (stddev)    969.08 (  +0.00%)       492.22 ( -49.16%)
-> > Master kswapd scan              34085.75 (  +0.00%)     33985.75 (  -0.29%)
-> > Master kswapd scan (stddev)      1101.07 (  +0.00%)       563.33 ( -48.79%)
-> > Slave walltime (s)                552.68 (  +0.00%)       552.12 (  -0.10%)
-> > Slave walltime (stddev)             0.79 (  +0.00%)         1.05 ( +14.76%)
-> > Slave major faults                212.50 (  +0.00%)       204.50 (  -3.75%)
-> > Slave major faults (stddev)        26.90 (  +0.00%)        13.17 ( -49.20%)
-> > Slave reclaim                      26.12 (  +0.00%)        35.00 ( +32.72%)
-> > Slave reclaim (stddev)             29.42 (  +0.00%)        74.91 (+149.55%)
-> > Slave scan                         31.38 (  +0.00%)        35.00 ( +11.20%)
-> > Slave scan (stddev)                33.31 (  +0.00%)        74.91 (+121.24%)
-> > Slave kswapd reclaim            34259.00 (  +0.00%)     33469.88 (  -2.30%)
-> > Slave kswapd reclaim (stddev)     925.15 (  +0.00%)       565.07 ( -38.88%)
-> > Slave kswapd scan               34354.62 (  +0.00%)     33555.75 (  -2.33%)
-> > Slave kswapd scan (stddev)        969.62 (  +0.00%)       581.70 ( -39.97%)
+> >                                    600M-0M-vanilla         600M-0M-patched
+> > Master walltime (s)               552.65 (  +0.00%)       552.38 (  -0.05%)
+> > Master walltime (stddev)            1.25 (  +0.00%)         0.92 ( -14.66%)
+> > Master major faults               204.38 (  +0.00%)       205.38 (  +0.49%)
+> > Master major faults (stddev)       27.16 (  +0.00%)        13.80 ( -47.43%)
+> > Master reclaim                     31.88 (  +0.00%)        37.75 ( +17.87%)
+> > Master reclaim (stddev)            34.01 (  +0.00%)        75.88 (+119.59%)
+> > Master scan                        31.88 (  +0.00%)        37.75 ( +17.87%)
+> > Master scan (stddev)               34.01 (  +0.00%)        75.88 (+119.59%)
+> > Master kswapd reclaim           33922.12 (  +0.00%)     33887.12 (  -0.10%)
+> > Master kswapd reclaim (stddev)    969.08 (  +0.00%)       492.22 ( -49.16%)
+> > Master kswapd scan              34085.75 (  +0.00%)     33985.75 (  -0.29%)
+> > Master kswapd scan (stddev)      1101.07 (  +0.00%)       563.33 ( -48.79%)
+> > Slave walltime (s)                552.68 (  +0.00%)       552.12 (  -0.10%)
+> > Slave walltime (stddev)             0.79 (  +0.00%)         1.05 ( +14.76%)
+> > Slave major faults                212.50 (  +0.00%)       204.50 (  -3.75%)
+> > Slave major faults (stddev)        26.90 (  +0.00%)        13.17 ( -49.20%)
+> > Slave reclaim                      26.12 (  +0.00%)        35.00 ( +32.72%)
+> > Slave reclaim (stddev)             29.42 (  +0.00%)        74.91 (+149.55%)
+> > Slave scan                         31.38 (  +0.00%)        35.00 ( +11.20%)
+> > Slave scan (stddev)                33.31 (  +0.00%)        74.91 (+121.24%)
+> > Slave kswapd reclaim            34259.00 (  +0.00%)     33469.88 (  -2.30%)
+> > Slave kswapd reclaim (stddev)     925.15 (  +0.00%)       565.07 ( -38.88%)
+> > Slave kswapd scan               34354.62 (  +0.00%)     33555.75 (  -2.33%)
+> > Slave kswapd scan (stddev)        969.62 (  +0.00%)       581.70 ( -39.97%)
 > >
 > > In the control case, the differences in elapsed time, number of major
 > > faults taken, and reclaim statistics are within the noise for both the
@@ -108,39 +108,39 @@ comfortably, don't compete for space and that in general the patch
 does not have unexpected negative impact (after all, it modifies
 codepaths that were invoked regularly outside of reclaim).
 
-> >                                     600M-280M-vanilla      600M-280M-patched
-> > Master walltime (s)                  595.13 (  +0.00%)      553.19 (  -7.04%)
-> > Master walltime (stddev)               8.31 (  +0.00%)        2.57 ( -61.64%)
-> > Master major faults                 3729.75 (  +0.00%)      783.25 ( -78.98%)
-> > Master major faults (stddev)         258.79 (  +0.00%)      226.68 ( -12.36%)
-> > Master reclaim                       705.00 (  +0.00%)       29.50 ( -95.68%)
-> > Master reclaim (stddev)              232.87 (  +0.00%)       44.72 ( -80.45%)
-> > Master scan                          714.88 (  +0.00%)       30.00 ( -95.67%)
-> > Master scan (stddev)                 237.44 (  +0.00%)       45.39 ( -80.54%)
-> > Master kswapd reclaim                114.75 (  +0.00%)       50.00 ( -55.94%)
-> > Master kswapd reclaim (stddev)       128.51 (  +0.00%)        9.45 ( -91.93%)
-> > Master kswapd scan                   115.75 (  +0.00%)       50.00 ( -56.32%)
-> > Master kswapd scan (stddev)          130.31 (  +0.00%)        9.45 ( -92.04%)
-> > Slave walltime (s)                   631.18 (  +0.00%)      577.68 (  -8.46%)
-> > Slave walltime (stddev)                9.89 (  +0.00%)        3.63 ( -57.47%)
-> > Slave major faults                 28401.75 (  +0.00%)    14656.75 ( -48.39%)
-> > Slave major faults (stddev)         2629.97 (  +0.00%)     1911.81 ( -27.30%)
-> > Slave reclaim                      65400.62 (  +0.00%)     1479.62 ( -97.74%)
-> > Slave reclaim (stddev)             11623.02 (  +0.00%)     1482.13 ( -87.24%)
-> > Slave scan                       9050047.88 (  +0.00%)    95968.25 ( -98.94%)
-> > Slave scan (stddev)              1912786.94 (  +0.00%)    93390.71 ( -95.12%)
-> > Slave kswapd reclaim              327894.50 (  +0.00%)   227099.88 ( -30.74%)
-> > Slave kswapd reclaim (stddev)      22289.43 (  +0.00%)    16113.14 ( -27.71%)
-> > Slave kswapd scan               34987335.75 (  +0.00%)  1362367.12 ( -96.11%)
-> > Slave kswapd scan (stddev)       2523642.98 (  +0.00%)   156754.74 ( -93.79%)
+> >                                     600M-280M-vanilla      600M-280M-patched
+> > Master walltime (s)                  595.13 (  +0.00%)      553.19 (  -7.04%)
+> > Master walltime (stddev)               8.31 (  +0.00%)        2.57 ( -61.64%)
+> > Master major faults                 3729.75 (  +0.00%)      783.25 ( -78.98%)
+> > Master major faults (stddev)         258.79 (  +0.00%)      226.68 ( -12.36%)
+> > Master reclaim                       705.00 (  +0.00%)       29.50 ( -95.68%)
+> > Master reclaim (stddev)              232.87 (  +0.00%)       44.72 ( -80.45%)
+> > Master scan                          714.88 (  +0.00%)       30.00 ( -95.67%)
+> > Master scan (stddev)                 237.44 (  +0.00%)       45.39 ( -80.54%)
+> > Master kswapd reclaim                114.75 (  +0.00%)       50.00 ( -55.94%)
+> > Master kswapd reclaim (stddev)       128.51 (  +0.00%)        9.45 ( -91.93%)
+> > Master kswapd scan                   115.75 (  +0.00%)       50.00 ( -56.32%)
+> > Master kswapd scan (stddev)          130.31 (  +0.00%)        9.45 ( -92.04%)
+> > Slave walltime (s)                   631.18 (  +0.00%)      577.68 (  -8.46%)
+> > Slave walltime (stddev)                9.89 (  +0.00%)        3.63 ( -57.47%)
+> > Slave major faults                 28401.75 (  +0.00%)    14656.75 ( -48.39%)
+> > Slave major faults (stddev)         2629.97 (  +0.00%)     1911.81 ( -27.30%)
+> > Slave reclaim                      65400.62 (  +0.00%)     1479.62 ( -97.74%)
+> > Slave reclaim (stddev)             11623.02 (  +0.00%)     1482.13 ( -87.24%)
+> > Slave scan                       9050047.88 (  +0.00%)    95968.25 ( -98.94%)
+> > Slave scan (stddev)              1912786.94 (  +0.00%)    93390.71 ( -95.12%)
+> > Slave kswapd reclaim              327894.50 (  +0.00%)   227099.88 ( -30.74%)
+> > Slave kswapd reclaim (stddev)      22289.43 (  +0.00%)    16113.14 ( -27.71%)
+> > Slave kswapd scan               34987335.75 (  +0.00%)  1362367.12 ( -96.11%)
+> > Slave kswapd scan (stddev)       2523642.98 (  +0.00%)   156754.74 ( -93.79%)
 > >
 > > Here, the available memory is limited to 320 MB, the machine is
-> > overcommitted by 280 MB.  The soft limit of the master is 300 MB, that
+> > overcommitted by 280 MB.  The soft limit of the master is 300 MB, that
 > > of the slave merely 20 MB.
 > >
 > > Looking at the slave job first, it is much better off with the patched
 > > kernel: direct reclaim is almost gone, kswapd reclaim is decreased by
-> > a third.  The result is much fewer major faults taken, which in turn
+> > a third.  The result is much fewer major faults taken, which in turn
 > > lets the job finish quicker.
 > 
 > What's the setting of the hard limit here? Is the direct reclaim
@@ -157,7 +157,7 @@ the global level there.
 
 > > It would be a zero-sum game if the improvement happened at the cost of
 > > the master but looking at the numbers, even the master performs better
-> > with the patched kernel.  In fact, the master job is almost unaffected
+> > with the patched kernel.  In fact, the master job is almost unaffected
 > > on the patched kernel compared to the control case.
 > 
 > It makes sense since the master job get less affected by the patch
@@ -173,21 +173,21 @@ the global level there.
 
 Uhm,
 
-> > Slave reclaim                      65400.62 (  +0.00%)     1479.62 ( -97.74%)
-> > Slave reclaim (stddev)             11623.02 (  +0.00%)     1482.13 ( -87.24%)
-> > Slave scan                       9050047.88 (  +0.00%)    95968.25 ( -98.94%)
-> > Slave scan (stddev)              1912786.94 (  +0.00%)    93390.71 ( -95.12%)
-> > Slave kswapd reclaim              327894.50 (  +0.00%)   227099.88 ( -30.74%)
-> > Slave kswapd reclaim (stddev)      22289.43 (  +0.00%)    16113.14 ( -27.71%)
-> > Slave kswapd scan               34987335.75 (  +0.00%)  1362367.12 ( -96.11%)
-> > Slave kswapd scan (stddev)       2523642.98 (  +0.00%)   156754.74 ( -93.79%)
+> > Slave reclaim                      65400.62 (  +0.00%)     1479.62 ( -97.74%)
+> > Slave reclaim (stddev)             11623.02 (  +0.00%)     1482.13 ( -87.24%)
+> > Slave scan                       9050047.88 (  +0.00%)    95968.25 ( -98.94%)
+> > Slave scan (stddev)              1912786.94 (  +0.00%)    93390.71 ( -95.12%)
+> > Slave kswapd reclaim              327894.50 (  +0.00%)   227099.88 ( -30.74%)
+> > Slave kswapd reclaim (stddev)      22289.43 (  +0.00%)    16113.14 ( -27.71%)
+> > Slave kswapd scan               34987335.75 (  +0.00%)  1362367.12 ( -96.11%)
+> > Slave kswapd scan (stddev)       2523642.98 (  +0.00%)   156754.74 ( -93.79%)
 
 Direct reclaim _shrunk_ by 98%, kswapd reclaim by 31%.
 
 > > This is an odd phenomenon, as the patch does not directly change how
-> > the master is reclaimed.  An explanation for this is that the severe
+> > the master is reclaimed.  An explanation for this is that the severe
 > > overreclaim of the slave in the unpatched kernel results in the master
-> > growing bigger than in the patched case.  Combining the fact that
+> > growing bigger than in the patched case.  Combining the fact that
 > > memcgs are scanned according to their size with the increased refault
 > > rate of the overreclaimed slave triggering global reclaim more often
 > > means that overall pressure on the master job is higher in the
@@ -211,9 +211,9 @@ unaffected and the slave taking the hit.  The patched kernel does
 this, the unpatched one does not.
 
 > > @@ -121,6 +121,7 @@ struct zone_reclaim_stat *mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg,
-> >                                                      struct zone *zone);
-> >  struct zone_reclaim_stat*
-> >  mem_cgroup_get_reclaim_stat_from_page(struct page *page);
+> >                                                      struct zone *zone);
+> >  struct zone_reclaim_stat*
+> >  mem_cgroup_get_reclaim_stat_from_page(struct page *page);
 > > +bool mem_cgroup_over_softlimit(struct mem_cgroup *, struct mem_cgroup *);
 > 
 > Maybe something like "mem_cgroup_over_soft_limit()" ?
@@ -221,18 +221,18 @@ this, the unpatched one does not.
 Probably more consistent, yeah.  Will do.
 
 > > @@ -343,7 +314,6 @@ static bool move_file(void)
-> >  * limit reclaim to prevent infinite loops, if they ever occur.
-> >  */
-> >  #define        MEM_CGROUP_MAX_RECLAIM_LOOPS            (100)
-> > -#define        MEM_CGROUP_MAX_SOFT_LIMIT_RECLAIM_LOOPS (2)
+> >  * limit reclaim to prevent infinite loops, if they ever occur.
+> >  */
+> >  #define        MEM_CGROUP_MAX_RECLAIM_LOOPS            (100)
+> > -#define        MEM_CGROUP_MAX_SOFT_LIMIT_RECLAIM_LOOPS (2)
 > 
 > You might need to remove the comment above as well.
 
 Oops, will fix.
 
 > > @@ -1318,6 +1123,36 @@ static unsigned long mem_cgroup_margin(struct mem_cgroup *memcg)
-> >        return margin >> PAGE_SHIFT;
-> >  }
+> >        return margin >> PAGE_SHIFT;
+> >  }
 > >
 > > +/**
 > > + * mem_cgroup_over_softlimit
@@ -244,23 +244,23 @@ Oops, will fix.
 > > + * @root.
 > > + */
 > > +bool mem_cgroup_over_softlimit(struct mem_cgroup *root,
-> > +                              struct mem_cgroup *memcg)
+> > +                              struct mem_cgroup *memcg)
 > > +{
-> > +       if (mem_cgroup_disabled())
-> > +               return false;
+> > +       if (mem_cgroup_disabled())
+> > +               return false;
 > > +
-> > +       if (!root)
-> > +               root = root_mem_cgroup;
+> > +       if (!root)
+> > +               root = root_mem_cgroup;
 > > +
-> > +       for (; memcg; memcg = parent_mem_cgroup(memcg)) {
-> > +               /* root_mem_cgroup does not have a soft limit */
-> > +               if (memcg == root_mem_cgroup)
-> > +                       break;
-> > +               if (res_counter_soft_limit_excess(&memcg->res))
-> > +                       return true;
-> > +               if (memcg == root)
-> > +                       break;
-> > +       }
+> > +       for (; memcg; memcg = parent_mem_cgroup(memcg)) {
+> > +               /* root_mem_cgroup does not have a soft limit */
+> > +               if (memcg == root_mem_cgroup)
+> > +                       break;
+> > +               if (res_counter_soft_limit_excess(&memcg->res))
+> > +                       return true;
+> > +               if (memcg == root)
+> > +                       break;
+> > +       }
 > 
 > Here it adds pressure on a cgroup if one of its parents exceeds soft
 > limit, although the cgroup itself is under soft limit. It does change
@@ -320,3 +320,10 @@ If you would just not set the soft limit of A in your case:
 	-> B (hard limit 20G, soft limit 10G, usage 16G)
 
 only A2 and B would experience higher pressure upon global pressure.
+
+--
+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/ .
+Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
+Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
diff --git a/a/content_digest b/N1/content_digest
index 071aadf..645704e 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -1,47 +1,46 @@
  "ref\01326207772-16762-1-git-send-email-hannes@cmpxchg.org\0"
  "ref\01326207772-16762-3-git-send-email-hannes@cmpxchg.org\0"
  "ref\0CALWz4izwNBN_qcSsqg-qYw-Esc9vBL3=4cv3Wsg1jf6001_fWQ@mail.gmail.com\0"
- "ref\0CALWz4izwNBN_qcSsqg-qYw-Esc9vBL3=4cv3Wsg1jf6001_fWQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org\0"
- "From\0Johannes Weiner <hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org>\0"
+ "From\0Johannes Weiner <hannes@cmpxchg.org>\0"
  "Subject\0Re: [patch 2/2] mm: memcg: hierarchical soft limit reclaim\0"
  "Date\0Thu, 12 Jan 2012 09:59:04 +0100\0"
- "To\0Ying Han <yinghan-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>\0"
- "Cc\0Andrew Morton <akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>"
-  Michal Hocko <mhocko-AlSwsSmVLrQ@public.gmane.org>
-  KAMEZAWA Hiroyuki <kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
-  Balbir Singh <bsingharora-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
-  cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
-  linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org
- " linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org\0"
+ "To\0Ying Han <yinghan@google.com>\0"
+ "Cc\0Andrew Morton <akpm@linux-foundation.org>"
+  Michal Hocko <mhocko@suse.cz>
+  KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
+  Balbir Singh <bsingharora@gmail.com>
+  cgroups@vger.kernel.org
+  linux-mm@kvack.org
+ " linux-kernel@vger.kernel.org\0"
  "\00:1\0"
  "b\0"
  "On Wed, Jan 11, 2012 at 01:42:31PM -0800, Ying Han wrote:\n"
- "> On Tue, Jan 10, 2012 at 7:02 AM, Johannes Weiner <hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org> wrote:\n"
+ "> On Tue, Jan 10, 2012 at 7:02 AM, Johannes Weiner <hannes@cmpxchg.org> wrote:\n"
  "> > Right now, memcg soft limits are implemented by having a sorted tree\n"
- "> > of memcgs that are in excess of their limits. \302\240Under global memory\n"
+ "> > of memcgs that are in excess of their limits.  Under global memory\n"
  "> > pressure, kswapd first reclaims from the biggest excessor and then\n"
- "> > proceeds to do regular global reclaim. \302\240The result of this is that\n"
+ "> > proceeds to do regular global reclaim.  The result of this is that\n"
  "> > pages are reclaimed from all memcgs, but more scanning happens against\n"
  "> > those above their soft limit.\n"
  "> >\n"
  "> > With global reclaim doing memcg-aware hierarchical reclaim by default,\n"
  "> > this is a lot easier to implement: everytime a memcg is reclaimed\n"
  "> > from, scan more aggressively (per tradition with a priority of 0) if\n"
- "> > it's above its soft limit. \302\240With the same end result of scanning\n"
+ "> > it's above its soft limit.  With the same end result of scanning\n"
  "> > everybody, but soft limit excessors a bit more.\n"
  "> >\n"
  "> > Advantages:\n"
  "> >\n"
- "> > \302\240o smoother reclaim: soft limit reclaim is a separate stage before\n"
- "> > \302\240 \302\240global reclaim, whose result is not communicated down the line and\n"
- "> > \302\240 \302\240so overreclaim of the groups in excess is very likely. \302\240After this\n"
- "> > \302\240 \302\240patch, soft limit reclaim is fully integrated into regular reclaim\n"
- "> > \302\240 \302\240and each memcg is considered exactly once per cycle.\n"
+ "> >  o smoother reclaim: soft limit reclaim is a separate stage before\n"
+ "> >    global reclaim, whose result is not communicated down the line and\n"
+ "> >    so overreclaim of the groups in excess is very likely.  After this\n"
+ "> >    patch, soft limit reclaim is fully integrated into regular reclaim\n"
+ "> >    and each memcg is considered exactly once per cycle.\n"
  "> >\n"
- "> > \302\240o true hierarchy support: soft limits are only considered when\n"
- "> > \302\240 \302\240kswapd does global reclaim, but after this patch, targetted\n"
- "> > \302\240 \302\240reclaim of a memcg will mind the soft limit settings of its child\n"
- "> > \302\240 \302\240groups.\n"
+ "> >  o true hierarchy support: soft limits are only considered when\n"
+ "> >    kswapd does global reclaim, but after this patch, targetted\n"
+ "> >    reclaim of a memcg will mind the soft limit settings of its child\n"
+ "> >    groups.\n"
  "> \n"
  "> Why we add soft limit reclaim into target reclaim?\n"
  "\n"
@@ -67,46 +66,46 @@
  "\n"
  "I am not quite sure what you are objecting to.\n"
  "\n"
- "> > \302\240o code size: soft limit reclaim requires a lot of code to maintain\n"
- "> > \302\240 \302\240the per-node per-zone rb-trees to quickly find the biggest\n"
- "> > \302\240 \302\240offender, dedicated paths for soft limit reclaim etc. while this\n"
- "> > \302\240 \302\240new implementation gets away without all that.\n"
+ "> >  o code size: soft limit reclaim requires a lot of code to maintain\n"
+ "> >    the per-node per-zone rb-trees to quickly find the biggest\n"
+ "> >    offender, dedicated paths for soft limit reclaim etc. while this\n"
+ "> >    new implementation gets away without all that.\n"
  "> >\n"
  "> > Test:\n"
  "> >\n"
  "> > The test consists of two concurrent kernel build jobs in separate\n"
- "> > source trees, the master and the slave. \302\240The two jobs get along nicely\n"
+ "> > source trees, the master and the slave.  The two jobs get along nicely\n"
  "> > on 600MB of available memory, so this is the zero overcommit control\n"
- "> > case. \302\240When available memory is decreased, the overcommit is\n"
+ "> > case.  When available memory is decreased, the overcommit is\n"
  "> > compensated by decreasing the soft limit of the slave by the same\n"
  "> > amount, in the hope that the slave takes the hit and the master stays\n"
  "> > unaffected.\n"
  "> >\n"
- "> > \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240600M-0M-vanilla \302\240 \302\240 \302\240 \302\240 600M-0M-patched\n"
- "> > Master walltime (s) \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 552.65 ( \302\240+0.00%) \302\240 \302\240 \302\240 552.38 ( \302\240-0.05%)\n"
- "> > Master walltime (stddev) \302\240 \302\240 \302\240 \302\240 \302\240 \302\2401.25 ( \302\240+0.00%) \302\240 \302\240 \302\240 \302\240 0.92 ( -14.66%)\n"
- "> > Master major faults \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 204.38 ( \302\240+0.00%) \302\240 \302\240 \302\240 205.38 ( \302\240+0.49%)\n"
- "> > Master major faults (stddev) \302\240 \302\240 \302\240 27.16 ( \302\240+0.00%) \302\240 \302\240 \302\240 \302\24013.80 ( -47.43%)\n"
- "> > Master reclaim \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 31.88 ( \302\240+0.00%) \302\240 \302\240 \302\240 \302\24037.75 ( +17.87%)\n"
- "> > Master reclaim (stddev) \302\240 \302\240 \302\240 \302\240 \302\240 \302\24034.01 ( \302\240+0.00%) \302\240 \302\240 \302\240 \302\24075.88 (+119.59%)\n"
- "> > Master scan \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\24031.88 ( \302\240+0.00%) \302\240 \302\240 \302\240 \302\24037.75 ( +17.87%)\n"
- "> > Master scan (stddev) \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 34.01 ( \302\240+0.00%) \302\240 \302\240 \302\240 \302\24075.88 (+119.59%)\n"
- "> > Master kswapd reclaim \302\240 \302\240 \302\240 \302\240 \302\240 33922.12 ( \302\240+0.00%) \302\240 \302\240 33887.12 ( \302\240-0.10%)\n"
- "> > Master kswapd reclaim (stddev) \302\240 \302\240969.08 ( \302\240+0.00%) \302\240 \302\240 \302\240 492.22 ( -49.16%)\n"
- "> > Master kswapd scan \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\24034085.75 ( \302\240+0.00%) \302\240 \302\240 33985.75 ( \302\240-0.29%)\n"
- "> > Master kswapd scan (stddev) \302\240 \302\240 \302\2401101.07 ( \302\240+0.00%) \302\240 \302\240 \302\240 563.33 ( -48.79%)\n"
- "> > Slave walltime (s) \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240552.68 ( \302\240+0.00%) \302\240 \302\240 \302\240 552.12 ( \302\240-0.10%)\n"
- "> > Slave walltime (stddev) \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 0.79 ( \302\240+0.00%) \302\240 \302\240 \302\240 \302\240 1.05 ( +14.76%)\n"
- "> > Slave major faults \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240212.50 ( \302\240+0.00%) \302\240 \302\240 \302\240 204.50 ( \302\240-3.75%)\n"
- "> > Slave major faults (stddev) \302\240 \302\240 \302\240 \302\24026.90 ( \302\240+0.00%) \302\240 \302\240 \302\240 \302\24013.17 ( -49.20%)\n"
- "> > Slave reclaim \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\24026.12 ( \302\240+0.00%) \302\240 \302\240 \302\240 \302\24035.00 ( +32.72%)\n"
- "> > Slave reclaim (stddev) \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 29.42 ( \302\240+0.00%) \302\240 \302\240 \302\240 \302\24074.91 (+149.55%)\n"
- "> > Slave scan \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 31.38 ( \302\240+0.00%) \302\240 \302\240 \302\240 \302\24035.00 ( +11.20%)\n"
- "> > Slave scan (stddev) \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\24033.31 ( \302\240+0.00%) \302\240 \302\240 \302\240 \302\24074.91 (+121.24%)\n"
- "> > Slave kswapd reclaim \302\240 \302\240 \302\240 \302\240 \302\240 \302\24034259.00 ( \302\240+0.00%) \302\240 \302\240 33469.88 ( \302\240-2.30%)\n"
- "> > Slave kswapd reclaim (stddev) \302\240 \302\240 925.15 ( \302\240+0.00%) \302\240 \302\240 \302\240 565.07 ( -38.88%)\n"
- "> > Slave kswapd scan \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 34354.62 ( \302\240+0.00%) \302\240 \302\240 33555.75 ( \302\240-2.33%)\n"
- "> > Slave kswapd scan (stddev) \302\240 \302\240 \302\240 \302\240969.62 ( \302\240+0.00%) \302\240 \302\240 \302\240 581.70 ( -39.97%)\n"
+ "> >                                    600M-0M-vanilla         600M-0M-patched\n"
+ "> > Master walltime (s)               552.65 (  +0.00%)       552.38 (  -0.05%)\n"
+ "> > Master walltime (stddev)            1.25 (  +0.00%)         0.92 ( -14.66%)\n"
+ "> > Master major faults               204.38 (  +0.00%)       205.38 (  +0.49%)\n"
+ "> > Master major faults (stddev)       27.16 (  +0.00%)        13.80 ( -47.43%)\n"
+ "> > Master reclaim                     31.88 (  +0.00%)        37.75 ( +17.87%)\n"
+ "> > Master reclaim (stddev)            34.01 (  +0.00%)        75.88 (+119.59%)\n"
+ "> > Master scan                        31.88 (  +0.00%)        37.75 ( +17.87%)\n"
+ "> > Master scan (stddev)               34.01 (  +0.00%)        75.88 (+119.59%)\n"
+ "> > Master kswapd reclaim           33922.12 (  +0.00%)     33887.12 (  -0.10%)\n"
+ "> > Master kswapd reclaim (stddev)    969.08 (  +0.00%)       492.22 ( -49.16%)\n"
+ "> > Master kswapd scan              34085.75 (  +0.00%)     33985.75 (  -0.29%)\n"
+ "> > Master kswapd scan (stddev)      1101.07 (  +0.00%)       563.33 ( -48.79%)\n"
+ "> > Slave walltime (s)                552.68 (  +0.00%)       552.12 (  -0.10%)\n"
+ "> > Slave walltime (stddev)             0.79 (  +0.00%)         1.05 ( +14.76%)\n"
+ "> > Slave major faults                212.50 (  +0.00%)       204.50 (  -3.75%)\n"
+ "> > Slave major faults (stddev)        26.90 (  +0.00%)        13.17 ( -49.20%)\n"
+ "> > Slave reclaim                      26.12 (  +0.00%)        35.00 ( +32.72%)\n"
+ "> > Slave reclaim (stddev)             29.42 (  +0.00%)        74.91 (+149.55%)\n"
+ "> > Slave scan                         31.38 (  +0.00%)        35.00 ( +11.20%)\n"
+ "> > Slave scan (stddev)                33.31 (  +0.00%)        74.91 (+121.24%)\n"
+ "> > Slave kswapd reclaim            34259.00 (  +0.00%)     33469.88 (  -2.30%)\n"
+ "> > Slave kswapd reclaim (stddev)     925.15 (  +0.00%)       565.07 ( -38.88%)\n"
+ "> > Slave kswapd scan               34354.62 (  +0.00%)     33555.75 (  -2.33%)\n"
+ "> > Slave kswapd scan (stddev)        969.62 (  +0.00%)       581.70 ( -39.97%)\n"
  "> >\n"
  "> > In the control case, the differences in elapsed time, number of major\n"
  "> > faults taken, and reclaim statistics are within the noise for both the\n"
@@ -125,39 +124,39 @@
  "does not have unexpected negative impact (after all, it modifies\n"
  "codepaths that were invoked regularly outside of reclaim).\n"
  "\n"
- "> > \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 600M-280M-vanilla \302\240 \302\240 \302\240600M-280M-patched\n"
- "> > Master walltime (s) \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240595.13 ( \302\240+0.00%) \302\240 \302\240 \302\240553.19 ( \302\240-7.04%)\n"
- "> > Master walltime (stddev) \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 8.31 ( \302\240+0.00%) \302\240 \302\240 \302\240 \302\2402.57 ( -61.64%)\n"
- "> > Master major faults \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 3729.75 ( \302\240+0.00%) \302\240 \302\240 \302\240783.25 ( -78.98%)\n"
- "> > Master major faults (stddev) \302\240 \302\240 \302\240 \302\240 258.79 ( \302\240+0.00%) \302\240 \302\240 \302\240226.68 ( -12.36%)\n"
- "> > Master reclaim \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 705.00 ( \302\240+0.00%) \302\240 \302\240 \302\240 29.50 ( -95.68%)\n"
- "> > Master reclaim (stddev) \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240232.87 ( \302\240+0.00%) \302\240 \302\240 \302\240 44.72 ( -80.45%)\n"
- "> > Master scan \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240714.88 ( \302\240+0.00%) \302\240 \302\240 \302\240 30.00 ( -95.67%)\n"
- "> > Master scan (stddev) \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 237.44 ( \302\240+0.00%) \302\240 \302\240 \302\240 45.39 ( -80.54%)\n"
- "> > Master kswapd reclaim \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240114.75 ( \302\240+0.00%) \302\240 \302\240 \302\240 50.00 ( -55.94%)\n"
- "> > Master kswapd reclaim (stddev) \302\240 \302\240 \302\240 128.51 ( \302\240+0.00%) \302\240 \302\240 \302\240 \302\2409.45 ( -91.93%)\n"
- "> > Master kswapd scan \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 115.75 ( \302\240+0.00%) \302\240 \302\240 \302\240 50.00 ( -56.32%)\n"
- "> > Master kswapd scan (stddev) \302\240 \302\240 \302\240 \302\240 \302\240130.31 ( \302\240+0.00%) \302\240 \302\240 \302\240 \302\2409.45 ( -92.04%)\n"
- "> > Slave walltime (s) \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 631.18 ( \302\240+0.00%) \302\240 \302\240 \302\240577.68 ( \302\240-8.46%)\n"
- "> > Slave walltime (stddev) \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\2409.89 ( \302\240+0.00%) \302\240 \302\240 \302\240 \302\2403.63 ( -57.47%)\n"
- "> > Slave major faults \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 28401.75 ( \302\240+0.00%) \302\240 \302\24014656.75 ( -48.39%)\n"
- "> > Slave major faults (stddev) \302\240 \302\240 \302\240 \302\240 2629.97 ( \302\240+0.00%) \302\240 \302\240 1911.81 ( -27.30%)\n"
- "> > Slave reclaim \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\24065400.62 ( \302\240+0.00%) \302\240 \302\240 1479.62 ( -97.74%)\n"
- "> > Slave reclaim (stddev) \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 11623.02 ( \302\240+0.00%) \302\240 \302\240 1482.13 ( -87.24%)\n"
- "> > Slave scan \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 9050047.88 ( \302\240+0.00%) \302\240 \302\24095968.25 ( -98.94%)\n"
- "> > Slave scan (stddev) \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\2401912786.94 ( \302\240+0.00%) \302\240 \302\24093390.71 ( -95.12%)\n"
- "> > Slave kswapd reclaim \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240327894.50 ( \302\240+0.00%) \302\240 227099.88 ( -30.74%)\n"
- "> > Slave kswapd reclaim (stddev) \302\240 \302\240 \302\24022289.43 ( \302\240+0.00%) \302\240 \302\24016113.14 ( -27.71%)\n"
- "> > Slave kswapd scan \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 34987335.75 ( \302\240+0.00%) \302\2401362367.12 ( -96.11%)\n"
- "> > Slave kswapd scan (stddev) \302\240 \302\240 \302\240 2523642.98 ( \302\240+0.00%) \302\240 156754.74 ( -93.79%)\n"
+ "> >                                     600M-280M-vanilla      600M-280M-patched\n"
+ "> > Master walltime (s)                  595.13 (  +0.00%)      553.19 (  -7.04%)\n"
+ "> > Master walltime (stddev)               8.31 (  +0.00%)        2.57 ( -61.64%)\n"
+ "> > Master major faults                 3729.75 (  +0.00%)      783.25 ( -78.98%)\n"
+ "> > Master major faults (stddev)         258.79 (  +0.00%)      226.68 ( -12.36%)\n"
+ "> > Master reclaim                       705.00 (  +0.00%)       29.50 ( -95.68%)\n"
+ "> > Master reclaim (stddev)              232.87 (  +0.00%)       44.72 ( -80.45%)\n"
+ "> > Master scan                          714.88 (  +0.00%)       30.00 ( -95.67%)\n"
+ "> > Master scan (stddev)                 237.44 (  +0.00%)       45.39 ( -80.54%)\n"
+ "> > Master kswapd reclaim                114.75 (  +0.00%)       50.00 ( -55.94%)\n"
+ "> > Master kswapd reclaim (stddev)       128.51 (  +0.00%)        9.45 ( -91.93%)\n"
+ "> > Master kswapd scan                   115.75 (  +0.00%)       50.00 ( -56.32%)\n"
+ "> > Master kswapd scan (stddev)          130.31 (  +0.00%)        9.45 ( -92.04%)\n"
+ "> > Slave walltime (s)                   631.18 (  +0.00%)      577.68 (  -8.46%)\n"
+ "> > Slave walltime (stddev)                9.89 (  +0.00%)        3.63 ( -57.47%)\n"
+ "> > Slave major faults                 28401.75 (  +0.00%)    14656.75 ( -48.39%)\n"
+ "> > Slave major faults (stddev)         2629.97 (  +0.00%)     1911.81 ( -27.30%)\n"
+ "> > Slave reclaim                      65400.62 (  +0.00%)     1479.62 ( -97.74%)\n"
+ "> > Slave reclaim (stddev)             11623.02 (  +0.00%)     1482.13 ( -87.24%)\n"
+ "> > Slave scan                       9050047.88 (  +0.00%)    95968.25 ( -98.94%)\n"
+ "> > Slave scan (stddev)              1912786.94 (  +0.00%)    93390.71 ( -95.12%)\n"
+ "> > Slave kswapd reclaim              327894.50 (  +0.00%)   227099.88 ( -30.74%)\n"
+ "> > Slave kswapd reclaim (stddev)      22289.43 (  +0.00%)    16113.14 ( -27.71%)\n"
+ "> > Slave kswapd scan               34987335.75 (  +0.00%)  1362367.12 ( -96.11%)\n"
+ "> > Slave kswapd scan (stddev)       2523642.98 (  +0.00%)   156754.74 ( -93.79%)\n"
  "> >\n"
  "> > Here, the available memory is limited to 320 MB, the machine is\n"
- "> > overcommitted by 280 MB. \302\240The soft limit of the master is 300 MB, that\n"
+ "> > overcommitted by 280 MB.  The soft limit of the master is 300 MB, that\n"
  "> > of the slave merely 20 MB.\n"
  "> >\n"
  "> > Looking at the slave job first, it is much better off with the patched\n"
  "> > kernel: direct reclaim is almost gone, kswapd reclaim is decreased by\n"
- "> > a third. \302\240The result is much fewer major faults taken, which in turn\n"
+ "> > a third.  The result is much fewer major faults taken, which in turn\n"
  "> > lets the job finish quicker.\n"
  "> \n"
  "> What's the setting of the hard limit here? Is the direct reclaim\n"
@@ -174,7 +173,7 @@
  "\n"
  "> > It would be a zero-sum game if the improvement happened at the cost of\n"
  "> > the master but looking at the numbers, even the master performs better\n"
- "> > with the patched kernel. \302\240In fact, the master job is almost unaffected\n"
+ "> > with the patched kernel.  In fact, the master job is almost unaffected\n"
  "> > on the patched kernel compared to the control case.\n"
  "> \n"
  "> It makes sense since the master job get less affected by the patch\n"
@@ -190,21 +189,21 @@
  "\n"
  "Uhm,\n"
  "\n"
- "> > Slave reclaim \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\24065400.62 ( \302\240+0.00%) \302\240 \302\240 1479.62 ( -97.74%)\n"
- "> > Slave reclaim (stddev) \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 11623.02 ( \302\240+0.00%) \302\240 \302\240 1482.13 ( -87.24%)\n"
- "> > Slave scan \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 9050047.88 ( \302\240+0.00%) \302\240 \302\24095968.25 ( -98.94%)\n"
- "> > Slave scan (stddev) \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\2401912786.94 ( \302\240+0.00%) \302\240 \302\24093390.71 ( -95.12%)\n"
- "> > Slave kswapd reclaim \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240327894.50 ( \302\240+0.00%) \302\240 227099.88 ( -30.74%)\n"
- "> > Slave kswapd reclaim (stddev) \302\240 \302\240 \302\24022289.43 ( \302\240+0.00%) \302\240 \302\24016113.14 ( -27.71%)\n"
- "> > Slave kswapd scan \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 34987335.75 ( \302\240+0.00%) \302\2401362367.12 ( -96.11%)\n"
- "> > Slave kswapd scan (stddev) \302\240 \302\240 \302\240 2523642.98 ( \302\240+0.00%) \302\240 156754.74 ( -93.79%)\n"
+ "> > Slave reclaim                      65400.62 (  +0.00%)     1479.62 ( -97.74%)\n"
+ "> > Slave reclaim (stddev)             11623.02 (  +0.00%)     1482.13 ( -87.24%)\n"
+ "> > Slave scan                       9050047.88 (  +0.00%)    95968.25 ( -98.94%)\n"
+ "> > Slave scan (stddev)              1912786.94 (  +0.00%)    93390.71 ( -95.12%)\n"
+ "> > Slave kswapd reclaim              327894.50 (  +0.00%)   227099.88 ( -30.74%)\n"
+ "> > Slave kswapd reclaim (stddev)      22289.43 (  +0.00%)    16113.14 ( -27.71%)\n"
+ "> > Slave kswapd scan               34987335.75 (  +0.00%)  1362367.12 ( -96.11%)\n"
+ "> > Slave kswapd scan (stddev)       2523642.98 (  +0.00%)   156754.74 ( -93.79%)\n"
  "\n"
  "Direct reclaim _shrunk_ by 98%, kswapd reclaim by 31%.\n"
  "\n"
  "> > This is an odd phenomenon, as the patch does not directly change how\n"
- "> > the master is reclaimed. \302\240An explanation for this is that the severe\n"
+ "> > the master is reclaimed.  An explanation for this is that the severe\n"
  "> > overreclaim of the slave in the unpatched kernel results in the master\n"
- "> > growing bigger than in the patched case. \302\240Combining the fact that\n"
+ "> > growing bigger than in the patched case.  Combining the fact that\n"
  "> > memcgs are scanned according to their size with the increased refault\n"
  "> > rate of the overreclaimed slave triggering global reclaim more often\n"
  "> > means that overall pressure on the master job is higher in the\n"
@@ -228,9 +227,9 @@
  "this, the unpatched one does not.\n"
  "\n"
  "> > @@ -121,6 +121,7 @@ struct zone_reclaim_stat *mem_cgroup_get_reclaim_stat(struct mem_cgroup *memcg,\n"
- "> > \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240struct zone *zone);\n"
- "> > \302\240struct zone_reclaim_stat*\n"
- "> > \302\240mem_cgroup_get_reclaim_stat_from_page(struct page *page);\n"
+ "> >                                                      struct zone *zone);\n"
+ "> >  struct zone_reclaim_stat*\n"
+ "> >  mem_cgroup_get_reclaim_stat_from_page(struct page *page);\n"
  "> > +bool mem_cgroup_over_softlimit(struct mem_cgroup *, struct mem_cgroup *);\n"
  "> \n"
  "> Maybe something like \"mem_cgroup_over_soft_limit()\" ?\n"
@@ -238,18 +237,18 @@
  "Probably more consistent, yeah.  Will do.\n"
  "\n"
  "> > @@ -343,7 +314,6 @@ static bool move_file(void)\n"
- "> > \302\240* limit reclaim to prevent infinite loops, if they ever occur.\n"
- "> > \302\240*/\n"
- "> > \302\240#define \302\240 \302\240 \302\240 \302\240MEM_CGROUP_MAX_RECLAIM_LOOPS \302\240 \302\240 \302\240 \302\240 \302\240 \302\240(100)\n"
- "> > -#define \302\240 \302\240 \302\240 \302\240MEM_CGROUP_MAX_SOFT_LIMIT_RECLAIM_LOOPS (2)\n"
+ "> >  * limit reclaim to prevent infinite loops, if they ever occur.\n"
+ "> >  */\n"
+ "> >  #define        MEM_CGROUP_MAX_RECLAIM_LOOPS            (100)\n"
+ "> > -#define        MEM_CGROUP_MAX_SOFT_LIMIT_RECLAIM_LOOPS (2)\n"
  "> \n"
  "> You might need to remove the comment above as well.\n"
  "\n"
  "Oops, will fix.\n"
  "\n"
  "> > @@ -1318,6 +1123,36 @@ static unsigned long mem_cgroup_margin(struct mem_cgroup *memcg)\n"
- "> > \302\240 \302\240 \302\240 \302\240return margin >> PAGE_SHIFT;\n"
- "> > \302\240}\n"
+ "> >        return margin >> PAGE_SHIFT;\n"
+ "> >  }\n"
  "> >\n"
  "> > +/**\n"
  "> > + * mem_cgroup_over_softlimit\n"
@@ -261,23 +260,23 @@
  "> > + * @root.\n"
  "> > + */\n"
  "> > +bool mem_cgroup_over_softlimit(struct mem_cgroup *root,\n"
- "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240struct mem_cgroup *memcg)\n"
+ "> > +                              struct mem_cgroup *memcg)\n"
  "> > +{\n"
- "> > + \302\240 \302\240 \302\240 if (mem_cgroup_disabled())\n"
- "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 return false;\n"
+ "> > +       if (mem_cgroup_disabled())\n"
+ "> > +               return false;\n"
  "> > +\n"
- "> > + \302\240 \302\240 \302\240 if (!root)\n"
- "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 root = root_mem_cgroup;\n"
+ "> > +       if (!root)\n"
+ "> > +               root = root_mem_cgroup;\n"
  "> > +\n"
- "> > + \302\240 \302\240 \302\240 for (; memcg; memcg = parent_mem_cgroup(memcg)) {\n"
- "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 /* root_mem_cgroup does not have a soft limit */\n"
- "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 if (memcg == root_mem_cgroup)\n"
- "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n"
- "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 if (res_counter_soft_limit_excess(&memcg->res))\n"
- "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 return true;\n"
- "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 if (memcg == root)\n"
- "> > + \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 \302\240 break;\n"
- "> > + \302\240 \302\240 \302\240 }\n"
+ "> > +       for (; memcg; memcg = parent_mem_cgroup(memcg)) {\n"
+ "> > +               /* root_mem_cgroup does not have a soft limit */\n"
+ "> > +               if (memcg == root_mem_cgroup)\n"
+ "> > +                       break;\n"
+ "> > +               if (res_counter_soft_limit_excess(&memcg->res))\n"
+ "> > +                       return true;\n"
+ "> > +               if (memcg == root)\n"
+ "> > +                       break;\n"
+ "> > +       }\n"
  "> \n"
  "> Here it adds pressure on a cgroup if one of its parents exceeds soft\n"
  "> limit, although the cgroup itself is under soft limit. It does change\n"
@@ -336,6 +335,13 @@
  "           -> A2 (soft limit 10G, usage 12G)\n"
  "\t-> B (hard limit 20G, soft limit 10G, usage 16G)\n"
  "\n"
- only A2 and B would experience higher pressure upon global pressure.
+ "only A2 and B would experience higher pressure upon global pressure.\n"
+ "\n"
+ "--\n"
+ "To unsubscribe, send a message with 'unsubscribe linux-mm' in\n"
+ "the body to majordomo@kvack.org.  For more info on Linux MM,\n"
+ "see: http://www.linux-mm.org/ .\n"
+ "Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/\n"
+ "Don't email: <a href=mailto:\"dont@kvack.org\"> email@kvack.org </a>"
 
-354a357191a2608876bf29e5a5d369c46e3c08ced9da46fbd26e4bb8b6894633
+beefcaeed9ac826c8c8ddb961787e7f626d10932cd37f8120b05b89d930ee5ed

diff --git a/a/1.txt b/N2/1.txt
index 8ee7f45..0870478 100644
--- a/a/1.txt
+++ b/N2/1.txt
@@ -1,5 +1,5 @@
 On Wed, Jan 11, 2012 at 01:42:31PM -0800, Ying Han wrote:
-> On Tue, Jan 10, 2012 at 7:02 AM, Johannes Weiner <hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org> wrote:
+> On Tue, Jan 10, 2012 at 7:02 AM, Johannes Weiner <hannes@cmpxchg.org> wrote:
 > > Right now, memcg soft limits are implemented by having a sorted tree
 > > of memcgs that are in excess of their limits.  Under global memory
 > > pressure, kswapd first reclaims from the biggest excessor and then
diff --git a/a/content_digest b/N2/content_digest
index 071aadf..75cd2d5 100644
--- a/a/content_digest
+++ b/N2/content_digest
@@ -1,22 +1,21 @@
  "ref\01326207772-16762-1-git-send-email-hannes@cmpxchg.org\0"
  "ref\01326207772-16762-3-git-send-email-hannes@cmpxchg.org\0"
  "ref\0CALWz4izwNBN_qcSsqg-qYw-Esc9vBL3=4cv3Wsg1jf6001_fWQ@mail.gmail.com\0"
- "ref\0CALWz4izwNBN_qcSsqg-qYw-Esc9vBL3=4cv3Wsg1jf6001_fWQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org\0"
- "From\0Johannes Weiner <hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org>\0"
+ "From\0Johannes Weiner <hannes@cmpxchg.org>\0"
  "Subject\0Re: [patch 2/2] mm: memcg: hierarchical soft limit reclaim\0"
  "Date\0Thu, 12 Jan 2012 09:59:04 +0100\0"
- "To\0Ying Han <yinghan-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>\0"
- "Cc\0Andrew Morton <akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>"
-  Michal Hocko <mhocko-AlSwsSmVLrQ@public.gmane.org>
-  KAMEZAWA Hiroyuki <kamezawa.hiroyu-+CUm20s59erQFUHtdCDX3A@public.gmane.org>
-  Balbir Singh <bsingharora-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
-  cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
-  linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org
- " linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org\0"
+ "To\0Ying Han <yinghan@google.com>\0"
+ "Cc\0Andrew Morton <akpm@linux-foundation.org>"
+  Michal Hocko <mhocko@suse.cz>
+  KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
+  Balbir Singh <bsingharora@gmail.com>
+  cgroups@vger.kernel.org
+  linux-mm@kvack.org
+ " linux-kernel@vger.kernel.org\0"
  "\00:1\0"
  "b\0"
  "On Wed, Jan 11, 2012 at 01:42:31PM -0800, Ying Han wrote:\n"
- "> On Tue, Jan 10, 2012 at 7:02 AM, Johannes Weiner <hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org> wrote:\n"
+ "> On Tue, Jan 10, 2012 at 7:02 AM, Johannes Weiner <hannes@cmpxchg.org> wrote:\n"
  "> > Right now, memcg soft limits are implemented by having a sorted tree\n"
  "> > of memcgs that are in excess of their limits. \302\240Under global memory\n"
  "> > pressure, kswapd first reclaims from the biggest excessor and then\n"
@@ -338,4 +337,4 @@
  "\n"
  only A2 and B would experience higher pressure upon global pressure.
 
-354a357191a2608876bf29e5a5d369c46e3c08ced9da46fbd26e4bb8b6894633
+c7ccc516fb58755214621f50785cc83a3bedd064f6519f3f3b5fc9d9326ac890

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.