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 81563C6FD1D for ; Thu, 16 Mar 2023 03:17:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DE7A06B0071; Wed, 15 Mar 2023 23:17:33 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id D96A96B0072; Wed, 15 Mar 2023 23:17:33 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C5E466B0075; Wed, 15 Mar 2023 23:17:33 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id B63E36B0071 for ; Wed, 15 Mar 2023 23:17:33 -0400 (EDT) Received: from smtpin05.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 8F81A1A0174 for ; Thu, 16 Mar 2023 03:17:33 +0000 (UTC) X-FDA: 80573301186.05.107013F Received: from mail-ed1-f45.google.com (mail-ed1-f45.google.com [209.85.208.45]) by imf22.hostedemail.com (Postfix) with ESMTP id BF6D0C000F for ; Thu, 16 Mar 2023 03:17:31 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b="NRQD09/E"; spf=pass (imf22.hostedemail.com: domain of yosryahmed@google.com designates 209.85.208.45 as permitted sender) smtp.mailfrom=yosryahmed@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1678936651; 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=YXNzovKLJVYy7gSWnrkduiiESPL+tnprAmERLJ9c4NY=; b=CESXKQtC9Z30DMCtPFYvKXeh/xtIRwQ4EhzNqp1ouGUIIr8VP+y3nIgqRXxGtJkPPp8GC4 n0HG4gBv169MEjzKzJO1Vp+beqPBgX68vC6b35eY6LRdVrxk+baBBXlT5p5Bd/CoxHvwec FqPflEPlGNbzAVirR8iF33kpIZSfgoo= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b="NRQD09/E"; spf=pass (imf22.hostedemail.com: domain of yosryahmed@google.com designates 209.85.208.45 as permitted sender) smtp.mailfrom=yosryahmed@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1678936651; a=rsa-sha256; cv=none; b=EjaOvZMberIivYAj3Tri1I7SsGi2AXZ+z0TLKVDcAircslGVBVdC2zksPsM8HHMGriOR9w EjTZ+Gop2yhsigyN0CPoRYBT9GnwEqlG8LjJbZ6F7oTcuHHXiq4Jpw5+9gEcsvrpPp9sXZ vU/t0Ir3jlm4lXDJklKW+KL3i5ro0Rs= Received: by mail-ed1-f45.google.com with SMTP id eh3so2226837edb.11 for ; Wed, 15 Mar 2023 20:17:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678936650; 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=YXNzovKLJVYy7gSWnrkduiiESPL+tnprAmERLJ9c4NY=; b=NRQD09/EkrkQfR7xQtFTEI9QJBiVxyflHtJW6z/y+NzHFWpQ8JaVK7xtttKCq7oNhY EhHdshdjxrDhdmDM32NOVhSuY5bTEeIo8qvtE6jUhidqSflnT32TvtkRVaXr4Uk6MnIi rx2KxeyAviXttBTLasD9xRHAKqCf1ZwnCTBg6yyDGtdlgO/qtgJfXLBVkOCgodk/4aTB L1L2+RRrS39zqUklhKnr7rxuTgnpdd+PW/l0td+cnb01CSRMWANJiC8flZDrXr1df7GZ AQnv7g6xchDTwjjZrZ7iX6E7rq0Xhi6Ac3KFGNgH2yXFoJPVX+mfcEl7E/7kqpCUBqp0 e//A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678936650; 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=YXNzovKLJVYy7gSWnrkduiiESPL+tnprAmERLJ9c4NY=; b=fmBlWpgEcvM5cAewyX8VaEddxEjw1v/JiOODcYEF9buARc93NQUqKnmQrWgQXX0342 YQD4eR7Mu1xCR3g37i9wte6sC2TCvqrZCf/OtcuEPTkdlP/3OrOXfLcjyOm5fx5sWs34 nfQUIT8vo1gYLbWIxQisoGeR9sc+YsFXDZaQLoycyaqPC4iT5Nto/26kGSDUwIa7GzuM Al5T8/Y48W60Jgu+7gWmuptzWewEiGaWuT+TMK17zlHAIhhbGXkyNyxi1dPpuNtEKkgO /S4ZieJIqOPjJTf+5/BrZ0hjQ081WPHZBxSufHv4dTq1/COzBS7BSXn2XgXl0UvcG9F8 QrpA== X-Gm-Message-State: AO0yUKX7dbM64dUYyO7m6PiUqJfJK9GQNvUU2J3YUm25ffKhtv1VU/uH y8wRaWSVq2WFNvZSO80g4Ms66jlQNhxzjkaAyFFJ0g== X-Google-Smtp-Source: AK7set/h2/dgQJJuWVarM/ber+1Pe8UMuGZwhHp+NyLXjg8sR9O2WcSdO3vG3IioT48FKIjJDrYBmNYgBrlyOTaC04g= X-Received: by 2002:a17:907:2069:b0:8af:4963:fb08 with SMTP id qp9-20020a170907206900b008af4963fb08mr4529176ejb.15.1678936650086; Wed, 15 Mar 2023 20:17:30 -0700 (PDT) MIME-Version: 1.0 References: <20230313083452.1319968-1-yosryahmed@google.com> <20230313124431.fe901d79bc8c7dc96582539c@linux-foundation.org> <8d4e1b74-6ae8-4243-d5c2-e63e8046d355@redhat.com> In-Reply-To: From: Yosry Ahmed Date: Wed, 15 Mar 2023 20:16:53 -0700 Message-ID: Subject: Re: [PATCH] memcg: page_cgroup_ino() get memcg from compound_head(page) To: Matthew Wilcox Cc: Waiman Long , Andrew Morton , Hugh Dickins , Johannes Weiner , Michal Hocko , Roman Gushchin , Shakeel Butt , Muchun Song , Naoya Horiguchi , Miaohe Lin , Vladimir Davydov , linux-mm@kvack.org, cgroups@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: BF6D0C000F X-Rspam-User: X-Stat-Signature: n5behym5nyudkjdi7aw8gbzndpg7er3z X-HE-Tag: 1678936651-171870 X-HE-Meta: U2FsdGVkX192FgfFT/rqghYapXQSRBa23XByAjRsGTxAy9XJnWgmln5XF7wnyv0VSD3R1yhIeYsOxd4WDAzZ91SKW1Pto6aZk7dGaKS6So7lbfc8MooTL6zPXIiu0CHkwKRsbV5TgsL/Ag/QdzCGAzIqwVE4ZGl6k6CtMvcTd/pA81e4o4QTMAE57GQIndAavA0WGY2nBVbS1CxZjigd6rrD5tmKbwVN5N9JzO0+BKjnQmi/ZEcL59tWK04Kj5n8MMiapVk+EZyrllcVUnB8W3eWrY4ZJ3fuHowx7MP1L7J+reThQbBKvRVA2FJExD7/7R3lkqAxFY7vPistmQ642dWq7vEFRBsbbqHmVE5iEBjsMTnbqSTt5Dg0BeUwDYF/5AoJp788KhaC8kyR0oNYeFQalYfo1FWLXsYLn1EOwvPgiSIc4JfH6obEnKea/BrBAOLNbCqRcZ+y//LN/rf3GdSXogi4dBgSpqZuymUeUl4IOf/414jL0dNGlO86HOwAeq46Fn2lR9dbzn4i0xd/TPEiOZX5u01CoS+ENMyyxvNas1tZZpXaJ5c+1iGrNk6Xgej3l+1x5yt6UVic9DEv9BMyqDf3sVBJsEQMdF2xQn+klqfIjUu33wBHzRFJ/qq8C1tRLebbgZhTsbuAaXW4PETNXQ/ANzVlyeA2o65wYb17ayNy0syzyle48k6MboUjNTCuL5718TNgbDz2aL0OAukoA0CAF3WStwqgPqjsijhi1v+mJosZBsrSn2S3OmeRXYupiiX8TNWuP4W3gYqx9/AIgyNgV+2uSxwv3X3lrO+k79Ir2pkMU4hv/Elun8yhj8z6lXJXf8aNSJRrMZWov7CGUcX/vIr29yayzPT78Mg9sWDmVQoqsnaF9oiEDKdV0b4CsN4XayUuR/gla39eYvkMeB54kqTJK9viTQfMKVEWIpUljZnk2oWi9yD/xOfkItmKgtoSf36UgfkH56J 0RaB5IZ4 iK8XGrMGdi2zcQ9AJEfG2siwDSQR9n3VQQCilm+9j+TYyaLGLKHi3XmHQFfef8p16N4u6yTrFBTRPBORD5dcmUlbpAAKUSdUnQElmZ/mGsfiSgAfBoHiTW4Asd0e3tq4m0DLN4A19Cvpa0Tmmq2JdYamBZECiSxHs7ZUxpP2IQBhZr3QiB5Ib6SH7PMSwrsLWD9XS/M80C9aQH+gox4YHSu14G3LIP8PUzSOqgzy+fIC+FK32nAzYXdrhzHjTLIDV+kz+YVJz5i/EuaR6VwAy0HNWFE7vFGxPciaU4dRJ4SDlKoBHXxW5crydbDDaHMQ91sEqiHWaM2gjdQhWUrNobPwcfSOSw6nmnkI4Q24Omb3QfICplYJ51whWIkAIuTd6bXwUx4aIa49jbyD9RkQpNHuNuBUa1jCLsIELSjzVuqfbD8A= 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 15, 2023 at 8:07=E2=80=AFPM Matthew Wilcox wrote: > > On Wed, Mar 15, 2023 at 05:25:49PM -0700, Yosry Ahmed wrote: > [snipped 80 lines. please learn to trim] > > I think instead of explicitly checking page->memcg_data, we can check > > PageTail() and return explicitly for tail pages tails, check > > PageSlab() to print the message for slab pages, then get the page's > > memcg through folio_memcg_check(page_folio(page)). > > > > Something like: > > > > static inline int print_page_owner_memcg(char *kbuf, size_t count, int = ret, > > struct page *page) > > { > > ... > > rcu_read_lock(); > > > > /* Only head pages hold refs to a memcg */ > > if (PageTail(page)) > > goto out_unlock; > > > > if (PageSlab(page)) > > ret +=3D scnprintf(kbuf + ret, count - ret, "Slab cache page\n"= ); > > > > memcg =3D folio_memcg_check(page_folio(page)); > > if (!memcg) > > goto out_unlock; > > ... > > } > > > > Matthew, What do you think? > > Brrr, this is hard. read_page_owner() holds no locks or references, > so pages can transform between being head/tail/order-0 while we're > running. > > It _tries_ to skip over tail pages in the most inefficient way possible: > > if (!IS_ALIGNED(pfn, 1 << page_owner->order)) > goto ext_put_continue; > > But any attempt to use folio APIs is going to risk tripping the > assertions in the folio code that it's not a tail. This requires > more thought. Ugh yeah. I thought the worst that could happen is that if a page becomes a tail page after the PageTail() check, then we will not skip it and we will read the memcg from the head instead, which shouldn't be the end of the world. I missed the fact that the folio returned by page_folio() can change before folio_memcg_check() gets to read its memcg_data. I guess this race exists with the current implementation as well. page_memcg_check() will check for tail pages then cast the page to a folio. If the page becomes a tail page after the PageTail() check inside page_memcg_check() we risk running into the same situation. (FWIW folio_memcg_check() doesn't seem to have assertions for tail pages to= day)