From patchwork Wed Mar 3 15:18:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Muchun Song X-Patchwork-Id: 12113677 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=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,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 7749FC433E0 for ; Wed, 3 Mar 2021 15:20:54 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id CA7A864E7C for ; Wed, 3 Mar 2021 15:20:53 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org CA7A864E7C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=bytedance.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 3F8E28D0173; Wed, 3 Mar 2021 10:20:53 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 3A9098D0157; Wed, 3 Mar 2021 10:20:53 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 223388D0173; Wed, 3 Mar 2021 10:20:53 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0204.hostedemail.com [216.40.44.204]) by kanga.kvack.org (Postfix) with ESMTP id 0246A8D0157 for ; Wed, 3 Mar 2021 10:20:52 -0500 (EST) Received: from smtpin12.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay05.hostedemail.com (Postfix) with ESMTP id A8D271824BB33 for ; Wed, 3 Mar 2021 15:20:52 +0000 (UTC) X-FDA: 77878925544.12.0AB075E Received: from mail-pj1-f45.google.com (mail-pj1-f45.google.com [209.85.216.45]) by imf25.hostedemail.com (Postfix) with ESMTP id 67CC96000135 for ; Wed, 3 Mar 2021 15:20:43 +0000 (UTC) Received: by mail-pj1-f45.google.com with SMTP id s23so4536978pji.1 for ; Wed, 03 Mar 2021 07:20:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=5BvSISNhyiieS6Lt7CkKj6ditEHD5Qh9Vwt8EfVWXaI=; b=AC8g6MSjZGIE4W/r1GP/Q8/kgf2bEobGyNGvPoinV0YoH5VxUL6wEzkIB2LCKPp3J7 OKs01DB71uw8cUyPz21jLqGSmbmJJxfOji3OFTFjbLtrkeTOV0SXsdeP/O5LXkxkaa8P Reag2RY4NIpbC/2NLqOLBRXFXK2/tiU+L0+qcy0ioOd1dsx7ds51NhEfEjrAaDSyjAZQ zMdw70j7x8gHk1OiSHlX2/cu21kDztcmT063t6LJyxwdwIZZH1+HI/66wffOy5a7dOOf 2iPZwnql10jU5gVl+CYoGZ3dFaC2jpLuam4xXNuYN1xr1f60y4uoa8DwxV2X4nBPQQt7 x9ow== 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:mime-version :content-transfer-encoding; bh=5BvSISNhyiieS6Lt7CkKj6ditEHD5Qh9Vwt8EfVWXaI=; b=ZEakr1nY/e7ORNA9e56REl2UwheuvYOkpgjtG4ffWtYwSeJrxApVBp6wSWtCMxBrCd BsBEE+UgFQz39eyeQXFTIAVjg0FfJWQoX24YS3mrXkT4Xkvnx8Dyn3cJruZH75ejl5+2 R3zGdKxrVp0ixjtMHNJuP1W8f6hyWZYCE9lKioJ3ZYpNGHJB/JLjoSvMvXgRdVVL0Hq8 0qy8yZlST8soX7ad/smBNxJSqwXVsaBegpPHXingalWnN+EgFAQuihGJ7+a1o1hyAls1 AnYL0a1cHMKiOXBu2k4bIkaX0p7u9ArMlUgymDJ6mdVru6841FpaIfYqjzdlsprbIDlO EKeQ== X-Gm-Message-State: AOAM5308w/NuLaSakWLIAxJ0F3R30I0V57rP6APY3ekyycrDllpEjpiE RBvIG8iExRBzo/kIwT0Qpum3yA== X-Google-Smtp-Source: ABdhPJxbduSs8tHWr7wI6ECwWf+FCbh9A7S3QvnvVsKmTl3CPDHLjx+5wUEyLPYuHJvhU/W56EzkGA== X-Received: by 2002:a17:902:9783:b029:e5:bfa2:dc24 with SMTP id q3-20020a1709029783b02900e5bfa2dc24mr5109006plp.70.1614784841479; Wed, 03 Mar 2021 07:20:41 -0800 (PST) Received: from localhost.bytedance.net ([139.177.225.227]) by smtp.gmail.com with ESMTPSA id u15sm23848588pfk.128.2021.03.03.07.20.37 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 03 Mar 2021 07:20:41 -0800 (PST) From: Muchun Song To: guro@fb.com, hannes@cmpxchg.org, mhocko@kernel.org, akpm@linux-foundation.org, shakeelb@google.com Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, Muchun Song , Michal Hocko Subject: [PATCH v3] mm: memcontrol: fix kernel stack account Date: Wed, 3 Mar 2021 23:18:43 +0800 Message-Id: <20210303151843.81156-1-songmuchun@bytedance.com> X-Mailer: git-send-email 2.21.0 (Apple Git-122) MIME-Version: 1.0 X-Stat-Signature: jjo1u5pabdm991xywnhdn4mbyf1nsniz X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 67CC96000135 Received-SPF: none (bytedance.com>: No applicable sender policy available) receiver=imf25; identity=mailfrom; envelope-from=""; helo=mail-pj1-f45.google.com; client-ip=209.85.216.45 X-HE-DKIM-Result: pass/pass X-HE-Tag: 1614784843-527335 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: For simplification 991e7673859e ("mm: memcontrol: account kernel stack per node") has changed the per zone vmalloc backed stack pages accounting to per node. By doing that we have lost a certain precision because those pages might live in different NUMA nodes. In the end NR_KERNEL_STACK_KB exported to the userspace might be over estimated on some nodes while underestimated on others. But this is not a real world problem, just a problem found by reading the code. So there is no actual data to showing how much impact it has on users. This doesn't impose any real problem to correctnes of the kernel behavior as the counter is not used for any internal processing but it can cause some confusion to the userspace. Address the problem by accounting each vmalloc backing page to its own node. Signed-off-by: Muchun Song Reviewed-by: Shakeel Butt Acked-by: Michal Hocko Acked-by: Johannes Weiner Acked-by: Roman Gushchin --- Changelog in v3: - Remove BUG_ON(). - Update commit log. Changelog in v2: - Rework commit log suggested by Michal. Thanks to Michal and Shakeel for review. kernel/fork.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/kernel/fork.c b/kernel/fork.c index d66cd1014211..242fdad6972b 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -379,14 +379,17 @@ static void account_kernel_stack(struct task_struct *tsk, int account) void *stack = task_stack_page(tsk); struct vm_struct *vm = task_stack_vm_area(tsk); + if (vm) { + int i; - /* All stack pages are in the same node. */ - if (vm) - mod_lruvec_page_state(vm->pages[0], NR_KERNEL_STACK_KB, - account * (THREAD_SIZE / 1024)); - else + for (i = 0; i < THREAD_SIZE / PAGE_SIZE; i++) + mod_lruvec_page_state(vm->pages[i], NR_KERNEL_STACK_KB, + account * (PAGE_SIZE / 1024)); + } else { + /* All stack pages are in the same node. */ mod_lruvec_kmem_state(stack, NR_KERNEL_STACK_KB, account * (THREAD_SIZE / 1024)); + } } static int memcg_charge_kernel_stack(struct task_struct *tsk)