From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.6 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 54F45C3B186 for ; Tue, 11 Feb 2020 06:20:28 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 1AA9A20714 for ; Tue, 11 Feb 2020 06:20:28 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="DSS0geKj" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1AA9A20714 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id A20226B028D; Tue, 11 Feb 2020 01:20:27 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 9D0AE6B028E; Tue, 11 Feb 2020 01:20:27 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8BEE46B028F; Tue, 11 Feb 2020 01:20:27 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0105.hostedemail.com [216.40.44.105]) by kanga.kvack.org (Postfix) with ESMTP id 6D9336B028D for ; Tue, 11 Feb 2020 01:20:27 -0500 (EST) Received: from smtpin16.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id 4206D180AD804 for ; Tue, 11 Feb 2020 06:20:27 +0000 (UTC) X-FDA: 76476846894.16.son63_3e6a6e5c2922 X-HE-Tag: son63_3e6a6e5c2922 X-Filterd-Recvd-Size: 5010 Received: from mail-pf1-f194.google.com (mail-pf1-f194.google.com [209.85.210.194]) by imf20.hostedemail.com (Postfix) with ESMTP for ; Tue, 11 Feb 2020 06:20:26 +0000 (UTC) Received: by mail-pf1-f194.google.com with SMTP id i6so4976957pfc.1 for ; Mon, 10 Feb 2020 22:20:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=460wxLtmI3ryLyEB72gt4NohfkSkdpIrWM1CKB3DHkA=; b=DSS0geKjBvmmPD4/kQwA8is8vXGeoq3qm8aAQKoYT340gjoRm+GbH0B6oaUzmWq0Tl zdAQjI0Sfa4yclVNnvBJolDNAlcpXIYuXFBJYYbcoYvndL5gmmoZjak8fzn2iOdnAiZJ D9FtGyOfilb7hubOaxzyMmpOVe1zuiIudY55+dR0WmxfX0dqilmw1zhmRqCQUxW5/4xo /xGGFzwCA3dq/IvGC2c0i/Ahqg7sJNNyX+keJjR3Q4/hVuBsgt9UEZj6xBRmZAgXE4Lj ebbyjtfbft3xxZ8lFaiXZLybmgSAB4aliromL7TwYm9Q3zD0109vDdqpx80O7X7PAc8G oN3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=460wxLtmI3ryLyEB72gt4NohfkSkdpIrWM1CKB3DHkA=; b=XxBMqGp/5UfxB01nrER/THZY9vpZS4ZjlV8IkJrUmnv7AZy0iLJYop/RS1HyvuonCK 9LGJdDxS3UTlyjkXjDBWJoSaX1irnr4Uy/1Y0Yl6Il7toLfn9RgryEkcF48U/j1Cszu0 2ZG2WrxMW9OcwJKTqNuCMfYLEccwDXP6wpIinjCVQwkQjM3qNWjYZ2pHQoKCYW0ir6eY XyoQoQ/5UP7H5jFLHOb+mgKSuAdzKDWKgLZhB1NZpvH33D8ZYTeIo2x4P/7aIngN9gQQ L9rMSBRkUeLAomo3UT85+Htg3B5veJLGHvTB4AGimVnUxQ5i+gDcKFjDC4lUfH6rWI1p T49w== X-Gm-Message-State: APjAAAWkYTtc60QOiwJDG7Efmt3kHSezSpIKxE8bp28dB9keeCxvbL3n M66Ua3tBkMLqEdAH0R6+GRw= X-Google-Smtp-Source: APXvYqyblQHupVZhudVVjhgl7nOM31gRBTNsRCyR9TAXoqAUtSeTf2m8XEotm90O3yBPeMp5oe/jDw== X-Received: by 2002:a63:7457:: with SMTP id e23mr5451770pgn.386.1581402025451; Mon, 10 Feb 2020 22:20:25 -0800 (PST) Received: from localhost.localdomain ([114.206.198.176]) by smtp.gmail.com with ESMTPSA id x197sm2578696pfc.1.2020.02.10.22.20.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 10 Feb 2020 22:20:25 -0800 (PST) From: js1304@gmail.com X-Google-Original-From: iamjoonsoo.kim@lge.com To: Andrew Morton Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, Johannes Weiner , Michal Hocko , Hugh Dickins , Minchan Kim , Vlastimil Babka , Mel Gorman , kernel-team@lge.com, Joonsoo Kim Subject: [PATCH 5/9] mm/workingset: use the node counter if memcg is the root memcg Date: Tue, 11 Feb 2020 15:19:49 +0900 Message-Id: <1581401993-20041-6-git-send-email-iamjoonsoo.kim@lge.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1581401993-20041-1-git-send-email-iamjoonsoo.kim@lge.com> References: <1581401993-20041-1-git-send-email-iamjoonsoo.kim@lge.com> X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: From: Joonsoo Kim In the following patch, workingset detection is implemented for the swap cache. Swap cache's node is usually allocated by kswapd and it isn't charged by kmemcg since it is from the kernel thread. So the swap cache's shadow node is managed by the node list of the list_lru rather than the memcg specific one. If counting the shadow node on the root memcg happens to reclaim the slab object, the shadow node count returns the number of the shadow node on the node list of the list_lru since root memcg has the kmem_cache_id, -1. However, the size of pages on the LRU is calculated by using the specific memcg, so mismatch happens. This causes the number of shadow node not to be increased to the enough size and, therefore, workingset detection cannot work correctly. This patch fixes this bug by checking if the memcg is the root memcg or not. If it is the root memcg, instead of using the memcg-specific LRU, the system-wide LRU is used to calculate proper size of the shadow node so that the number of the shadow node can grow as expected. Signed-off-by: Joonsoo Kim --- mm/workingset.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mm/workingset.c b/mm/workingset.c index d04f70a..636aafc 100644 --- a/mm/workingset.c +++ b/mm/workingset.c @@ -468,7 +468,13 @@ static unsigned long count_shadow_nodes(struct shrinker *shrinker, * PAGE_SIZE / xa_nodes / node_entries * 8 / PAGE_SIZE */ #ifdef CONFIG_MEMCG - if (sc->memcg) { + /* + * Kernel allocation on root memcg isn't regarded as allocation of + * specific memcg. So, if sc->memcg is the root memcg, we need to + * use the count for the node rather than one for the specific + * memcg. + */ + if (sc->memcg && !mem_cgroup_is_root(sc->memcg)) { struct lruvec *lruvec; int i; -- 2.7.4