From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Shi Subject: [PATCH v6 08/10] mm/lru: debug checking for page memcg moving and lock_page_memcg Date: Mon, 16 Dec 2019 17:26:24 +0800 Message-ID: <1576488386-32544-9-git-send-email-alex.shi@linux.alibaba.com> References: <1576488386-32544-1-git-send-email-alex.shi@linux.alibaba.com> Return-path: In-Reply-To: <1576488386-32544-1-git-send-email-alex.shi@linux.alibaba.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, akpm@linux-foundation.org, mgorman@techsingularity.net, tj@kernel.org, hughd@google.com, khlebnikov@yandex-team.ru, daniel.m.jordan@oracle.com, yang.shi@linux.alibaba.com, willy@infradead.org, shakeelb@google.com, hannes@cmpxchg.org Cc: Alex Shi , Michal Hocko , Vladimir Davydov The extra irq disable/enable and BUG_ON checking costs 5% readtwice performance on a 2 socket * 26 cores * HT box. Need to remove them later? Signed-off-by: Alex Shi Cc: Johannes Weiner Cc: Michal Hocko Cc: Vladimir Davydov Cc: Andrew Morton Cc: cgroups@vger.kernel.org Cc: linux-mm@kvack.org Cc: linux-kernel@vger.kernel.org --- mm/compaction.c | 4 ++++ mm/memcontrol.c | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/mm/compaction.c b/mm/compaction.c index 8c0a2da217d8..f47820355b66 100644 --- a/mm/compaction.c +++ b/mm/compaction.c @@ -971,6 +971,10 @@ static bool too_many_isolated(pg_data_t *pgdat) compact_lock_irqsave(&lruvec->lru_lock, &flags, cc); locked_lruvec = lruvec; +#ifdef CONFIG_MEMCG + if (!mem_cgroup_disabled()) + VM_BUG_ON_PAGE(lruvec_memcg(lruvec) != page->mem_cgroup, page); +#endif /* Try get exclusive access under lock */ if (!skip_updated) { skip_updated = true; diff --git a/mm/memcontrol.c b/mm/memcontrol.c index f5d41ccd30e0..138f298b694f 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -1247,6 +1247,10 @@ struct lruvec *lock_page_lruvec_irq(struct page *page) lruvec = mem_cgroup_lruvec(memcg, page_pgdat(page)); spin_lock_irq(&lruvec->lru_lock); +#ifdef CONFIG_MEMCG + if (!mem_cgroup_disabled()) + VM_BUG_ON_PAGE(lruvec_memcg(lruvec) != page->mem_cgroup, page); +#endif return lruvec; } @@ -1259,6 +1263,10 @@ struct lruvec *lock_page_lruvec_irqsave(struct page *page, unsigned long *flags) lruvec = mem_cgroup_lruvec(memcg, page_pgdat(page)); spin_lock_irqsave(&lruvec->lru_lock, *flags); +#ifdef CONFIG_MEMCG + if (!mem_cgroup_disabled()) + VM_BUG_ON_PAGE(lruvec_memcg(lruvec) != page->mem_cgroup, page); +#endif return lruvec; } @@ -2014,6 +2022,11 @@ struct mem_cgroup *lock_page_memcg(struct page *page) if (unlikely(!memcg)) return NULL; + /* temporary lockdep checking, need remove */ + local_irq_save(flags); + might_lock(&memcg->move_lock); + local_irq_restore(flags); + if (atomic_read(&memcg->moving_account) <= 0) return memcg; -- 1.8.3.1