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 26444C71149 for ; Fri, 18 Aug 2023 14:12:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9BE26940061; Fri, 18 Aug 2023 10:12:55 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 96D4A940053; Fri, 18 Aug 2023 10:12:55 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 83562940061; Fri, 18 Aug 2023 10:12:55 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 71995940053 for ; Fri, 18 Aug 2023 10:12:55 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 497831C98C4 for ; Fri, 18 Aug 2023 14:12:55 +0000 (UTC) X-FDA: 81137416710.05.60AC018 Received: from mail-oi1-f171.google.com (mail-oi1-f171.google.com [209.85.167.171]) by imf29.hostedemail.com (Postfix) with ESMTP id 525D6120007 for ; Fri, 18 Aug 2023 14:12:53 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=cmpxchg-org.20221208.gappssmtp.com header.s=20221208 header.b=ygscda0S; dmarc=pass (policy=none) header.from=cmpxchg.org; spf=pass (imf29.hostedemail.com: domain of hannes@cmpxchg.org designates 209.85.167.171 as permitted sender) smtp.mailfrom=hannes@cmpxchg.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1692367973; a=rsa-sha256; cv=none; b=iKGul+1l+Px/EAlVah7AjC4N1rGv+raeQrAs4IQNT/neNVLspuYmFIj55KicPsOreOPdVB Yim4z0CDHI4eIQrP0SMVHWkU/ilVU+y6YfxhcDtjxVP0C1rI28ApEUAUMUbBeHogVwVg+U lmRHIVWVx6Gz2k+1AAL9hg1psU16G/0= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=cmpxchg-org.20221208.gappssmtp.com header.s=20221208 header.b=ygscda0S; dmarc=pass (policy=none) header.from=cmpxchg.org; spf=pass (imf29.hostedemail.com: domain of hannes@cmpxchg.org designates 209.85.167.171 as permitted sender) smtp.mailfrom=hannes@cmpxchg.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1692367973; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=BYbkuGWphKck53qhRSBFRHDgKey55imRkhHrLlN3Ku4=; b=zm9udSic6nZ1tn3x84V+TXF+kMEXm5Z1TJ8wmYWEgFcslyhW9pKn8/k85sKN6AQ3DjdBm5 aKkLrel8rXPzZw0suUEohbDmIokKDAjQ6OUmXPhYUTYD4HK8OnAxH51MtSg7FIXoiChM9v Z8XLQ7om2vhwixKAKvxUcXAAnUhK/uw= Received: by mail-oi1-f171.google.com with SMTP id 5614622812f47-3a7d7e5fb03so661849b6e.3 for ; Fri, 18 Aug 2023 07:12:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cmpxchg-org.20221208.gappssmtp.com; s=20221208; t=1692367972; x=1692972772; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=BYbkuGWphKck53qhRSBFRHDgKey55imRkhHrLlN3Ku4=; b=ygscda0SW+DoI+xM1m+X6QVMZ/+48fNkg7e0BRDfdfImdu4JFmDY4BlU13bvWPz/Ln ol79wApAEOabboJA/jpajAN/GZQwdD/qjBEcFYVt2wDsTo8WxExhHLZvJOuge4GFg39m c67fBh4KCaMkZNwdber8FH60yLWAomgkRTf8Z7jzh4QXyg9iLA5A2oY9GoW6+I4nkxyT tuLjtVxdWCfqvFqDHn9Bz/9hLg0nptMwc67/KWKwxgMEbMhFssTgkvgEVTw05zeFQHoc UvMS79ntR9HqvKtXhzW7SlDVYK4fUCGUbPhIRiQNDajG3crsk5j/webmaBRmeX+6GgHV ncrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692367972; x=1692972772; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=BYbkuGWphKck53qhRSBFRHDgKey55imRkhHrLlN3Ku4=; b=S/qpFyw3b4ZCJLQT6fRHAvmfJ0bMSx59Vh25nGW3U9zZ5ZTY/FGtkQFvbMGS0cjZNe 17P6mjE8wMoJLsr6eFF0IyaBLgMIPyP+OOyiCLXytM7/R4S6v1Bu4FMPH7UnfbDKz5Xe 5RTv6jzHeH09mjcHrj8E3RhvkZGBryhkyxxlmZMZXN5tjQFFDK8XPFi3kQymP9lXIsCd wv882HO8tjTZusNVv1YnkGKjaRRwoC7UFxuHkpNiqp967CSI/RNbtrDsI37IUA2COOUU K36LYGOEokzkBTaHQj7V5mc+tfPM34ivJshiw4jqcbq09q+sB3uXdXC5vqCrRQjPqYdO cPUg== X-Gm-Message-State: AOJu0YxR/Kt2/xe+NVbFtw8fTzSmsIvAQKmY9gGTVChVGzT5htM7+eE5 vKgew19dwfJmN1SuTsqZZE9Iqg== X-Google-Smtp-Source: AGHT+IFhNH1W2ZLadujTkNccDtvX2b8TuH+H5bk+QLsoKGMdGEtgAoq4ItoEzN5ZlbCt7QVgOQ/N9A== X-Received: by 2002:a05:6808:220d:b0:3a7:4889:79fe with SMTP id bd13-20020a056808220d00b003a7488979femr3920845oib.20.1692367972393; Fri, 18 Aug 2023 07:12:52 -0700 (PDT) Received: from localhost ([2620:10d:c091:400::5:75e0]) by smtp.gmail.com with ESMTPSA id c15-20020a0ca9cf000000b00637abbfaac9sm706117qvb.98.2023.08.18.07.12.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 18 Aug 2023 07:12:51 -0700 (PDT) Date: Fri, 18 Aug 2023 10:12:51 -0400 From: Johannes Weiner To: Nhat Pham Cc: akpm@linux-foundation.org, kernel-team@meta.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, stable@vger.kernel.org, yosryahmed@google.com, Yu Zhao Subject: Re: [PATCH v2] workingset: ensure memcg is valid for recency check Message-ID: <20230818141251.GB138967@cmpxchg.org> References: <20230817164733.2475092-1-nphamcs@gmail.com> <20230817190126.3155299-1-nphamcs@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20230817190126.3155299-1-nphamcs@gmail.com> X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: 525D6120007 X-Stat-Signature: ftwk3835kpaw6ekfpaezma46kq3acgko X-HE-Tag: 1692367973-351229 X-HE-Meta: U2FsdGVkX1/cdQ0OCsBUYWRL9l01iDHkVpxwtKq5ltmQNsTnLOcjVkJvygeIetYP4ZF0VRSQcbnG5W+MbpBaIOxJ9lmtO7INIH/DjPEuuU3Cj38P5RsYyPjcTiIpvD1t3igA0HkJ//re6GKZjoOeByR7y6v+OZcoB730ja9AdNI5ELq4qo8lAmHFoC6IZ6G66DRtiWNKd3haC/JRlUOySuevWTfabLnuxeAanAntP562AAOLPZ0nqR1OPdjbB+7Q2mm1OiAhhR9Bw6eWFrvWpiSbBYNri8SZbVTuPBT4tf0JbIHNFSPZRre4S08ACc3dyxjNFnWUVCuPoVYGC+OQRhgCsay3E8X0FY7fvBCQqSdbYNHFIcqQ1Mmlr34ZoDnLU7JVPfJPK9YM0FWxAxqAPQ20npFlbfTktjR0QilXRSEfMvGWLprfeGnwDrRtjZg/y8ej/FcylsrPYA4Jkvx+T1pPCxYDobAuHyKpA50DrzXFz9OpJnshaFLYzdnH5LkXuPn9GxcZ+uhXpSYOMGk35igxpkuBaxu7353zuHSCYIk6hG2J8FXoXibn2VA9c3MXPyu7MrjAHrKLUuG8qyhdJIYEh/RN8W0vjtqvWPTEAH6qmQNeKV/xgcgv46TSeyD8uPmVS8MnP5YvQwDBdFFS+txgHnnVWf390Q+CQGkI92gOrebN0647R/Qzk9hK2dnd541ABBIf8P+zmNLTUfFaMSgXp3ZBo21HlnlYfjPQp4gKphIQZxQSbd/VLhna7Y/lJTF3Jm6BnKu7iTsCSrSRPsCKW8hMblq1iiw2xUmOZIWqbdNivIgVN4jdZgngrseKDH3WwDv//SJMgAbYFsowxYV8NNrf293wwtnFSHrRpyRSchWAsqSFxAGW2fbCMrt7nePW3LgqavX6cj2PTgqdbmsG9n4/ZIUJJRKPZRTVSYDBESBr7b4+9xGonBHdIhiy/iEdX0f78qvLBM7YC+h zljdNSnA UZlNugeA+mVVkyV/tSTVCx+SQ03ugf53M/pLmYVq3y2MtfxJx/sJabSJpzjJcx3Cpe9CHlbF+NJxiBnf4wA/+Lv0KNdVlRUIKDM3RISB9vk591FLgVQvGEY1h4rFgpdHsTDlVxVzhQ0IRRylzbxsjhdG4NTzcM76/l0A3RSbR4Q+MekWC4S9Fu//XajygP/ZSQEdDAVjnrQatQR0gUslxnwKQkZQAiICpnn4ulVaBMxytqVX12XzPCc3+/gdF4n/PgLhLCuLbsFDiLILI+8oTfoq6b3oXEbwFhg9ykgR5ZCe96r42/FQ1G0lVc2FnSBl/jFRVpvxWoie87A25h/wv/y9CABPt3oOa5jiZtED6p9ON64ftbZQ6mlnCNmDINlRllq1r0iGLs3/3SF7Kp9oAqU6ppHGouIlFwf1HoTnl4SdON7k= X-Bogosity: Ham, tests=bogofilter, spamicity=0.076119, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Thu, Aug 17, 2023 at 12:01:26PM -0700, Nhat Pham wrote: > static bool lru_gen_test_recent(void *shadow, bool file, struct lruvec **lruvec, > unsigned long *token, bool *workingset) > { > - int memcg_id; > unsigned long min_seq; > struct mem_cgroup *memcg; > struct pglist_data *pgdat; > > - unpack_shadow(shadow, &memcg_id, &pgdat, token, workingset); > + unpack_shadow(shadow, &memcg, &pgdat, token, workingset); > + if (!mem_cgroup_disabled() && !memcg) > + return false; > > - memcg = mem_cgroup_from_id(memcg_id); > *lruvec = mem_cgroup_lruvec(memcg, pgdat); > + mem_cgroup_put(memcg); > > min_seq = READ_ONCE((*lruvec)->lrugen.min_seq[file]); > return (*token >> LRU_REFS_WIDTH) == (min_seq & (EVICTION_MASK >> LRU_REFS_WIDTH)); This isn't quite right. lruvec's lifetime is bound to the memcg, so the put has to happen after the code is done accessing it. lru_gen_refault() is still using the eviction lruvec after the recency test - but only if eviction_lruvec == refault_lruvec. This gives me pause, because they're frequently different. This is a common setup: root - slice - service 1 `- service 2 where slice has the limit and will be the cause of evictions, whereas the service groups have the actual pages and see the refaults. workingset_eviction() and workingset_refault() will do recency evaluation against slice, and refault accounting against service X. MGLRU will use service X to determine recency, which 1) will not properly activate when one service is thrashing while the other is dominating the memory allowance of slice, and 2) will not detect refaults of pages shared between the services. Maybe it's time to fix this first and bring the two codebases in unison. Then the recency test and eviction group lifetime can be encapsulated in test_recent(), and _refault() can just use folio_memcg() to do the activation and accounting against.