From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751483AbcFUKcx (ORCPT ); Tue, 21 Jun 2016 06:32:53 -0400 Received: from mail-db3on0130.outbound.protection.outlook.com ([157.55.234.130]:51264 "EHLO emea01-db3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751088AbcFUKcu (ORCPT ); Tue, 21 Jun 2016 06:32:50 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=VDavydov@virtuozzo.com; Date: Tue, 21 Jun 2016 12:54:33 +0300 From: Vladimir Davydov To: Andy Lutomirski CC: , , , Borislav Petkov , Nadav Amit , Kees Cook , Brian Gerst , "kernel-hardening@lists.openwall.com" , Linus Torvalds , Josh Poimboeuf , "Jann Horn" , Heiko Carstens , "Johannes Weiner" , Michal Hocko , , Andrew Morton Subject: Re: [PATCH v3 05/13] mm: Fix memcg stack accounting for sub-page stacks Message-ID: <20160621095433.GB15970@esperanza> References: <6bacdd1005517bef4c6f6a4154bd7d1d4f4371f3.1466466093.git.luto@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <6bacdd1005517bef4c6f6a4154bd7d1d4f4371f3.1466466093.git.luto@kernel.org> X-Originating-IP: [195.214.232.10] X-ClientProxiedBy: HE1PR03CA0005.eurprd03.prod.outlook.com (10.163.170.143) To DB6PR0801MB1624.eurprd08.prod.outlook.com (10.169.226.12) X-MS-Office365-Filtering-Correlation-Id: 787b01f1-0615-44b5-61a1-08d399ba11fc X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1624;2:mZjQyQNyMubb94QNhIK4vJkpYbza5FfmHvZMFdpe+FPAs2WoTDYYDP45WlLlOnLCNN6lxgVueGYIF5ueTCN/hvrHyjVZL0YqQ+B+oVptKRX24FFo0Ikc6jxAzgBHSFou6jK91eFjR9+pV04JVSXag2fA+EwF3kLIf4yNC8zFyB4FM2nqCH15ReL7B7kiJjGG;3:SOTgXn1n3iAsSm9aQcB0++AQa1ilXXHxgdmvvbaQLOkA0qWt9mxVK+0+hoNaGTBQ3CrfpBNBvaeQMvJRqatNYxgY6yPKUpcRGX511oplMhRSgMgQ+wR4dQcfCOalU9Fl X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB1624; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1624;25:MnT6b60yvSedesJpTEGKV13zRDTV6yw9vSOqLQeZGSB2MQUmYWlkhNpHL7dji1KvAigLGL0R3dTdJAvk/P7/9zWYLuLTnsDvQxeyP4gkWg+hY2+idXSYAGqapEY9hdHZnhIy9ez6+5pj2jVTZQzAB9tvEoMWxIc2fs0/PVnIm0oj5K+hqDnqY8g2qfCh9Gyurm43s4tSgzdTs0Ob7lQNm87kBCDFlHPNfOIvGWYZkSgarPh2fpalmKPnru9cUJ9uzekBD7JX7Qenaqpz4BgWTOVPdnHsDivE0o0ArbUJVrJ01PeVrbnfLxpw0EMvtBeZlzTPgPiKtMLBI3qIxKhUng0rV8TDzubyylzSm9EICmRgd4JR3Z/nkZaHRM9dl+ace7HTOqKF4cnOTzdYjShgd0jGGGrhETX7xIRabpf76yATMtUT/3qVEBtMJX/9qC/77QGde3ZRZyZRyQlIzC4uJUWsejrf6J+hciNLJaGtD/bUr/flx3hjCkrWAcVs1fQbacDLuU301fZ7WA89ATM4j1f8W3hXQqTDzoYZiBbqE2IMTr0+uON4KLsuviqjgykb9Zdv144Jk+2SK7KYPl31TuxY+k1B7q4/yNiSPMENMUNUIotj/tpHgF3+aee1srWl0BGVkaFcDg9rLjqaaNYYMkwmJEcF66Ok2YxJA1TChWlS4gWDxYPN9d33oG5Cwx8/zIBnQfE2EkqsegpPJsnTu5Cr2GhgwXH4sJl84GY65oY= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(788757137089); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040130)(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046)(6041072)(6043046);SRVR:DB6PR0801MB1624;BCL:0;PCL:0;RULEID:;SRVR:DB6PR0801MB1624; X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1624;4:zzXFy19i7R20P5dKXLsaeEGL2hx3w7xFIGFHKj/S4ID3PH9Kf2Q/LlUMTqmbdABFyjJMHoDB/CCnrvUKkoL3SN4xJTUpnXnmev8M7BaYhSzDCIZtZrYAzoPlBap/UgVrvjZSdGqC8To6A7e6kn9yjs2Y3vQuGuCg7aKDqBwoZtxOWLGVXzwcv6pG9uyz9aKisc7vMvdc33+oaPAHSwgmzxEwxICAVIFumzYJDXKL3q3G8SQpVGJaAXFfODJVirZSWJzz74ZGVBImI+sMMCvRncEFJOw1pwpiBeTUMSTFBN2pLWAPU1xs/jNtMzh1NcqEek8ZAByYL/CXtN8MV1bpBgiU1rLR8YqXp3+DFSD5Ihr2mamshf4Qz/o4izuftzeiujVP2o8hVvHn+4VBvoEbAARQue+GIU0KFCy1k+TN/1r3/aO0eUAeYiot+erzPaM277o419mHPlpKVx7TTkfRSw== X-Forefront-PRVS: 098076C36C X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(7916002)(189002)(24454002)(199003)(46406003)(101416001)(4326007)(54356999)(66066001)(47776003)(2906002)(50466002)(68736007)(50986999)(76176999)(9686002)(81166006)(33716001)(8676002)(42186005)(110136002)(189998001)(77096005)(81156014)(97756001)(15650500001)(106356001)(80792005)(6116002)(3846002)(92566002)(23726003)(105586002)(586003)(33656002)(19580395003)(86362001)(2950100001)(19580405001)(1076002)(7846002)(7736002)(97736004);DIR:OUT;SFP:1102;SCL:1;SRVR:DB6PR0801MB1624;H:esperanza;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;DB6PR0801MB1624;23:CYpwh3o8hFKWCgk4AV7Z74fczMDSc0qB4/Ee4Gy?= =?us-ascii?Q?UmmWCaxdUlKvDxo3bgXV6t4rwLwqO+C2Ddq1iFXLvUjFFSzHBNOm/EfAqUEo?= =?us-ascii?Q?eOQNY/vKc3cS3P9pYavl5MvptX5u+OfBkkgcsD9bDK5D37B2EDZutjgpf2kg?= =?us-ascii?Q?lzJTWq5VA7p25GqVRd5dgbRur/lnzijBhtfuAm7XEoqNdfc9GKX+R+mJ5FD6?= =?us-ascii?Q?fnl/3LmQ6awBlAkSOqvU2fQt98wCDtFfUZEjEzfBSbFJGcrG8ky0EGkFUCcM?= =?us-ascii?Q?uGAoh24HT3RB9U9kdQIgPmMA312fWfNB5xm7nL83a62i2MRa18/BPPAtYrHT?= =?us-ascii?Q?GbCeTb+MHTdHHq4H8TgTHJROU0s1/QbCw/xx7I/sCTNkrLkpk+JwFQY5Y0K3?= =?us-ascii?Q?A8M0RcgIr+JvUs2wURaHX1fUrwuuyw1Ih/DqwPET0aFM2alOFrAaWnspdKHG?= =?us-ascii?Q?nu/5vz7dzIIHOAEzGHbAvf2ULopXNOQ4sbNZqffzUWf5hpgpU37z6yATE82Y?= =?us-ascii?Q?eOuWqqwxDHKcP9wvLTJMAR9mvR2EBtodulHCFAu79Zl44VkpXf19C1khgHZh?= =?us-ascii?Q?EXAvOReVTKfUQRy1CeFG6K0PYS20u2KhAOwV2SO20W/QDXcNu7zcBXf+I6BG?= =?us-ascii?Q?MojQNSfmlg+h2LFfznqA7aUQB1pV+OZmi3jqJoomvFErZREq2nHPcn863WzP?= =?us-ascii?Q?vfBmxkXhvIj/uPL5KwONvUsFiYFJlw71aROiwG2v8Pq+UXbHSpmX66zuRQL4?= =?us-ascii?Q?LgcGY+MgEoTVcyzPDY7d/kJkt7vaWPtzqrjlsuO2Wb8//0vt17jNrr8igKQG?= =?us-ascii?Q?GE3GFfdLRHjX6puvqjDIGHXqflHBKiCbljAreo1zRDDgRUFN7KO8dPene7N0?= =?us-ascii?Q?5Fw8oUPbTg9sMgQBpTUIrVAu6EIlYU36+omnfGSdP9o9iChfKizSvSssEl1e?= =?us-ascii?Q?Ew5U0Q8abTU94v+H3Vck442eJaMzdQ9MK2aZaEiUYstJvIO7htn0fReZZU5h?= =?us-ascii?Q?KK0+ZZNE4+VHvkgg8V+pTj2qmfXcvy83sE1o/kkBWuoX0qk8c/vIKnXch8ny?= =?us-ascii?Q?0dckANY9JvcP6pM27jFexF7EfKdXGpjjnYlESqYQ1vOp2Kvexua5ZScw6H4K?= =?us-ascii?Q?eIeXCv8J7stc=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1624;6:hP546a8Emw7HG2rBvLrxIBuNACGXxsWDtCLi9vvAoC+NXc9NcxN5jmU9yWNsHuR/gtTS+iftHHEtN3lmE9l/hIYXzME7443MOhOrllmFJoW/e84C6dgl2nks+xwOjbhLsjpekKR0EoLN4yPdiZHhzSZjDKloyC89/jhVsXCSJA7ilTqaA1zJESRPj3hgOrKJctBVJM/ggVQOOGAz71pHoysVVVRkpzud8R2XZo6djsVu2fWHv58QLXPJR2lB+fSN1I1afzAIJK1lMLBp+9ery1O20mXhBRwNJ5Hb7TrHIQtoHnX1dWAj+DAgCNj3r1U2;5:DKdRlZAAkA/63ZIAJICXZH2L7An9aXfrazcCLwU6gyKHgDBm1iJwWJNGt9UlCcNKo2QtDIJP1j6j+xzWslJdJ+Fg9GpvQAgShMYvxKlukaIyehGA2jg1VXbTTYl+hB+JSl4paKGVEmKzEoouh6hGqA==;24:trI8dxrdXI0QQH+pLQ8lmyD5+4hoO6qOBPQg17EYWQ34VsLgnHatukuPNpORTHOTV6lNNUPEcIle2t5VxABhHkAt53a+kXuJPMuAeqV2kNU=;7:TIZdTPy+sx3xYK/mQBD6C529cGJOODtbtq/RIgDuNK3bTrGmnAvkzocrEz9ECdvNz4PmbT6rK7l/oZNjeRcym5/y6IDjL0c1uIZUN0w/cr0j4nX099MBLllAfYS1hLrwVcPtH80p6FphCpzPw872hRS7fd4yjypZlkSY8/xJ6KsFYSW7GqdWXFkMJWcZon40T/96zi748JgREixakMnJXy7kF8LUjU52S6l6EPmiXWZTowdRygcaOSpFfqGnB39W SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB6PR0801MB1624;20:puxDC1L/NRJKE1BEYjMTi+SfqO3RgE47P3GLpSMmV8lPavj0d2l49agVov4OQCPSt0U8+h2Hx/dd/0898hNCOJAV9JH75crhzObDbz1ZZOGul66UafVr66A0KWWesNrOhk6igr1hRRBwTWQBgitm9F1EzTGyknjswu5I7LKNJQk= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jun 2016 09:54:40.8920 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1624 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jun 20, 2016 at 04:43:35PM -0700, Andy Lutomirski wrote: > We should account for stacks regardless of stack size, and we need > to account in sub-page units if THREAD_SIZE < PAGE_SIZE. Change the > units to kilobytes and Move it into account_kernel_stack(). > > Fixes: 12580e4b54ba8 ("mm: memcontrol: report kernel stack usage in cgroup2 memory.stat") > Cc: Vladimir Davydov > Cc: Johannes Weiner > Cc: Michal Hocko > Cc: linux-mm@kvack.org > Signed-off-by: Andy Lutomirski Reviewed-by: Vladimir Davydov This patch is going to have a minor conflict with recent changes in mmotm, where {alloc,free}_kmem_pages were dropped, The conflict should be trivial to resolve - we only need to replace {alloc,free}_kmem_pages with {alloc,free}_pages in this patch. > --- > include/linux/memcontrol.h | 2 +- > kernel/fork.c | 15 ++++++--------- > mm/memcontrol.c | 2 +- > 3 files changed, 8 insertions(+), 11 deletions(-) > > diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h > index a805474df4ab..3b653b86bb8f 100644 > --- a/include/linux/memcontrol.h > +++ b/include/linux/memcontrol.h > @@ -52,7 +52,7 @@ enum mem_cgroup_stat_index { > MEM_CGROUP_STAT_SWAP, /* # of pages, swapped out */ > MEM_CGROUP_STAT_NSTATS, > /* default hierarchy stats */ > - MEMCG_KERNEL_STACK = MEM_CGROUP_STAT_NSTATS, > + MEMCG_KERNEL_STACK_KB = MEM_CGROUP_STAT_NSTATS, > MEMCG_SLAB_RECLAIMABLE, > MEMCG_SLAB_UNRECLAIMABLE, > MEMCG_SOCK, > diff --git a/kernel/fork.c b/kernel/fork.c > index be7f006af727..ff3c41c2ba96 100644 > --- a/kernel/fork.c > +++ b/kernel/fork.c > @@ -165,20 +165,12 @@ static struct thread_info *alloc_thread_info_node(struct task_struct *tsk, > struct page *page = alloc_kmem_pages_node(node, THREADINFO_GFP, > THREAD_SIZE_ORDER); > > - if (page) > - memcg_kmem_update_page_stat(page, MEMCG_KERNEL_STACK, > - 1 << THREAD_SIZE_ORDER); > - > return page ? page_address(page) : NULL; > } > > static inline void free_thread_info(struct thread_info *ti) > { > - struct page *page = virt_to_page(ti); > - > - memcg_kmem_update_page_stat(page, MEMCG_KERNEL_STACK, > - -(1 << THREAD_SIZE_ORDER)); > - __free_kmem_pages(page, THREAD_SIZE_ORDER); > + free_kmem_pages((unsigned long)ti, THREAD_SIZE_ORDER); > } > # else > static struct kmem_cache *thread_info_cache; > @@ -227,6 +219,11 @@ static void account_kernel_stack(struct thread_info *ti, int account) > > mod_zone_page_state(zone, NR_KERNEL_STACK_KB, > THREAD_SIZE / 1024 * account); > + > + /* All stack pages belong to the same memcg. */ > + memcg_kmem_update_page_stat( > + virt_to_page(ti), MEMCG_KERNEL_STACK_KB, > + account * (THREAD_SIZE / 1024)); > } > > void free_task(struct task_struct *tsk) > diff --git a/mm/memcontrol.c b/mm/memcontrol.c > index 75e74408cc8f..8e13a2419dad 100644 > --- a/mm/memcontrol.c > +++ b/mm/memcontrol.c > @@ -5133,7 +5133,7 @@ static int memory_stat_show(struct seq_file *m, void *v) > seq_printf(m, "file %llu\n", > (u64)stat[MEM_CGROUP_STAT_CACHE] * PAGE_SIZE); > seq_printf(m, "kernel_stack %llu\n", > - (u64)stat[MEMCG_KERNEL_STACK] * PAGE_SIZE); > + (u64)stat[MEMCG_KERNEL_STACK_KB] * 1024); > seq_printf(m, "slab %llu\n", > (u64)(stat[MEMCG_SLAB_RECLAIMABLE] + > stat[MEMCG_SLAB_UNRECLAIMABLE]) * PAGE_SIZE);