From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933915AbeAKMVc (ORCPT + 1 other); Thu, 11 Jan 2018 07:21:32 -0500 Received: from mail-ve1eur01on0117.outbound.protection.outlook.com ([104.47.1.117]:20928 "EHLO EUR01-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932786AbeAKMV3 (ORCPT ); Thu, 11 Jan 2018 07:21:29 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=aryabinin@virtuozzo.com; Subject: Re: [PATCH v4] mm/memcg: try harder to decrease [memory,memsw].limit_in_bytes To: Michal Hocko Cc: Andrew Morton , Johannes Weiner , Vladimir Davydov , cgroups@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Shakeel Butt References: <20180109152622.31ca558acb0cc25a1b14f38c@linux-foundation.org> <20180110124317.28887-1-aryabinin@virtuozzo.com> <20180111104239.GZ1732@dhcp22.suse.cz> From: Andrey Ryabinin Message-ID: <4a8f667d-c2ae-e3df-00fd-edc01afe19e1@virtuozzo.com> Date: Thu, 11 Jan 2018 15:21:33 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 MIME-Version: 1.0 In-Reply-To: <20180111104239.GZ1732@dhcp22.suse.cz> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HE1PR05CA0210.eurprd05.prod.outlook.com (2603:10a6:3:f9::34) To VI1PR08MB2829.eurprd08.prod.outlook.com (2603:10a6:802:19::26) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 3e53943e-6f3f-4710-4781-08d558edd53a X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(4534020)(4602075)(7168020)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307)(7153060)(7193020);SRVR:VI1PR08MB2829; X-Microsoft-Exchange-Diagnostics: 1;VI1PR08MB2829;3:/mp/Nw0su/Ly3zdVNKzkprejkUiunZhao+5COIl5nIt9/ES1jXzUj7iE93L4gLo+OJAx3pilHaj5oHua8GwvmOu1qDBHwscI1LBQsYHkjWgCN3RerW2VGqfdjSdegJ4PD4VWmYg7UuWdG1F5cVDgOrZlbG+nt5IAn32SIMY7dmZVrRBLqBr3yg0s0Sy3A/lAxUr2o6eBvoHKj2/FkIqPP4tw4iSX1wl07VQV14c5J/vcJAj2OhRCvff4Mg3xzYjF;25:piXADJJe8sYOfgoXDWzMt5VWRZe+3/VOcochGEqZSjO9mBsGj3VbEgoYxttkG8saX5ruIjjPmOeUu/UfHXlLqQKOfL4DzIzMcyu1Do33OkSpXtjOo0m1QaMDaUEoA3C+ShLGl3/1OTviQkEzDpewDXYMiY3xXwknEtFj6/a7x9rmtrfJGE9eEijbOnlddGk6ufLcrk7CUS7v4fYYj5ukfPIHCIEfRS7FNO/LfVpoId4oe+iiFyt3k+5bEzkzSjaWD0TZOeNjog5NlICofN7Sh2ufA/nw7zWoOO0QDoW4t3oJx+i9kiofFrL+Czdp8wjVIpTtAR5dntX+MwHf/jdIOA==;31:NxeW29Wgw20q0v2zCXBcgnojLQ3ZdcnTgiXljjmGOqZKYd7cY3JySq1u4j9Q5xvCypAmrezgrvD6JK2jKkbQgDrb1eYBRCFx8etdiXf2i3yNRy0SgBtk1lMvSthAhEl0DcAT04A+3Y9ClLltCymGgSXnuCOQ1LJpeikgJnhfsebQoPMBlBWzhKAArl3TKjA7EksWKkXVq8DImNsMS6yJ3tiULSJUOzsCpdq7HwFdbTs= X-MS-TrafficTypeDiagnostic: VI1PR08MB2829: X-Microsoft-Exchange-Diagnostics: 1;VI1PR08MB2829;20:y0MgKn/+NgdFKrofzcIqzyKigIxa48Tm2tMhYrgQFyNYJVUrUfH/a2oNZltSUJYmsY4AQOUCXZOmGAx43pT8eKELN+2e2dxqcU3pYsIGBZvBcg97LQPUO0zj86xZXXLrv2/0N/EeWtduAVbUptdxZe1gw3pFjlqT3bfk+w+5NaAQSU/6iuzXIdK6FT53karJ55jeNY71ncqpue+ai9kqHHRloLIubuU/16CUw6PokGqmcuxD3cHcGxN6aS9N6PP1rX9fq9Swe2wpdkZE0LYJM+tNYOE9P4nFxo26S7+CuzvUnV5R8a7OeaypDDGWkvKUR0yunYJHFmSjOE3YnM7QqSK7BhVN+23e0D54ci732Q92jeX82WsNPwNiELdZlAu7bV64xU86zF5dkhwSpnaYtcEOhp19bAqbAyq6KCTmQ4E=;4:2+jDguXV7VD7jbCT/azBIWRMnFsjIlu2UREtap6JxOHMG08bDDFTXfJ01wFl8InyAHYJprFbqZiXDcUSplu/15MejxIUUsXjdEgMx5qvqhXFlTGc3uWwWtaJsRFc/uKF+yQG5q/V61ghPTrcpAEB9ZwXjQ7uKuzaHj8zQepUO3P3VwctwKZEbcOLnSDVWexVlJBfb/jNYq0xbzD4TGCFQhlZ/KijTR7wiEnMXAOzTiqZZcT+Co2+LlHSK8MuEPKL1v/+1C/neAD/gKylQXYZ9w== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040470)(2401047)(5005006)(8121501046)(3231023)(944501075)(10201501046)(3002001)(93006095)(93001095)(6041268)(20161123562045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123558120)(6072148)(201708071742011);SRVR:VI1PR08MB2829;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:VI1PR08MB2829; X-Forefront-PRVS: 0549E6FD50 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6049001)(376002)(366004)(396003)(39850400004)(346002)(39380400002)(199004)(189003)(24454002)(377424004)(55674003)(31696002)(54906003)(53546011)(2486003)(23676004)(16576012)(386003)(97736004)(478600001)(305945005)(50466002)(106356001)(7736002)(59450400001)(105586002)(316002)(2906002)(58126008)(86362001)(68736007)(16526018)(64126003)(83506002)(52116002)(76176011)(52146003)(8676002)(47776003)(8936002)(3846002)(6116002)(6666003)(229853002)(81156014)(36756003)(81166006)(65956001)(31686004)(6246003)(65806001)(39060400002)(2950100002)(5660300001)(55236004)(25786009)(77096006)(66066001)(65826007)(6916009)(53936002)(230700001)(6486002)(4326008)(34023003)(148693002)(142933001);DIR:OUT;SFP:1102;SCL:1;SRVR:VI1PR08MB2829;H:[172.16.25.12];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtWSTFQUjA4TUIyODI5OzIzOklPY2d2UCtVQWErSkticWlBVHc4V2lucFR5?= =?utf-8?B?SzVkSFk4c0YzcHRMN3dNQ09od0FzUkZUNncrVmc2d2U2QW5iWnFtYXpabW9q?= =?utf-8?B?V2NuZVN3czJqdk9kbGRyeXdoRm94NzRrdFZmZzk2Vkdaa0dKaTlHOHo1V01M?= =?utf-8?B?aFdnaVNYQ0xwcUZHWjRPNW04dkN1aGV6aVRwUlkvNHBVdUxnTjArTmZzMHhj?= =?utf-8?B?Vnc5RjFtSWZsdVJKbWpZem5qeWJtL0ZzNHp0dVNkanlOU0JaRC9Kc3hIeWlL?= =?utf-8?B?Y2MwQkFlZlJwcW4xNjlQQ05wbjdCeU5hMmFDY3owLzg3K0Q1ek1WMVd3VVg3?= =?utf-8?B?MlpUNkpVMXllMUlSRTd4R25iSE1yVUZkSlpRT1VHbkN1WWh5aFJuWkxTM250?= =?utf-8?B?RFI3dlk0VW1WSGRNWWVuRC9Ed3F2eFF3QUhxdWd0Mk4vMnphQTRTSi93dUtL?= =?utf-8?B?ZWJxODVnTnZSNnNpY2JwUEN0QkVsK1lSWXMveS9MTDJpcDBraG5zSCtiUG54?= =?utf-8?B?V1d6WXVxZy84djRwb2hERDZKbmpPNlYvb1BsdHJad2xxVkVEWkhVK0tDZThq?= =?utf-8?B?T1VQZU1pL3g0QmVmY01xaGFnNzNhY0p6NVdXaHovV0t5Z2lGRWJ0cTM3bDNT?= =?utf-8?B?WXBpTjVXUHc5L1R1RXlNZTU4dWtDai9pZlozK2tQeXJZWEJFVWN6TEsyQ0Qx?= =?utf-8?B?MFllVWFMUDNodmgxTzRHVlpqOFllUmdtUjZNR3h1YUtqN0ZaRUIxbC9BaVpj?= =?utf-8?B?SlZ0eWg4Mm54bVdJbDRtRWhVa29NeWZVeFZ0NXByVmtGTzlkT09Hby9LTGhQ?= =?utf-8?B?Vi93WHpDQ2JOSnR6QlM2UjllUXZETk1YWkR5UkNtRXFSUTE2R0dvbG43WFlB?= =?utf-8?B?ZVRyUEhmWmZ1Z3dOVHJYaGI0Vm8xTk93U3dXbEtmY3dPSXlabVgyV2ZyL0pB?= =?utf-8?B?cHVpR212eURYc081dnN2djFGOC9SYmd3VU1qSDlkVjNFcG0yczZDNXBmZHBx?= =?utf-8?B?bENHYlJPSDRsenB0T0gwQ1Npb2ErUTRjaUx4RU01bjlZc2ErdWpqSzRJZkpR?= =?utf-8?B?dFMrY1F4TEhHRHJRVkZlaDNpM1Z2T2xWUVhtRkFnZGwxN2ZwS09RL1NSVXJy?= =?utf-8?B?b1dBZTRZVDR1ejdJZ0VwRU1XZkJQenBTTGtoSXBWOEkvU3BzR0ZRMUhFaldH?= =?utf-8?B?ODRUVzF4MS9Na0hhRjl5WXhXUm5PT3hwVE9hNHZDemxZYmt4b3pUcWw3Tkk0?= =?utf-8?B?aGdYeUJ1R2NFNjk5RkNGWUZIVE9DK2VPVEhEU2crdHlzdkxUS3NIR2E4RlJj?= =?utf-8?B?d0cvOW85UE1jMFZyVmo3WXZ6Y0VZeHpzSER0WTI3c2lsT01RS2U0NnR3TlU0?= =?utf-8?B?eUxXaElsQkorUHNwblgwU2luVG9OOHJMV0lhTmtibC9LWHo1V2ZoVDVMWEZL?= =?utf-8?B?YURNOFluUTVvbEU4NElyQmdYVmpyMndOQ2RjT2VxUkdaU2tKRlZuTk96T0xM?= =?utf-8?B?T3AzT3ViQkVIcGNkM1hCTFRVVjNuZ25zSmpUUmlrU21DbDVpYWJJeWxITjNp?= =?utf-8?B?UWR1OGVkYTR1bUlORitPLzdsMHRWdnlPOUtGV1RnMXROdURnMXpiVXRZT0FU?= =?utf-8?B?M2hReko1T094b2tjY2poSGR3czFRRmQ4Q2oyclQwemVEUmQ0MUVJVnFEcU1Y?= =?utf-8?B?WGxkeXhsVHhGV2cvTnVNK2xnNGhhbHpJbElqWXFWdkRLRCtSR0wwRFNSQnUx?= =?utf-8?B?VFJheWtSOGdlczM0L29zeE9IYlg1SmNaRldOUUNGWWdySUJDMC92cis0emxH?= =?utf-8?B?azh6anpKN0ZWTERDb3d5SGh1RDE5OStPbi95clJaQm01VHNxRUhEZ0tmQ0Fw?= =?utf-8?B?U0V1WUpmR0ZUZzNVQ3NwbXhZQy9ZNDdSN0ZhWFkzV3pMR2dlbGZYZ3ZCYll1?= =?utf-8?B?TTBrall3eW10YVJMemN6TENPLy9uWWdoYkI2TkFFOVdtZ29XQ3BZY09ZZDJz?= =?utf-8?B?aTlYcldHQ0hRUkpLeWlTSTNvdy9hTUFXQk8ycWdtaTF0QnQ5azFjalJocHc1?= =?utf-8?B?dXZNTkVaL1BCdlF4dGU1RERmMHZGS0pTQytOdmVqbUZXWkxxTmJqOHY3aVZw?= =?utf-8?B?bGc9PQ==?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR08MB2829;6:ZOFT/xfzdlBz9qY08U8yHZTn/DF5b2qRjoM4hEbKtriM6mNQS+0TRg/wo1/C00faIw/6i3B5fnXQy7zoIueJNroWEoYTppJZVQ1ZpEdz67skZXJh5QAxj3Ee6wC2ZDDFvWLei2SUfLemWnqCcLrVOJjXoV88ILIxMTxTiNojGyVZIrmZQVpBZ5qQDJTtIg0BNzRoLS+6FSMY6E8ErSTVBUZQ4mTEBqq9wvS1J2SLG3tv7L6Qp6zSQQY44J7pGz4Fxt1eIKlgiW/dHq6OwZ1wnsGVRCKQ57uqcldX60Hf8dYJqQPZ9matRKNj1aZwS/Be2IaM8vc2nn+QLwVnZ0EOxnHcJQy6Acl645fnJBsFzMA=;5:nQOyoWVDnKFufUk7IQ4Rgria1hiTvnwQxu3ueNwrXGvWtk3EXFaXW8KRVzlMzSkuWoCzU9SOfg/i8m5lWW5vp23M6o7AIZzcLKkNah/f9tLbVjNqpYDZsb5zR6wVmue2sGKK+4Li3cJZum1MIUyNZOep9rN6zp0UTDg/SgHX6zw=;24:ox0xuP53QnLTAXG37Mw9GcdoZ48cCF+PLW3ftFE/2ZzYBvL++y85J25aR7ZXPjKJMkCn3Lsjh0ICmQ8VMX3qDCXdexzxNPzGbgf0sCQ78kI=;7:FUqtMJ2Z7KXAQAFcQuaBfruGpvxN6fYwSlcXbozGnfHU6taTgpy/hZ0bHHCo0hfikq+0E8L3gQhWsG9CZi/w6V68+NgcK9vmcaiSOiaob0xZ/EEsh+1WlySX2tGHuZngo9mClkH7KJAlt+bR8Z9VjUhsHsqa3CslpOQTC1OCJRWsIkvfigMNnRWPJqGr1g9cerqIDgWoMb+gcASZfztaBA7/XBUuywWYKQ93jrz1uVB4rtUdOU1hoi6RGFYWGwh1 SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;VI1PR08MB2829;20:14tTvosWhiFpQbK+T7n7srDP2CsyB5jZHdqYi5qgRQuJ+x2OPPvFGGbFeaTmWa4ltpI2NtEY+NF+h+8+xWeszCmlzQw2Pgi+udGcDwn1EiptiLJ6exZ9bwMmF4+OBYk5VfVPOsl0mF4gggvFwv4Lj7C7DbfVIzFeftOf+67efr0= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Jan 2018 12:21:24.3934 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 3e53943e-6f3f-4710-4781-08d558edd53a X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB2829 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Return-Path: On 01/11/2018 01:42 PM, Michal Hocko wrote: > On Wed 10-01-18 15:43:17, Andrey Ryabinin wrote: > [...] >> @@ -2506,15 +2480,13 @@ static int mem_cgroup_resize_limit(struct mem_cgroup *memcg, >> if (!ret) >> break; >> >> - try_to_free_mem_cgroup_pages(memcg, 1, GFP_KERNEL, !memsw); >> - >> - curusage = page_counter_read(counter); >> - /* Usage is reduced ? */ >> - if (curusage >= oldusage) >> - retry_count--; >> - else >> - oldusage = curusage; >> - } while (retry_count); >> + usage = page_counter_read(counter); >> + if (!try_to_free_mem_cgroup_pages(memcg, usage - limit, >> + GFP_KERNEL, !memsw)) { > > If the usage drops below limit in the meantime then you get underflow > and reclaim the whole memcg. I do not think this is a good idea. This > can also lead to over reclaim. Why don't you simply stick with the > original SWAP_CLUSTER_MAX (aka 1 for try_to_free_mem_cgroup_pages)? > Because, if new limit is gigabytes bellow the current usage, retrying to set new limit after reclaiming only 32 pages seems unreasonable. So, I made this: From: Andrey Ryabinin Subject: mm-memcg-try-harder-to-decrease-limit_in_bytes-fix Protect from overreclaim if usage become lower than limit. Signed-off-by: Andrey Ryabinin --- mm/memcontrol.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 4671ae8a8b1a..6120bb619547 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2455,7 +2455,7 @@ static DEFINE_MUTEX(memcg_limit_mutex); static int mem_cgroup_resize_limit(struct mem_cgroup *memcg, unsigned long limit, bool memsw) { - unsigned long usage; + unsigned long nr_pages; bool enlarge = false; int ret; bool limits_invariant; @@ -2487,8 +2487,8 @@ static int mem_cgroup_resize_limit(struct mem_cgroup *memcg, if (!ret) break; - usage = page_counter_read(counter); - if (!try_to_free_mem_cgroup_pages(memcg, usage - limit, + nr_pages = max_t(long, 1, page_counter_read(counter) - limit); + if (!try_to_free_mem_cgroup_pages(memcg, nr_pages, GFP_KERNEL, !memsw)) { ret = -EBUSY; break; -- 2.13.6