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 99AB4C6FD1C for ; Wed, 22 Mar 2023 06:53:04 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id ED8B46B0075; Wed, 22 Mar 2023 02:53:03 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E88BB6B0078; Wed, 22 Mar 2023 02:53:03 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D778C6B007B; Wed, 22 Mar 2023 02:53:03 -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 C7CE86B0075 for ; Wed, 22 Mar 2023 02:53:03 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 8CADB120141 for ; Wed, 22 Mar 2023 06:53:03 +0000 (UTC) X-FDA: 80595617046.03.B1965C4 Received: from mail-ed1-f43.google.com (mail-ed1-f43.google.com [209.85.208.43]) by imf28.hostedemail.com (Postfix) with ESMTP id B32D8C000B for ; Wed, 22 Mar 2023 06:53:01 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=MmGd3436; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf28.hostedemail.com: domain of yosryahmed@google.com designates 209.85.208.43 as permitted sender) smtp.mailfrom=yosryahmed@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1679467981; 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=xdF8Y63Q/ku6Lr69S+ZmgmO8IHY40wgoKq9rCqNHezQ=; b=NGklIeNaVQiAGvtYxYHCMQHEpaDcVG9IV3vuMVhDm1mhJ57Hkiti7zD5FDlUxsXqVEbOoe pucX+VdvAQFB8+reBMM5R2bxr/OtkCh5mSMm1dSib4KmZCSAfSxECH5g2seHV/Zb4Z5mPv zQV7bSiGs4z4c95x+pyVXzD1RGO7SRg= ARC-Authentication-Results: i=1; imf28.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=MmGd3436; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf28.hostedemail.com: domain of yosryahmed@google.com designates 209.85.208.43 as permitted sender) smtp.mailfrom=yosryahmed@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1679467981; a=rsa-sha256; cv=none; b=3fYiczPi2bLu4vAGGwxJRgbUqSf9+5WmJ9T50grAv8f+oACEfUayuKt38YR94KqHkd4oRW JnJLO605Tn3BEohVNWhfqXj5KMWr2gQNfplerjt92+qf0CKPCwbXsJjnsY22uUVTaG+d/d VoUo5+vIM8ijQcuuFmJjnZRfmeybkBo= Received: by mail-ed1-f43.google.com with SMTP id cy23so68656453edb.12 for ; Tue, 21 Mar 2023 23:53:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1679467980; 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=xdF8Y63Q/ku6Lr69S+ZmgmO8IHY40wgoKq9rCqNHezQ=; b=MmGd3436dh2QjIQs7wxTRa16VHF6x8cBcr5u8m4PZsA4oDCGkXM4OQH3tSsCF7QvHF JsdGt1hwEkY7aubsBE6wIqL73XeNaE7baAMc7KZUUExwVAgvrs54AUWUfwLotZGHx6hO gtJVMZlMBK0zScAvVMaNAB5SO8Y/FDIJqOS2VdHIdoxXv555MMFvEGT1SBAAboifOWPY ttSWxhLeiEHOgahVDOGJm+IgWoIK6bKfBIXRvzXWumDzxHMsmHEP//lFomjTAV1UG76a M22t0ra/4mk6UsqQeMvG1Oe5T6B6jCGjjcZBFD+QRZh7ka98Sx7Vzo0E2aprdmqsokIt Y8yQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679467980; 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=xdF8Y63Q/ku6Lr69S+ZmgmO8IHY40wgoKq9rCqNHezQ=; b=25K/Da/O+UOsdNVCToxiKSyfn04IH1hBnttW/aIW8YIPv240rUE8yku7tAlYC60PsA lO/0N2w6xZ1vTMW1kwOcYFPIesvYgd7T4WQO/L93il5lojJnhndvDqnLJ535y7quiu2k TMmq73bCR8B4eH2QL0GLbIlwhZKwnsAy5hV7rBphABh90lf+Qtt3Xs+AI9hdIOBOKIWU q5z8wr6Xpes64uc9vTNKYJR5t0GNbnjmdhBRNKTmukOmUVLCZSTRvXmdvQFPUZPxdFn8 4iRPQxnsbfYjfho2XNWcMrU3HhQ+QxAAk9yXgjPzYq6UFhQithHhDGzHcItiFVBirwYW m8JQ== X-Gm-Message-State: AO0yUKWpOUsHPGhOtpqldQ8Xec1CySaEmA9+9trsh2FT50LgSn1e2Lv7 76DKQPiX7vDurTHU3ghesRwOvkHoiNiBuQoDaqQ27w== X-Google-Smtp-Source: AK7set+TPWIGxSv/eGCQiE9XKqisrOlt4VzxtDIwFy5mL1sDgvWNehETPMH4gyUIn+Nm1MMGIJBwhndMuMT0TDflGVc= X-Received: by 2002:a05:6402:540c:b0:4fb:e069:77ac with SMTP id ev12-20020a056402540c00b004fbe06977acmr812331edb.0.1679467979952; Tue, 21 Mar 2023 23:52:59 -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: Tue, 21 Mar 2023 23:52:23 -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-Queue-Id: B32D8C000B X-Rspamd-Server: rspam09 X-Rspam-User: X-Stat-Signature: erym8zhm1eoehsbb7npcqrxds7u758w4 X-HE-Tag: 1679467981-320250 X-HE-Meta: U2FsdGVkX180bi61tIVugA1fWGYiijz2aImUEeh10GqC1rzILfBeIYDHZb5KcOi9EPD9SJd61IpbWSbKsDmz3OG30aecCDpUjAo8ZMkMQqps6N6BxU7HkveRCG2DSVaPcdSxL//iUexW3IckZzUWUqNIWTkNbusFlbGBr20dbRTz6lpA4CFH+UcljJLuTpfVZIFESgL7ljt6ERR6q5//ydTUw0i2gRqIPEUf4j33K7Py3Ly0XXeDygqER6o2XcIy360ArOZZmmlR6hGZndWj73FFuhK1M/D1D5S7RPwGum29Zgh/sTitAG9Q6xqUaA9zhotvs2XEohwW48uB+XyfWvBNxnNN7t1YGkhcheIddVX3A2mi77tcQNnIfo1FY+1B5zkJ518ssKM+UmAfvVYK8ZLiYPpwS2Dla6iJlEeLSsyLgAbr42ACrj/04J4Xw1bjcuknCY5TRF6g1IkNittNfS+I9CIFCxu5/a7LoUh/B0WYfmKK/SaEmMQ85rUWe/i6szfEdnhy74tdf1JlbMrZqQKOZfqW5ajv7ltH3USV0Aa5D8RN4zNzcLnAQTNVq9khu5x9eSiz8I8P4Xf6svEoJJyYa5j8es8dNwGXJ0cQ4w06ExAqAljDbcQgDW53YZP3RrVY2fciAc2+CpCUjrWkPZxITomPpxRuRAQBnoujg1UVu31LRiiq5DRqRo/MuD9KXrf+9sO2Vx26g4koT8zRp6RJh7FFo+CIbvJABuaUb1MvGRCHBUJfS+wtV4OX7iuY8ftvv/j+0VhzjsxBYZMtlHhDhssn9BxGu/4tAKvHCK1pcvEiiJ8OIp7UXbI3KPe0lI974iIyU/9r5SUkAotdfR5XvBnzcq7WsQyKxU2FLkNRQk/U2ynNLH7WeJQTXQecqnvdMvOCRnh5HF4EJXulzgk1WoiVAKLEiU03Nab3kB8Z2JlCUa/8s9UhOTrstAalnWCt/wMvEsZsUXPruLn KSMXk20k v+boenZVdMx46mL46TFbqqqNWJ8PdrIKeg+touzkHuVsXxic89s4C1pslT5TN3+VSgEoApSsraYsNLBERBiJ0ySYZJmW0nJO50jNXbfL8spErYCJsAt1l9vEiure7G0QmzBVbl0s+lcAvqeI8AH2yJIasZpXEz64xkbI+Oai0fCDVQLIhk8nLlVZCG9adjIopsW7efk19NTRhT9/w7QKSGUtmYKz60Thlle9kovvUrETG9esTB99aozvVqvNW3T7smKR4bzPBRWARh1WdvOb8nhNbEIeZ6RTC2ezT6boc40kTn26PJAvch3NDvgs+tCzd1Vz5Ru2Vow6UmbaMmaB/bcppVrZ8XjG15mMP/0vY8oLGTx7KTQZjOTWc82gZwXJVbKfG+Tj2RGC26FrerVz/ArKUMxYS1QcU/LESsPGSQ2u1FdWyzWYjwd9MedRpgzzDxX2p 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:16=E2=80=AFPM Yosry Ahmed = wrote: > > 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, in= t 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 = today) Matthew, any thoughts on this?