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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id DFCA2C433EF for ; Thu, 3 Mar 2022 02:35:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7F7198D0002; Wed, 2 Mar 2022 21:35:09 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 7A7098D0001; Wed, 2 Mar 2022 21:35:09 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 66D708D0002; Wed, 2 Mar 2022 21:35:09 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (relay.hostedemail.com [64.99.140.28]) by kanga.kvack.org (Postfix) with ESMTP id 5812B8D0001 for ; Wed, 2 Mar 2022 21:35:09 -0500 (EST) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 2F2DF20A3A for ; Thu, 3 Mar 2022 02:35:09 +0000 (UTC) X-FDA: 79201507938.11.F51138C Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) by imf31.hostedemail.com (Postfix) with ESMTP id AFA3520005 for ; Thu, 3 Mar 2022 02:35:08 +0000 (UTC) Received: by mail-pl1-f201.google.com with SMTP id n12-20020a170902e54c00b0015011534fa3so2045943plf.9 for ; Wed, 02 Mar 2022 18:35:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=gNvXbnBmCM2KB+maFiSZa4ITw8AFaK/MEJPiIbLdkBM=; b=B7HhJUzmOWecsXfPxQfx8V2zoklVzFCvxtHCpFI/e9NCYJmZqGAb+xjXVUBi1StSt7 5hwk1sg3erAwMQtKZL+osfqV8B1kQSQHGBdWYmX8jQ/JrMsaVu4/a+nH+Gk4U8tkw/Df qRrFBts6hEClte098bLqwbSDgRBdamryORnPT3FAUvuINHQzRx9jbgsn3x7WDywisSvw ZCkyDvELAlmri6xj6EcaRcHo4+Tj5Ju6KuRlaBARnKqjU7ubz5ZNjxZoRkksc21RNiIS 3cBAlZ15EfNJ/khtXiPINv2d8Oy0MDju9b0okGbZJrt5TqvqDJQqH4rHofutauLgIK5H 3Wlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=gNvXbnBmCM2KB+maFiSZa4ITw8AFaK/MEJPiIbLdkBM=; b=0dETtujOUWhLIDYfZ2kdWVk3paMibKBDWxi/S0HI/KaK39BAie186PviUBwfJZNYwP oJZU3GDapj03Iuac5Xqc/drvhY6y8CUtd1e1wYfLIYdoAlq1wOkstQzwPQ981+bLFvsa Ui9p9ymu0S/0pqdoKuiowEkNMbOyYy0+n7GJvR2CHSh+UluwF0a440FEjoZA9yqIyRbD u3Mfgrq0uiwbGkvLtZOrfWJuwALpw/LLGww2u2THakDYAtIWdb3eLwP+vhq5/MXrJmbg 4t7bfz085G90RFR7tVXdUaQAZPwTPan2df6QcCYIoBlI4uqQ2xGtmNzsIugoVcWy7Ikp 3MJA== X-Gm-Message-State: AOAM530bVTBmonQC0Ykeadp8+OM6Kwnel+T7XAnmeK3sMeNAgYRJ/qCc ZuVi/HrE8FPrC6fFrJeJqArtnwVrbmRADQ== X-Google-Smtp-Source: ABdhPJwAniwpjIY8t3WMfX5ssciwtv/bB2uVBfewuEZ+rsIiBHqtlEwwPQc+iolOTJpVysWGU+meJI/bnHRj5A== X-Received: from shakeelb.svl.corp.google.com ([2620:15c:2cd:202:aa3e:b667:26d0:1caa]) (user=shakeelb job=sendgmr) by 2002:a17:902:7205:b0:14c:9586:f9d5 with SMTP id ba5-20020a170902720500b0014c9586f9d5mr33642626plb.77.1646274907448; Wed, 02 Mar 2022 18:35:07 -0800 (PST) Date: Wed, 2 Mar 2022 18:35:04 -0800 In-Reply-To: Message-Id: <20220303023504.gux47rd5wvnikymh@google.com> Mime-Version: 1.0 References: <20220225180345.GD12037@blackbody.suse.cz> <20220228230949.xrmy6j2glxsoffko@google.com> <20220302025022.nnmpwxmkqed2icck@google.com> Subject: Re: Regression in workingset_refault latency on 5.15 From: Shakeel Butt To: Ivan Babrou Cc: "Michal =?utf-8?Q?Koutn=C3=BD?=" , Daniel Dao , kernel-team , Linux MM , Johannes Weiner , Roman Gushchin , Feng Tang , Michal Hocko , Hillf Danton , Andrew Morton , Linus Torvalds Content-Type: text/plain; charset="UTF-8"; format=flowed; delsp=yes X-Rspamd-Server: rspam10 X-Rspam-User: X-Stat-Signature: h6fuyocons67awyki6f9hwqp4ggqdnex Authentication-Results: imf31.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=B7HhJUzm; spf=pass (imf31.hostedemail.com: domain of 3WykgYggKCEY0pismmtjowwotm.kwutqv25-uus3iks.wzo@flex--shakeelb.bounces.google.com designates 209.85.214.201 as permitted sender) smtp.mailfrom=3WykgYggKCEY0pismmtjowwotm.kwutqv25-uus3iks.wzo@flex--shakeelb.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com X-Rspamd-Queue-Id: AFA3520005 X-HE-Tag: 1646274908-657024 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: On Wed, Mar 02, 2022 at 02:33:41PM -0800, Ivan Babrou wrote: > On Tue, Mar 1, 2022 at 7:40 PM Ivan Babrou wrote: [...] Please try the following patch: diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index d9b8df5ef212..274e4ecff534 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -1002,6 +1002,7 @@ static inline unsigned long lruvec_page_state_local(struct lruvec *lruvec, } void mem_cgroup_flush_stats(void); +void mem_cgroup_flush_stats_if_late(void); void __mod_memcg_lruvec_state(struct lruvec *lruvec, enum node_stat_item idx, int val); @@ -1422,6 +1423,10 @@ static inline void mem_cgroup_flush_stats(void) { } +static inline void mem_cgroup_flush_stats_if_late(void) +{ +} + static inline void __mod_memcg_lruvec_state(struct lruvec *lruvec, enum node_stat_item idx, int val) { diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 32ba963ebf2e..00c924e25ce8 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c @@ -650,6 +650,9 @@ static DECLARE_DEFERRABLE_WORK(stats_flush_dwork, flush_memcg_stats_dwork); static DEFINE_SPINLOCK(stats_flush_lock); static DEFINE_PER_CPU(unsigned int, stats_updates); static atomic_t stats_flush_threshold = ATOMIC_INIT(0); +static u64 flush_next_time; + +#define FLUSH_TIME (2UL*HZ) static inline void memcg_rstat_updated(struct mem_cgroup *memcg, int val) { @@ -671,6 +674,7 @@ static void __mem_cgroup_flush_stats(void) if (!spin_trylock_irqsave(&stats_flush_lock, flag)) return; + flush_next_time = jiffies_64 + 2*FLUSH_TIME; cgroup_rstat_flush_irqsafe(root_mem_cgroup->css.cgroup); atomic_set(&stats_flush_threshold, 0); spin_unlock_irqrestore(&stats_flush_lock, flag); @@ -682,10 +686,16 @@ void mem_cgroup_flush_stats(void) __mem_cgroup_flush_stats(); } +void mem_cgroup_flush_stats_if_late(void) +{ + if (time_after64(jiffies_64, flush_next_time)) + mem_cgroup_flush_stats(); +} + static void flush_memcg_stats_dwork(struct work_struct *w) { __mem_cgroup_flush_stats(); - queue_delayed_work(system_unbound_wq, &stats_flush_dwork, 2UL*HZ); + queue_delayed_work(system_unbound_wq, &stats_flush_dwork, FLUSH_TIME); } /** @@ -4518,7 +4528,7 @@ void mem_cgroup_wb_stats(struct bdi_writeback *wb, unsigned long *pfilepages, struct mem_cgroup *memcg = mem_cgroup_from_css(wb->memcg_css); struct mem_cgroup *parent; - mem_cgroup_flush_stats(); + mem_cgroup_flush_stats_if_late(); *pdirty = memcg_page_state(memcg, NR_FILE_DIRTY); *pwriteback = memcg_page_state(memcg, NR_WRITEBACK); diff --git a/mm/vmscan.c b/mm/vmscan.c index 74296c2d1fed..fd279621c3fc 100644 --- a/mm/vmscan.c +++ b/mm/vmscan.c @@ -3041,7 +3041,7 @@ static void shrink_node(pg_data_t *pgdat, struct scan_control *sc) * Flush the memory cgroup stats, so that we read accurate per-memcg * lruvec stats for heuristics. */ - mem_cgroup_flush_stats(); + mem_cgroup_flush_stats_if_late(); memset(&sc->nr, 0, sizeof(sc->nr)); diff --git a/mm/workingset.c b/mm/workingset.c index d5b81e4f4cbe..7edc52037e38 100644 --- a/mm/workingset.c +++ b/mm/workingset.c @@ -352,7 +352,7 @@ void workingset_refault(struct page *page, void *shadow) inc_lruvec_state(lruvec, WORKINGSET_REFAULT_BASE + file); - mem_cgroup_flush_stats(); + mem_cgroup_flush_stats_if_late(); /* * Compare the distance to the existing workingset size. We * don't activate pages that couldn't stay resident even if