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.