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 B50F2D1A42C for ; Sat, 12 Oct 2024 01:50:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 19BD16B0082; Fri, 11 Oct 2024 21:50:05 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 148F86B009F; Fri, 11 Oct 2024 21:50:05 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id F2C756B00A1; Fri, 11 Oct 2024 21:50:04 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id CAE036B0082 for ; Fri, 11 Oct 2024 21:50:04 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id B15CDA1985 for ; Sat, 12 Oct 2024 01:49:54 +0000 (UTC) X-FDA: 82663269402.09.3500396 Received: from mail-lf1-f49.google.com (mail-lf1-f49.google.com [209.85.167.49]) by imf30.hostedemail.com (Postfix) with ESMTP id 849398000E for ; Sat, 12 Oct 2024 01:49:56 +0000 (UTC) Authentication-Results: imf30.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=V73j0JGF; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf30.hostedemail.com: domain of huangzhaoyang@gmail.com designates 209.85.167.49 as permitted sender) smtp.mailfrom=huangzhaoyang@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1728697689; a=rsa-sha256; cv=none; b=Uv2Ldnd/+meg56h+fT/MrPC8XJBxKeXF4jZTepgUSVyovtZFqdrKClu2t3GoNuIwga1leb RUdsSsolLNOIdgYooD+R/3zxCwI/yAkCbd0nN3lfZmyfRjp9Rw5SCwMY6YK3CS1ulCeu9q lTIxJ/gtjCdL9jgtR72ve2wWJAj3kyU= ARC-Authentication-Results: i=1; imf30.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=V73j0JGF; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf30.hostedemail.com: domain of huangzhaoyang@gmail.com designates 209.85.167.49 as permitted sender) smtp.mailfrom=huangzhaoyang@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1728697689; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Yl7QDmPgNR+ZcJpmQPpgGsdoXyoruwuzooaCriza/tA=; b=KFGFFT+dt6cZNuC9Qkeyr/TY45Dg/Vt4p/odBcbsYoCdm7fItQLucwadbiM3zeBYHk+lXP qKvMFRpC8EfzsDO1a74asNUzlRhkQF+lGItMjnoZhDOuNF15YExU7/GtdGmhFfY75Fv2Bi Mbilh+0yI55UXdey0OMcL4lOOP+/rZk= Received: by mail-lf1-f49.google.com with SMTP id 2adb3069b0e04-539d9bfc5d1so202106e87.0 for ; Fri, 11 Oct 2024 18:50:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1728697800; x=1729302600; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=Yl7QDmPgNR+ZcJpmQPpgGsdoXyoruwuzooaCriza/tA=; b=V73j0JGFa96DEHxm76Ur0zPWUvYnQoK7CytyY4h+jJN/J76E3BFfCT3TQggHvqp+Pe fOjvrT6SLX5VuUVM4sWu9KnuAwZDFB52OkLjcQR6SgRmRT8xKi0G1keDd2EH+oWh9g5M UBZ7I++UnmIyBGuzgyzRRC39rNS5XEhNZWKekhmvjdaFpta8A9NHabkDn6rofQ38o9q8 P3voXdvU5ts2qHr0fOonIIrG//9VORXm9qzOiIFvbCuO8EfKbbiAbxcbJEk/VQ87yaHf quXnKHVbrL1L0gmUIQy308tuB0aFr+OkcHKJmAPMnT/HkUZI3k8NAtdXPfWVq40tm89v j7uw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728697800; x=1729302600; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Yl7QDmPgNR+ZcJpmQPpgGsdoXyoruwuzooaCriza/tA=; b=YBPHX79zdTN6wCMmqke3RI0w0BD1HNFaW7DZQzd6d31VIRsoUiXKnp+7iqliFoXL/Q evsU2ijG3lHwCCgipgMMkPw5SZ3rxidB0hf9iJ8Bp+x1JUKkx/heAsEPH+7eEk/Nm9zi 2rwVwynZekoLeObmkTgAmQKqkqJNHihHELHi+PfvF0O2YrzJbJcHqV+LczGmn+vluTvH tcap5Sn95tByUIEX7SEYuch5d39TLKCPegB74XN0m7fLNmbNQCd4hO2y9hZ38Mp8T3Gu dz1/Abb99xCb9ARNDVC5ArpFdMaUH3BTJen/LomBdXUzhVa7n3iBHrN786C1XXs0bhEs j+Tg== X-Forwarded-Encrypted: i=1; AJvYcCW8UmZnjCU+VXg/1ujwWCN8pK+h9RKlGCpZb0ZZcg2rJ+6ugK9uK/pZZJFcHynwKQxQD4/82htmUg==@kvack.org X-Gm-Message-State: AOJu0Yzt8LKSpJOLUGDxYzizj93VawqHpDDItwj4HMgt6ocKpygq/bNk k5Le/MzKqixBF+MB2JwvH0Ju4tANPh/Lv1tStsrabqKjr7c4tddjecUinVKqLW2u2l8g8AaLWIS XHoC7hNTPXnkmiu1RCkUrP43uIyk= X-Google-Smtp-Source: AGHT+IHB+od3iobMStznhsxyUZcmRWuTmW1+fVXNwkMP2XOPNOBlhhSrPEYYGlJbixmYlA/eq/gKxGP5ilfgOLFWp0I= X-Received: by 2002:a05:6512:33c1:b0:535:6a7b:9c03 with SMTP id 2adb3069b0e04-539da5c6eb3mr619866e87.6.1728697799881; Fri, 11 Oct 2024 18:49:59 -0700 (PDT) MIME-Version: 1.0 References: <20241009074953.608591-1-zhaoyang.huang@unisoc.com> In-Reply-To: From: Zhaoyang Huang Date: Sat, 12 Oct 2024 09:49:48 +0800 Message-ID: Subject: Re: [PATCH] mm: throttle and inc min_seq when both page types reach MIN_NR_GENS To: Yu Zhao Cc: "zhaoyang.huang" , Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, steve.kang@unisoc.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 849398000E X-Stat-Signature: b599dwe4ixsbjaz9upigyfmbdtscafnb X-Rspam-User: X-HE-Tag: 1728697796-174589 X-HE-Meta: U2FsdGVkX1+po2JP6JTDmV0WKKxtv6/QZGzMxB6k/qQ5CSN68bMmPTw+2I0QJnuGPo4GhcprpWeiBX+JLD6aNVE0KYkwTXWwLOYMavm19jt7u5DsGykST/PzCgIBUuA4nr+3hzn2irZtjb2TCLFOwYtBB1qVvSSUzuvz+wi3B4fl4aLA/L3I6Mm2aVo//7m155GCVCEFMJe5IHDECCtl3FHxIMfL38tksqLxJyyUU5MBQe4VGAdXKlxFd2pz/yiY3l2dgMAPlbff7+F24BmHaZZInkm13b5b1G8gYAC8VoSU2XUlB99qXOn38ih34YNo3aTitojOFvWZN99FW1RnqubHY123ShMCnLvcY6xGxmCGTRqHZYEq3CVABRQIG6LrmyOBx7Kv/DHR1EBhW+S9y6zs7MRZHQsW921S0HoAsHnyRsDG2X3xqZhg0xo3MrXan2V7fmVdS2uTxB8cHX1cffAy0QBbrebupxggc7KZdJQf1cr7JV6JB9OT3Id36hDCN3rMsnP8vfYfaNxaek57tUqflFfNrnm+LkLGqj5MrIV4cxdhMvTf6UsYDkO6iXWE9jH/86SH1dE2b/j0W5T4eOFByAamSBsNx5TAHS3GaDC1MmUvAHW3lKVhJidF7zzckNfoj/b1jhRw18L0r6ZT4787ePu27K51nFh6Eu4jSvmxe96SQf7QQaQQ4rMXI9Ca92gaEWn36QCMhRDBH01apzM6E5j+dMq4qFoyFsJ3WLCxZuwhy2CtgXjGrBfIcOOfSu2x6bR4ONjDqD4dMe4Iz9k95NKl8DkcpUSmnRvbEqec/rvVo3XMVlB8g85EdJE6FR1KKEtWL0dxu5HylWKRXGIM/2P8ujdchaTNz043r8u29DoY6Atq/ASuBInZX8+h348guel8uC+r/jDG2yN48MeoQ8lkA4SFhf9hWLWz3fKwVWvr6KVmyY5tDR3xsx1vaQeXr7yDnF2xlhGRZGF EL8OmJIQ U4XO0raAWUQO7g+oalLlZSziXzDWsUU8/23nVJU5abWQc+vxr7Lipib5IGkUycxEJ+aiirShgMgwUkffedAVxdJxR6EfTNhSGA50cAlrH7p/PZYzzw45d/3EZU9kuYpOqA7m6n2Od3HNaAbLdSkgnSMMFR/saS0FWceH4lOTG0uuO4m+E02iei2z8nqfoh+Fbc1phsiqahhM9ScWHQxpsVlDTwECg7KNAeRlun52IBe08HhzpnCD2m23KGnPq7ON1PoeZVAQyXfJccXLuHkSGAl+KTnJcJAT509cglzzEwmCGzUklpLcAT7tbeycF6o6mgcJc5dinXI3gjX1Jg6TJv4QeoseN/V1TE+gquq5BXolCDKQNgJjPSJhpaYuBblIxduQUsfpBaahyDLq9seASyWgc57FUJuL30gjYeaanLStuuUfCQm1hR5GSQwfpite19gT3f/31kMyoW3wImdKeyLmD8YAWojgLCZpFqcWyhcqGhGo= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000282, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Fri, Oct 11, 2024 at 4:02=E2=80=AFPM Zhaoyang Huang wrote: > > On Fri, Oct 11, 2024 at 12:37=E2=80=AFAM Yu Zhao wrot= e: > > > > On Wed, Oct 9, 2024 at 1:50=E2=80=AFAM zhaoyang.huang wrote: > > > > > > From: Zhaoyang Huang > > > > > > The test case of [1] leads to system hang which caused by a local > > > watchdog thread starved over 20s on a 5.5GB RAM ANDROID15(v6.6) > > > system. This commit solve the issue by have the reclaimer be throttle= d > > > and increase min_seq if both page types reach MIN_NR_GENS, which may > > > introduce a livelock of switching type with holding lruvec->lru_lock. > > > > > > [1] > > > launch below script 8 times simutanously which allocates 1GB virtual > > > memory and access it from user space by each thread. > > > $ costmem -c1024000 -b12800 -o0 & > > > > > > Signed-off-by: Zhaoyang Huang > > > --- > > > mm/vmscan.c | 16 ++++++++++++++-- > > > 1 file changed, 14 insertions(+), 2 deletions(-) > > > > > > diff --git a/mm/vmscan.c b/mm/vmscan.c > > > index cfa839284b92..83e450d0ce3c 100644 > > > --- a/mm/vmscan.c > > > +++ b/mm/vmscan.c > > > @@ -4384,11 +4384,23 @@ static int scan_folios(struct lruvec *lruvec,= struct scan_control *sc, > > > int remaining =3D MAX_LRU_BATCH; > > > struct lru_gen_folio *lrugen =3D &lruvec->lrugen; > > > struct mem_cgroup *memcg =3D lruvec_memcg(lruvec); > > > + struct pglist_data *pgdat =3D lruvec_pgdat(lruvec); > > > > > > VM_WARN_ON_ONCE(!list_empty(list)); > > > > > > - if (get_nr_gens(lruvec, type) =3D=3D MIN_NR_GENS) > > > - return 0; > > > + if (get_nr_gens(lruvec, type) =3D=3D MIN_NR_GENS) { > > > + /* > > > + * throttle for a while and then increase the min_seq= since > > > + * both page types reach the limit. > > > + */ > > > > Sorry but this isn't going to work because in try_to_inc_min_seq(), the= re is > > `while (min_seq[type] + MIN_NR_GENS <=3D lrugen->max_seq) {` > > to prevent reclaimers from evicting hot memory -- they need to do aging= first. > Thanks for heads up. What I thought was assuming there is a running > reclaimer will do the aging and the throttled reclaimers increase the > min_seq when scheduled back and move on. Or could we just drop the > lock and throttle for a while to avoid a livelock on 'type =3D !type' > with holding the lock? please find below for the lru_lock contention information[2] which we get from syzkaller test. if the patch[1] is worth discussing which introduces throttling direct reclaimer by judging the number of isolated folios. [1] https://lore.kernel.org/all/20240716094348.2451312-1-zhaoyang.huang@unisoc.= com/ [2] [ 295.163779][T8447@C5] preemptoff_warn: C5 T:<8447>syz.2.17 D:40.429ms F:295.123341s E:6.660 ms [ 295.165000][T8447@C5] preemptoff_warn: C5 enabled preempt at: [ 295.165000][T8447@C5] _raw_spin_unlock_irq+0x2c/0x5c [ 295.165000][T8447@C5] evict_folios+0x2504/0x3050 [ 295.165000][T8447@C5] try_to_shrink_lruvec+0x40c/0x594 [ 295.165000][T8447@C5] shrink_one+0x174/0x4cc [ 295.165000][T8447@C5] shrink_node+0x1c50/0x2088 [ 295.165000][T8447@C5] do_try_to_free_pages+0x560/0xef8 [ 295.165000][T8447@C5] try_to_free_pages+0x4e8/0xaf0 [ 295.165000][T8447@C5] __alloc_pages_slowpath+0x92c/0x1c78 [ 295.165000][T8447@C5] __alloc_pages+0x404/0x48c [ 295.166277][T298@C0] C0 T:<298>logd.writer D:42.389ms F:295.123885s [ 295.166337][T298@C0] C0 enabled IRQ at: [ 295.166337][T298@C0] _raw_spin_unlock_irq+0x20/0x5c [ 295.166337][T298@C0] evict_folios+0x2504/0x3050 [ 295.166337][T298@C0] shrink_one+0x174/0x4cc [ 295.166337][T298@C0] shrink_node+0x1c50/0x2088 [ 295.166337][T298@C0] do_try_to_free_pages+0x560/0xef8 [ 295.166337][T298@C0] try_to_free_pages+0x4e8/0xaf0 [ 295.166337][T298@C0] __alloc_pages_slowpath+0x92c/0x1c78 [ 295.166337][T298@C0] __alloc_pages+0x404/0x48c [ 295.166337][T298@C0] erofs_allocpage+0x90/0xb0 [ 295.167317][T298@C0] preemptoff_warn: C0 T:<298>logd.writer D:43.424ms F:295.123888s [ 295.168484][T8210@C7] C7 T:<8210>syz-executor D:32.816ms F:295.135666s [ 295.168507][T8210@C7] C7 enabled IRQ at: [ 295.168507][T8210@C7] _raw_spin_unlock_irq+0x20/0x5c [ 295.168507][T8210@C7] evict_folios+0x2504/0x3050 [ 295.168507][T8210@C7] shrink_one+0x174/0x4cc [ 295.168507][T8210@C7] shrink_node+0x1c50/0x2088 [ 295.168507][T8210@C7] do_try_to_free_pages+0x560/0xef8 [ 295.168507][T8210@C7] try_to_free_pages+0x4e8/0xaf0 [ 295.168507][T8210@C7] __alloc_pages_slowpath+0x92c/0x1c78 [ 295.168507][T8210@C7] __alloc_pages+0x404/0x48c [ 295.168507][T8210@C7] __get_free_pages+0x24/0x3c [ 295.168625][T8210@C7] preemptoff_warn: C7 T:<8210>syz-executor D:32.956ms F:295.135666s [ 295.168645][T8210@C7] preemptoff_warn: C7 enabled preempt at: [ 295.168645][T8210@C7] _raw_spin_unlock_irq+0x2c/0x5c [ 295.168645][T8210@C7] evict_folios+0x2504/0x3050 [ 295.168645][T8210@C7] try_to_shrink_lruvec+0x40c/0x594 [ 295.168645][T8210@C7] shrink_one+0x174/0x4cc [ 295.168645][T8210@C7] shrink_node+0x1c50/0x2088 [ 295.168645][T8210@C7] do_try_to_free_pages+0x560/0xef8 [ 295.168645][T8210@C7] try_to_free_pages+0x4e8/0xaf0 [ 295.168645][T8210@C7] __alloc_pages_slowpath+0x92c/0x1c78 [ 295.168645][T8210@C7] __alloc_pages+0x404/0x48c [ 295.178291][T8441@C2] C2 T:<8441>syz.3.18 D:42.290ms F:295.135998s [ 295.178356][T8441@C2] C2 enabled IRQ at: [ 295.178356][T8441@C2] _raw_spin_unlock_irq+0x20/0x5c [ 295.178356][T8441@C2] evict_folios+0x2504/0x3050 [ 295.178356][T8441@C2] shrink_one+0x174/0x4cc [ 295.178356][T8441@C2] shrink_node+0x1c50/0x2088 [ 295.178356][T8441@C2] do_try_to_free_pages+0x560/0xef8 [ 295.178356][T8441@C2] try_to_free_pages+0x4e8/0xaf0 [ 295.178356][T8441@C2] __alloc_pages_slowpath+0x92c/0x1c78 [ 295.178356][T8441@C2] __alloc_pages+0x404/0x48c [ 295.178356][T8441@C2] bpf_ringbuf_alloc+0x22c/0x434 [ 295.179135][T8441@C2] preemptoff_warn: C2 T:<8441>syz.3.18 D:43.128ms F:295.136000s > > > > > > > > > + if (get_nr_gens(lruvec, !type) =3D=3D MIN_NR_GENS) { > > > + spin_unlock_irq(&lruvec->lru_lock); > > > + reclaim_throttle(pgdat, VMSCAN_THROTTLE_ISOLA= TED); > > > + spin_lock_irq(&lruvec->lru_lock); > > > + try_to_inc_min_seq(lruvec, get_swappiness(lru= vec, sc)); > > > + } else > > > + return 0; > > > + } > > > > > > gen =3D lru_gen_from_seq(lrugen->min_seq[type]); > > > > > > -- > > > 2.25.1 > > >