From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754845AbdLTKVS (ORCPT ); Wed, 20 Dec 2017 05:21:18 -0500 Received: from mail-eopbgr40114.outbound.protection.outlook.com ([40.107.4.114]:10597 "EHLO EUR03-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754363AbdLTKVN (ORCPT ); Wed, 20 Dec 2017 05:21:13 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=aryabinin@virtuozzo.com; From: Andrey Ryabinin To: Andrew Morton Cc: Johannes Weiner , Michal Hocko , Vladimir Davydov , cgroups@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Andrey Ryabinin Subject: [PATCH 1/2] mm/memcg: try harder to decrease [memory,memsw].limit_in_bytes Date: Wed, 20 Dec 2017 13:24:28 +0300 Message-Id: <20171220102429.31601-1-aryabinin@virtuozzo.com> X-Mailer: git-send-email 2.13.6 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HE1PR0202CA0032.eurprd02.prod.outlook.com (2603:10a6:3:e4::18) To HE1PR08MB2828.eurprd08.prod.outlook.com (2603:10a6:7:2e::27) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ffdce141-920f-421c-8a0d-08d5479363c8 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(5600026)(4604075)(4534020)(4602075)(7168020)(4627115)(201703031133081)(201702281549075)(2017052603307)(7153060);SRVR:HE1PR08MB2828; X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB2828;3:INo7Jw3QVmKHuyfd/VTgnh27YRJekhWOw5Dks0GR6JVb61XDMsp3nfDtj2z+wiRzMN/VvfqHrU8pdY2xA4MTtqCWd7vCgI7Rc+zSPw/Z5wC4y0rfwNlO1prtpoDuwtHhBFDEYe9iS+veDTNAo0SP/8FOE3QYba7h9045BW9lf+uKiH5T+uSgPQOSHUOqekz3vIDY2vfMdmXIWEoevNXVj6itT3EremtqanD1w3rh3Q3TJtfDhZLF149SWfDHtWc9;25:o67WVBO0Kn9zN2Qr6zQ/VLStiSA/RTKnXZsfDq3pxQQucaU+32o78apYnF3lmGVLRgPLfcfMxNOBM28UO0ex+OYn4av0gwpErHJpWZSbwQLfmp/8dvu7UbMuBCer/Nn9cfwgctzT/z2wbVH4NKZRRk8ZijR7QsfdDM2eNTb/uhFcuoPeygp0FCsON8jcV7EAdGJRGZor3QgD81Z3QUt1AcB+8NRG72cIl500ZfxGkibj7EuFJeJNH+Nv5dC239pY+gv8cjbd2F56d2Qx/YtmiJK5rOESQGsEvcAO1QoRYTV5P00fj3VKTpp+0gTVhu0i0/nbcUKYke6iX5q2+rsMXmTdvAw57Vbqc3lQAYVKjfo=;31:N4EINvNqP1K9nZTD8nkQkPalewyI/swxg+ZS6gXWHq5fl0irqaJTgW2nmg9iMtjKeYTIk/2C10sWY3RsnoxbJNGhHQrwf8XBn/unwxGpt9ZqFj18DNIcW2bd3LfTWUs7QcMIQiN71IkM1rGfj5dBLgfvyXMK4pwRm+sjAWBAVHftm9ENcE8I2dgB/UL6kFsA+56CSzWQFvOgbfmJKpTCSbITR4Fm03ecK+5bSw+dPpU= X-MS-TrafficTypeDiagnostic: HE1PR08MB2828: X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB2828;20:EFLao3fZKF0OTHiOPRjpT89+rQjZ70gR80Sx757I8QFwGPRHrnb8ssPLs5djII5MbWSSDrQqOt3b2IlUvmBIMFgpPg+KkoCxCPMDThgF4E8bJxzBIzBwac5dMGxwyarBT0xXvXZsoj6/y4cBroA+36Mk8dnkttCz8kPjDAi1MPyWqzSqoGwO9BMDU56P3hb0vGubfvOmJmFml5fH51IMtOpvsrMCKbuaQfyjojeL/4DQDxCvL40tx3jMvM2kKVr7N9dIpHTKKR6SWfzlE/KsABqvSR5Q26R0Uf9liCYk1har04YsN7RjLweFrsw2zK7d1j4UgnE+fpvY/HS/HEUil+TRWWiDc7BWjNfHk5BtAPAtByA50ckC3iwfrGVHohCMGSwQz/cJg7V6QT7fyoI3LUegFRomw18tLMjI2ip//n8=;4:mxEgyKNwFwF8UFdRFlgUooF8g4qtbGlYahuP4inksTaMWgiYHycMB/hSto1vP2moOc2mPxmUp4p53B5JcrQjOSAmfMaKx+YdsnKrjKB0EuDumox3ghHzKRv4b0bvSsXXMdsaiB94E+boqLkM034PJMKbeycviPR/YQs4yLmD1GnjjCCLNdsoq583iwMdCcja4yezgRwefyKbZ6fvBbeG6svDhztoLvHmccMGveCJZ936kLBn1QohpEZwTp7l6/znftapmzPcJ7fS2qKsmrL6pg== 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)(3002001)(10201501046)(3231023)(93006095)(93001095)(6041268)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123562045)(20161123564045)(20161123560045)(6072148)(201708071742011);SRVR:HE1PR08MB2828;BCL:0;PCL:0;RULEID:(100000803101)(100110400095);SRVR:HE1PR08MB2828; X-Forefront-PRVS: 0527DFA348 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6069001)(346002)(39380400002)(39850400004)(376002)(396003)(366004)(189003)(199004)(6486002)(55236004)(81166006)(8676002)(76506005)(386003)(25786009)(69596002)(6506007)(6666003)(316002)(39060400002)(68736007)(6116002)(305945005)(36756003)(51416003)(50226002)(97736004)(6916009)(81156014)(107886003)(3846002)(52116002)(4326008)(59450400001)(8936002)(1076002)(2906002)(16586007)(16526018)(54906003)(50466002)(53416004)(47776003)(48376002)(53936002)(105586002)(478600001)(86362001)(5660300001)(106356001)(6512007)(66066001)(7736002)(34023003)(148693002)(142933001);DIR:OUT;SFP:1102;SCL:1;SRVR:HE1PR08MB2828;H:localhost.sw.ru;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;HE1PR08MB2828;23:Nj9hYlSfF8HSMMvQiqgyJDmpK+7sSzxfIB7PAdv84?= =?us-ascii?Q?jgdSIUTpt9qT/Bnq5b0Fgbd54VxWULRiumUmC4dZytl2fTr+DD2jEo+tlPon?= =?us-ascii?Q?qC+qtBxoQPv0bRgCP/5LD1jBE0XtlIJnZ4HXuE7D/kBwQu6cQ75ofN7ic1sB?= =?us-ascii?Q?odJjWk74kTZYqK6yd2y9LwiewpMoVv/bDHCoZdGh6DxTUj5cLuFMP5Qe5gdb?= =?us-ascii?Q?Rt/n4zovTYEm3rYLFbeOrpSeMaUvMA7HdVKgdSUDoDtGuLj8R/MX4LRJbifT?= =?us-ascii?Q?WTfteuHWHYeW0+zql8h6pnZ/jaETYe6UCYNdWA6wLwj7NDFLQlKgYrebwP2u?= =?us-ascii?Q?lSv3vYkxz6tZjpr3x4aQAs3ylmWn+tlgR6rPszPBKZFGDI6t30ZgnaaK1CnR?= =?us-ascii?Q?zyF4kzzqT9qeRpfu4kcYY7eVdH8du7WpfZxVJr4BBjgkbgUVx+AuF23KaNZI?= =?us-ascii?Q?bKMMhfRJzW8SnCOE4pQxEe2GhUw5SfuMY28a53qkH0cKJnbzQluz85GNtej3?= =?us-ascii?Q?9PbGcYZTx7WAsCQexwPdkHLTOzQ5n0CQR2A8hntRmfxXuUyG7mvGaBHmp4m7?= =?us-ascii?Q?GYuiletfH7CkA1+dignNDbTwCWscwUvWlkWPc/PEJKb6SmyX8/igVA1aKt2L?= =?us-ascii?Q?Ar0WbI6KAxqkLBbUseVc/2Tu3Mx72MUHhMIdFx+3bPzk0biaTkkkOm1k0uKw?= =?us-ascii?Q?XQC93BsrXlLKwuUqDqPoAf4gKglBC4poqpT7fA0vKdiuf5frso9ywaDXXu6u?= =?us-ascii?Q?//QK3cWRuL9ZDGME8w6guKMKG5qWpYG2vNWlcIP09PTJXYT7+srROWDmfCvH?= =?us-ascii?Q?pjaJEnYemHjilZkhvi9hMrhQs1yqlo9fCaA7DqooK5vPf2dEzksgkB7N/sq7?= =?us-ascii?Q?Wwb0HUGrXgR65MeFNO7LvqpF46h6CTdF+C0WU+5h/COwet0r5d+Ak+WutQcH?= =?us-ascii?Q?p7ow9O/C6WwoXx8edlXZwLV4qq97esQrUng/qi7Wa7fY6LUsDN2FRCCSM9SI?= =?us-ascii?Q?J/bw/Ja7PKoQj1RuUdlmo2e8B7tbUopE1QAidhMk77QbfU8u+NbQiud9QhDA?= =?us-ascii?Q?13xayurE3RSWrYcADnE6cuXbobXeYOdBpj7x+NqC6ZG0ZXXkygx1Qy0MXI/Z?= =?us-ascii?Q?cD/cl/O5jRJtwNgqCsh1OPKcGOngfmpX4fQUEAeECSohSJhWy+6U45Wkc7on?= =?us-ascii?Q?MmO25uWghlSXZu/JqaLroFR9jWiKd9RXPiNwQVPlRg2o4afVc39bQ9XDtI++?= =?us-ascii?Q?8JYnAEDT3oI1v9r6QJnd8laZ2+W9fXN2k1MKNQgBzCUlcQ/kBk9vBLaBfy+d?= =?us-ascii?Q?Qcd6s7nzq5PkClytT2Rzx8=3D?= X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB2828;6:XUw1Ikn7L1w0W/CDd4OOHFfx9te2LkOFDlhml8bE3MxY4MbtJwtD/p3/u5hGXn0i2PV11zcZ+ZenZ/iZnl7gWnowLnMkrLezFMQlYO2tZA87S3q9QHCP9CE2YmexnQKpc1xcuDr5hINUdTijBsI1zSpPP7CMUhy3aVlRzOO9KXk6gEAkEr88DWY/I3geDT30SXga8wXtUC1f3/cBJTGeAQk49fSK3Nac76++d1JAxEVo0B0IIi8tQo9+KhoEuExTmBiBBuMWqKppbK5ia9GcAdO8NSeNEUk/3reKZq8nIVdk7WFWzZUmzHl1fXmmii8xJjCEaUPj0TGVbDI29f2VFqwLjeALIAHnTLeOMtau6q4=;5:O4MkDhXwsJ7hwQhPjvqgfgqwyiN9X91upM10OYg+tNmZVfncfz8CnExFdo6ujrWmQLILCjiB1uNiV+yujNbCqqLQ8g/VLM3WJWQ9PMOry1ijTmljkMiyby+OMMpQ1ty4Ci4WN2fSDzbIXgdXaIxr2+f6AY41HQuSgeJHeLJS9BY=;24:P1f2nBsX7WtJxsMZ8EPqrmBCRqUI8LVCVyBhcROw/1Keb/BgtQcDb/9eIyYToxHn8kM0JzTre+LA/KoAkg2fQiPgAUGeJVEQP2B0awgsY50=;7:ktFBYHlIQn92CL+095ie7mGL3mInRTmyKyOoazeaoIcH+TwuYeETaUWVFVWwFHEtVF8me9e6IYwCqf/JkMwqKk3wQjjqPRZobnPeMHygx6bzTTFQLT7T2KHFCQi83t7l+oT18Y/Wu6OjQNAtVNknTeBvGUpzd83Pd7afIya4bPu1l5Gq7RcDUuoiNhycsknjbXYEDuwPYxEYAGISRFaIXzSaG1dAIVy1OZsjD/9l3gWYT1Ib098rbwaCTty3Qog+ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;HE1PR08MB2828;20:8SLhU9OnahU5KM4yAoJi9X738im4ogLQHGKXJipWQ1ymCUh57NZaHZsrnKBZ7EftSWiJ5gCM+9vCFCffGzGauAfW4tU4oij3U0UmmHGa3T14j3RAMzW8znSg7wY9zAxthkygdrp0H2XXM+570KCywg6Rcb+U0/639KssRYCV954= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Dec 2017 10:21:09.9832 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ffdce141-920f-421c-8a0d-08d5479363c8 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR08MB2828 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org mem_cgroup_resize_[memsw]_limit() tries to free only 32 (SWAP_CLUSTER_MAX) pages on each iteration. This makes practically impossible to decrease limit of memory cgroup. Tasks could easily allocate back 32 pages, so we can't reduce memory usage, and once retry_count reaches zero we return -EBUSY. It's easy to reproduce the problem by running the following commands: mkdir /sys/fs/cgroup/memory/test echo $$ >> /sys/fs/cgroup/memory/test/tasks cat big_file > /dev/null & sleep 1 && echo $((100*1024*1024)) > /sys/fs/cgroup/memory/test/memory.limit_in_bytes -bash: echo: write error: Device or resource busy Instead of trying to free small amount of pages, it's much more reasonable to free 'usage - limit' pages. Signed-off-by: Andrey Ryabinin --- mm/memcontrol.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index f40b5ad3f959..09ee052cf684 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2476,7 +2476,7 @@ static int mem_cgroup_resize_limit(struct mem_cgroup *memcg, retry_count = MEM_CGROUP_RECLAIM_RETRIES * mem_cgroup_count_children(memcg); - oldusage = page_counter_read(&memcg->memory); + curusage = oldusage = page_counter_read(&memcg->memory); do { if (signal_pending(current)) { @@ -2498,7 +2498,8 @@ static int mem_cgroup_resize_limit(struct mem_cgroup *memcg, if (!ret) break; - try_to_free_mem_cgroup_pages(memcg, 1, GFP_KERNEL, true); + try_to_free_mem_cgroup_pages(memcg, curusage - limit, + GFP_KERNEL, true); curusage = page_counter_read(&memcg->memory); /* Usage is reduced ? */ @@ -2527,7 +2528,7 @@ static int mem_cgroup_resize_memsw_limit(struct mem_cgroup *memcg, retry_count = MEM_CGROUP_RECLAIM_RETRIES * mem_cgroup_count_children(memcg); - oldusage = page_counter_read(&memcg->memsw); + curusage = oldusage = page_counter_read(&memcg->memsw); do { if (signal_pending(current)) { @@ -2549,7 +2550,8 @@ static int mem_cgroup_resize_memsw_limit(struct mem_cgroup *memcg, if (!ret) break; - try_to_free_mem_cgroup_pages(memcg, 1, GFP_KERNEL, false); + try_to_free_mem_cgroup_pages(memcg, curusage - limit, + GFP_KERNEL, false); curusage = page_counter_read(&memcg->memsw); /* Usage is reduced ? */ -- 2.13.6 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrey Ryabinin Subject: [PATCH 1/2] mm/memcg: try harder to decrease [memory,memsw].limit_in_bytes Date: Wed, 20 Dec 2017 13:24:28 +0300 Message-ID: <20171220102429.31601-1-aryabinin@virtuozzo.com> Mime-Version: 1.0 Return-path: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=yVxv6Ti+3Vn0bTN7NUY29HAQGeCGS2XQ3DPIE0XpZJI=; b=MyyADJuzUn93ayQ2ExQHjZy352Lt9ojzPcmo0/mQcyG2adCzbUVXjLTvomneJeb8IB9VsOa9caslMxve3EUhYAS1IZbE9kX/LkxL0yAFDWcRwTGudqtUOdI4qEngMBWbOu6v3f50c5tx2IgcyKwrslvxTMjwK4BtXCUlT1n2D/4= Sender: owner-linux-mm@kvack.org List-ID: Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Andrew Morton Cc: Johannes Weiner , Michal Hocko , Vladimir Davydov , cgroups@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Andrey Ryabinin mem_cgroup_resize_[memsw]_limit() tries to free only 32 (SWAP_CLUSTER_MAX) pages on each iteration. This makes practically impossible to decrease limit of memory cgroup. Tasks could easily allocate back 32 pages, so we can't reduce memory usage, and once retry_count reaches zero we return -EBUSY. It's easy to reproduce the problem by running the following commands: mkdir /sys/fs/cgroup/memory/test echo $$ >> /sys/fs/cgroup/memory/test/tasks cat big_file > /dev/null & sleep 1 && echo $((100*1024*1024)) > /sys/fs/cgroup/memory/test/memory.limit_in_bytes -bash: echo: write error: Device or resource busy Instead of trying to free small amount of pages, it's much more reasonable to free 'usage - limit' pages. Signed-off-by: Andrey Ryabinin --- mm/memcontrol.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/mm/memcontrol.c b/mm/memcontrol.c index f40b5ad3f959..09ee052cf684 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -2476,7 +2476,7 @@ static int mem_cgroup_resize_limit(struct mem_cgroup *memcg, retry_count = MEM_CGROUP_RECLAIM_RETRIES * mem_cgroup_count_children(memcg); - oldusage = page_counter_read(&memcg->memory); + curusage = oldusage = page_counter_read(&memcg->memory); do { if (signal_pending(current)) { @@ -2498,7 +2498,8 @@ static int mem_cgroup_resize_limit(struct mem_cgroup *memcg, if (!ret) break; - try_to_free_mem_cgroup_pages(memcg, 1, GFP_KERNEL, true); + try_to_free_mem_cgroup_pages(memcg, curusage - limit, + GFP_KERNEL, true); curusage = page_counter_read(&memcg->memory); /* Usage is reduced ? */ @@ -2527,7 +2528,7 @@ static int mem_cgroup_resize_memsw_limit(struct mem_cgroup *memcg, retry_count = MEM_CGROUP_RECLAIM_RETRIES * mem_cgroup_count_children(memcg); - oldusage = page_counter_read(&memcg->memsw); + curusage = oldusage = page_counter_read(&memcg->memsw); do { if (signal_pending(current)) { @@ -2549,7 +2550,8 @@ static int mem_cgroup_resize_memsw_limit(struct mem_cgroup *memcg, if (!ret) break; - try_to_free_mem_cgroup_pages(memcg, 1, GFP_KERNEL, false); + try_to_free_mem_cgroup_pages(memcg, curusage - limit, + GFP_KERNEL, false); curusage = page_counter_read(&memcg->memsw); /* Usage is reduced ? */ -- 2.13.6 -- 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/ . Don't email: email@kvack.org