Received: by 10.213.65.68 with SMTP id h4csp473838imn; Tue, 27 Mar 2018 03:02:08 -0700 (PDT) X-Google-Smtp-Source: AG47ELu3cAeur8JDfdlb7PkOMQh6lqWPsADaUCoUQrankZ2jjib2T8WNqPlG9JtZcYWS4PdMV21P X-Received: by 10.101.67.13 with SMTP id j13mr15800446pgq.432.1522144928238; Tue, 27 Mar 2018 03:02:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522144928; cv=none; d=google.com; s=arc-20160816; b=CZSXhwixSZiMm4Py1RNaQdUdH+m0DDTNUXYgp50QFERFBwBO5Dj8XaaFtsZam03WIU QqSh839jQ/R7sM3NSOl+M8tKfK0/JRTGqDKtNSOf/Z0Gf35O6JlH4VJQytC5US7t8sCu s41hxzGks+QpOS53T8xbvxvdKQZoDJmnmuwGsnZnxHnEehcuIh5G22AeU4W6G80UIdxx P567T6QVpnOKiK4tvagQTyvS76ht19wsJtYKv6U9iddsLAkp4gTv49hXX1MzG36DfIUn DsmrB8zlgd2sRpZMX+k9HLcjdkkYi/jl08u8RzG36EIX2bwyZ/UzrQdCEDWmZjtTWjvD nTPg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-disposition :mime-version:references:message-id:subject:cc:to:from:date :dkim-signature:arc-authentication-results; bh=vDoSlrWFnoGE6H471jTmCt2LjkGRsrzWFcw95QFonRA=; b=ZqaUEHnoJdcepM7Apa1xTMOfLuPKYRgxmwAibWrZVmn594ENwEguIOSuejhkcKoSIA sHLGJjGnqIKYwWPhWZjSajjFZHxfXQps1JwY5pkfee5UoQ1x8ybsNhDLyuBVTUqZONfU NY/rcefyZBcQKMzkFWvZVA3vijSa6IJVHzli0x2Hn1/QT235c5S59Yp86amqavNZz0Nb rpTqV35nef+SfFSlWJnw92n+lWOz1q24vtK/4xZu7S+mZCkZ+i9ZCYGFhOHn/lp5Wcxj jRXS4Rto4H2yAoLvG7iuE4Ai7qzi1xOu7c5E571gZjDOKiiwmnctqjCKFsF61B1rVfie nUxw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=B4LsuhDR; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m77si717509pfk.56.2018.03.27.03.01.53; Tue, 27 Mar 2018 03:02:08 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=B4LsuhDR; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752016AbeC0KAy (ORCPT + 99 others); Tue, 27 Mar 2018 06:00:54 -0400 Received: from mail-lf0-f65.google.com ([209.85.215.65]:46423 "EHLO mail-lf0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750944AbeC0KAw (ORCPT ); Tue, 27 Mar 2018 06:00:52 -0400 Received: by mail-lf0-f65.google.com with SMTP id j68-v6so32391097lfg.13 for ; Tue, 27 Mar 2018 03:00:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=vDoSlrWFnoGE6H471jTmCt2LjkGRsrzWFcw95QFonRA=; b=B4LsuhDR8LTwOes/pdCC+6f03fYbyROCEchjH202rhq3ZxPqdGppZ7UyUxC4+vgr0S 52DTtVuKlfsDSxaE0mNZkNXGsYHSfNEl31PRaUP5UK+ZHZX+wLfmAx3ugNt9GZB/lGlC NtG1qQSy7E0mU6H81izzE6jYcVI7wiHptVPX5+eYSj40zToShQqRixDMtSzf5KZIgAP4 0o+JIDV8wG0kb9R0D34FfhfooVU9qiV3JOTZp7yDSP32isFG277SZOsv6EDjwG/5ecdn EPGyITSV2v3pkTlSIcQ83454YKygf9pRBveQyoRxqkqVkT+ltsGwxuepkCE8kS0YS8OP tuLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=vDoSlrWFnoGE6H471jTmCt2LjkGRsrzWFcw95QFonRA=; b=VXt+NDSCP2/jArYomfVQ2wdMkdxMMACuElloiiD0XdLDwelVJroPGhMkXhi6Fb9SUx upbVNlW+pM72MsfOgPkr+H2o62vkgXHw2gBRrzgCqsAu/aDAjm06hBnDBBDTUpbYQWlf VCa6elihFJmtTrssZCdyQ4ktGYxwMDQmpoI2/EMdmAfJa34uEOf8r8bWs1Mr5ZzsxqI6 1hatDcZVpRS1AkBQ2+4wrijtcAFxwN1fzjObq7E1bIok6RdSw1HGMxhDJbY11Tfjc4qK W/7f8IY5K71sUgRNaf7SRWp6Iz+S0IoVJDMkX7MgAKJyyI4Y7A0uCvq7genWRIYFMKJD FEhg== X-Gm-Message-State: AElRT7HnkXCXj9uYgpZBDIXbsodCWVG1Bz896KqPv8TUIptnwT1/blUP JqxoWKSarv/KX81xwQkMgOw= X-Received: by 2002:a19:101a:: with SMTP id f26-v6mr17963051lfi.42.1522144850830; Tue, 27 Mar 2018 03:00:50 -0700 (PDT) Received: from esperanza ([185.6.245.156]) by smtp.gmail.com with ESMTPSA id a30sm153946ljd.80.2018.03.27.03.00.49 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 27 Mar 2018 03:00:50 -0700 (PDT) Date: Tue, 27 Mar 2018 13:00:47 +0300 From: Vladimir Davydov To: Kirill Tkhai Cc: viro@zeniv.linux.org.uk, hannes@cmpxchg.org, mhocko@kernel.org, akpm@linux-foundation.org, tglx@linutronix.de, pombredanne@nexb.com, stummala@codeaurora.org, gregkh@linuxfoundation.org, sfr@canb.auug.org.au, guro@fb.com, mka@chromium.org, penguin-kernel@I-love.SAKURA.ne.jp, chris@chris-wilson.co.uk, longman@redhat.com, minchan@kernel.org, hillf.zj@alibaba-inc.com, ying.huang@intel.com, mgorman@techsingularity.net, shakeelb@google.com, jbacik@fb.com, linux@roeck-us.net, linux-kernel@vger.kernel.org, linux-mm@kvack.org, willy@infradead.org Subject: Re: [PATCH 03/10] mm: Assign memcg-aware shrinkers bitmap to memcg Message-ID: <20180327100047.gj4gtmt3necmtpzw@esperanza> References: <152163840790.21546.980703278415599202.stgit@localhost.localdomain> <152163850081.21546.6969747084834474733.stgit@localhost.localdomain> <20180324192521.my7akysvj7wtudan@esperanza> <09663190-12dd-4353-668d-f4fc2f27c2d7@virtuozzo.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <09663190-12dd-4353-668d-f4fc2f27c2d7@virtuozzo.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Mar 26, 2018 at 06:29:05PM +0300, Kirill Tkhai wrote: > >> @@ -182,6 +187,9 @@ struct mem_cgroup { > >> unsigned long low; > >> unsigned long high; > >> > >> + /* Bitmap of shrinker ids suitable to call for this memcg */ > >> + struct shrinkers_map __rcu *shrinkers_map; > >> + > > > > We keep all per-node data in mem_cgroup_per_node struct. I think this > > bitmap should be defined there as well. > > But them we'll have to have struct rcu_head for every node to free the map > via rcu. This is the only reason I did that. But if you think it's not a problem, > I'll agree with you. I think it's OK. It'd be consistent with how list_lru handles list_lru_memcg reallocations. > >> @@ -4487,6 +4490,8 @@ static void mem_cgroup_css_offline(struct cgroup_subsys_state *css) > >> struct mem_cgroup *memcg = mem_cgroup_from_css(css); > >> struct mem_cgroup_event *event, *tmp; > >> > >> + free_shrinker_maps(memcg); > >> + > > > > AFAIU this can race with shrink_slab accessing the map, resulting in > > use-after-free. IMO it would be safer to free the bitmap from css_free. > > But doesn't shrink_slab() iterate only online memcg? Well, yes, shrink_slab() bails out if the memcg is offline, but I suspect there might be a race condition between shrink_slab and css_offline when shrink_slab calls shrinkers for an offline cgroup. > > >> /* > >> * Unregister events and notify userspace. > >> * Notify userspace about cgroup removing only after rmdir of cgroup > >> diff --git a/mm/vmscan.c b/mm/vmscan.c > >> index 97ce4f342fab..9d1df5d90eca 100644 > >> --- a/mm/vmscan.c > >> +++ b/mm/vmscan.c > >> @@ -165,6 +165,10 @@ static DECLARE_RWSEM(bitmap_rwsem); > >> static int bitmap_id_start; > >> static int bitmap_nr_ids; > >> static struct shrinker **mcg_shrinkers; > >> +struct shrinkers_map *__rcu root_shrinkers_map; > > > > Why do you need root_shrinkers_map? AFAIR the root memory cgroup doesn't > > have kernel memory accounting enabled. > But we can charge the corresponding lru and iterate it over global reclaim, > don't we? Yes, I guess you're right. But do we need to care about it? Would it be OK if we iterated over all shrinkers for the root cgroup? Dunno... Anyway, please try to handle the root cgroup consistently with other cgroups. I mean, nothing like this root_shrinkers_map should exist. It should be either a part of root_mem_cgroup or we should iterate over all shrinkers for the root cgroup. > > struct list_lru_node { > ... > /* global list, used for the root cgroup in cgroup aware lrus */ > struct list_lru_one lru; > ... > };