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 7C99FC83F1B for ; Wed, 16 Jul 2025 21:18:53 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9A9816B009D; Wed, 16 Jul 2025 17:18:52 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 981056B009E; Wed, 16 Jul 2025 17:18:52 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8BE016B00A1; Wed, 16 Jul 2025 17:18:52 -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 7BA336B009D for ; Wed, 16 Jul 2025 17:18:52 -0400 (EDT) Received: from smtpin23.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id B56BA12E089 for ; Wed, 16 Jul 2025 21:18:51 +0000 (UTC) X-FDA: 83671392462.23.E52461F Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) by imf14.hostedemail.com (Postfix) with ESMTP id EE53C10000A for ; Wed, 16 Jul 2025 21:18:49 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=dcnqZwru; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf14.hostedemail.com: domain of 3OBd4aAYKCJE5F83JF19916z.x97638FI-775Gvx5.9C1@flex--kuniyu.bounces.google.com designates 209.85.216.73 as permitted sender) smtp.mailfrom=3OBd4aAYKCJE5F83JF19916z.x97638FI-775Gvx5.9C1@flex--kuniyu.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1752700730; a=rsa-sha256; cv=none; b=xKdHu+kjL1JRtXIU5Pq6MClYOjRH8a9nOIGYONWKpY0M8tMudSMhzmVsfhpoHLXeiI0bta Zfq6LOCoCZrkab1RYqIa90RO7EmyyjnfmhvpRz6TAU2LVYK+lraDcbyhTH8Wr8BpmoPKsg Hba9DGcZJWqgYQU/jDIbXl2/ofeesKA= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=dcnqZwru; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf14.hostedemail.com: domain of 3OBd4aAYKCJE5F83JF19916z.x97638FI-775Gvx5.9C1@flex--kuniyu.bounces.google.com designates 209.85.216.73 as permitted sender) smtp.mailfrom=3OBd4aAYKCJE5F83JF19916z.x97638FI-775Gvx5.9C1@flex--kuniyu.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1752700730; 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=HwyHL08uDg0H4Zvzdx0VcWm1I+dQ3D755vLxnH2W7iM=; b=S0HBNlV0tNnG+Tles1kqfaNLB3JN3BaUXpYG4+7TF1MXu+6G0S3lsbMMM30sifLQ5qen3O 4o+3pMtnoqHsmeSY1GE02vbysDk2sSeO6VeDFVXQX7RA6NvgzLNXIOxLojnFG9nEFjPRkJ v74cgcLKHRUt/cbSbD5Q7A1GkWL0n6w= Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-3138c50d2a0so400055a91.2 for ; Wed, 16 Jul 2025 14:18:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1752700729; x=1753305529; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=HwyHL08uDg0H4Zvzdx0VcWm1I+dQ3D755vLxnH2W7iM=; b=dcnqZwruE5O4ieWo7paQVb32Ri6lYaOZfI7Fv013mKUQKbQC13iC3c9CWcZnzZKSxK hqyhHYFpnbiyory1sU7OGXNpkor/Rx5cuSnok73UjbDp1udM2OAE3lFii2h1gqAHZVC0 +Oh0AA1Up3+fAxKsHeaDUsWdrpLs4xRhZ147CmWegNFyR6eNl9vbrIJZSXM5j3d9PRPc RuuxM8MXKXnXrp5ndubIWE86MVicn6F4KXJ3Il8FD6nHdwlDDpA9pu8NF5QR3FuZW5d5 mlPFxcvZHKeldz9ddPmdDRxtVIHQwmdf/jbtuWCy1HXpvZ6FEiw+Mpo1/Qo273fsx5cp Eo3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752700729; x=1753305529; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=HwyHL08uDg0H4Zvzdx0VcWm1I+dQ3D755vLxnH2W7iM=; b=wZldxK+6+hlNZQ1cH0khdeLcb33kZBFkFze/348emneW8V0ylh/wnwIJMRgoMmKcjD bY9XkwEp3aUWPryDL0pY0gfDYzn452wykN1bLnqH7ZzXa1rxTXW2Csc7ffzHFr+X3GGa p/snPHWFz++3w3GM2oGwdC6pEMwM47h9O7p9kseuQBmOK+i2CsQw+oGJtHlNA8/+GTV3 gIbXZtgNj4QgqchSO2X817GHGa9x/I1urUK6jYL4j5J4ag0a+tKwYFCWtRnYbjgedR4A 4kMrwvHTsHDJimx4yuTBn0dPU8x0qSLEaW4jKrx5OI0nJH5a4hi/cK46RAFsQiE89LpV j/qw== X-Forwarded-Encrypted: i=1; AJvYcCUXlQv2cZHfKFhQFWmg7ESFZ+RztbYGAevuuw87B8CK3csW0yOR4aBWFIT4sex+KbGcNT+1mUsDWw==@kvack.org X-Gm-Message-State: AOJu0YyefZVzVSJD7onuwXzOYcuskfFdlTSwY4uQisPr1X+sJhUsg3e2 jzn5LE44Oe5VkmWVBQOrA+1xWQrPNAjZqqwMKbTOVoC5OS8iJ3GUBHaolGEnrKYu4QANPnJHlJW zWFzOaw== X-Google-Smtp-Source: AGHT+IFzPBraeu5yl3qoniZAS6EpK9P7xL7Glv7B/qNsVh5con5lGHvDkisjQNfzWR6mBA0E8FgP+VZJoRM= X-Received: from pjbli18.prod.google.com ([2002:a17:90b:48d2:b0:2e0:915d:d594]) (user=kuniyu job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:5183:b0:313:17e3:7ae0 with SMTP id 98e67ed59e1d1-31caf921ed9mr487286a91.34.1752700728625; Wed, 16 Jul 2025 14:18:48 -0700 (PDT) Date: Wed, 16 Jul 2025 21:16:37 +0000 In-Reply-To: <74yeh3tde3uzugxplhpr7mfvrtnoqoek2weqbwujegb53yybcw@lgqtoskse6ef> Mime-Version: 1.0 References: <74yeh3tde3uzugxplhpr7mfvrtnoqoek2weqbwujegb53yybcw@lgqtoskse6ef> X-Mailer: git-send-email 2.50.0.727.gbf7dc18ff4-goog Message-ID: <20250716211845.354258-1-kuniyu@google.com> Subject: Re: [PATCH] memcg: Keep socket_pressure fresh on 32-bit kernel. From: Kuniyuki Iwashima To: shakeel.butt@linux.dev Cc: akpm@linux-foundation.org, davem@davemloft.net, hannes@cmpxchg.org, kuni1840@gmail.com, kuniyu@google.com, linux-mm@kvack.org, ncardwell@google.com, vdavydov.dev@gmail.com Content-Type: text/plain; charset="UTF-8" X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: EE53C10000A X-Stat-Signature: o7sspab934zjxuu8o6683uzcou8r6tsu X-Rspam-User: X-HE-Tag: 1752700729-759024 X-HE-Meta: U2FsdGVkX1+W2bRctEFKJoioHCNyqedDlvOIIqSoPEeqnug967cO401n7ZKT6R1NV5f73N9NeMfRDtVV9GsanoSQN7od8nBqMb2aDwx4cTMf8AFzAmpVNb5msBYABjaYLs5doWfA+Mb4HqPjyKKQay98drPz6EiMXzX8i2Cq49uEbOi0k6biFftWNjVR5OU5pCPpn8saqC25I3GLzHIcV5x0HCY+Q8nCYCkp+/8CPVfE3Q5Gs3oeTC9fnapyc86H/ZXaFI1SWkeWqSsah+ZT9dV8HCqk0lF+w/UI6D27x+jiFQm4bRe2KxrCPOZ97bNGX0Tnp+boynTJJrn327drjeVbIqQV6uoWDedQHLk566AvLoELhLp9E52mmZN0eShE70qw8QyoLyJ4ViofU+kI/f55ZylZ8ZRdUrGhdLVNulWYG1GA1N9NMfKknwc4utpl5T8segLFK6ZPr/tv6lMF4gdiziW0i1MwgLouAuXGECuTiqUqhsbVUFYf/KNyUgc47JBwNko2ydGoCMDOXNqVcftSs7JY/3s7gZgL2JTlVAnFDfUAYoWNmIIXbqpyUDc563vumPrAu0CJQCP4TKIKrR1MhWXO0xLkve+ebQKzNmkHuOdelBHL5bSRLKcVnHyRNOcgolJKf4LTpEexlKcnG0XnQsaGQthk6bCxnXYAqvwBnkovSKSIu4zJh7tsAEhTeF+pI5sCRMkK8SLy6ZKGFIeH+P3hvFlR7Ckeb4lprb2552Hds8EIwlGuNaZyPuzFpD0JFiLHqlQeYNkOIgk7S08akEy82CMwOIKEIRY3mAb/6DXbvn8o+0dVQf62/FVSfDJYBeN6vienEclgSvEyb/Szf/nRXSkgoBrauZLsITj//legaTGj25Ty8qPJYsPBE5jJW3d/uWwtYmlPI5VKRxb3LoWFm58Lf5wRMe70xykQPXrjn2/FAeBGeDhKBDU3rVPJCkSShnbEjIQOHFJ /FtsWxQG QOIhWpISrfI+OD49FPVO47u6U5Y29Z8v+E55JXCelnG6CH37MA4wnNxfEF00JL/Rfgyt/Aopw/FH1YCJKvVoJ3BLW7qYPqsTHwcNmz7ZTzvHqaVr9++YhQvY9dfzniDTU/En8H+Kln6KZFTsEFqgE2CEFsqH+QS5akn7UhZAia5c5m1jbAAt45L2fOt8Qc0nbYdiecIVPqy7lBLaqWVPxXTT1z4Y1vtovHwtrnbs3nC/42cFtQryuIX2X35ebLqD+MSPQFx5vCCTLesQUMKGntYUUl2N57vQLNWKlgu3rgSL7HX65HAYg/Muvd2uUxD77f+H/+ZsEH0PlXYTIrhboVmhK8INM9TrvUypdlimACOfoBeHR/W6gwvaoMTwtUl+DYJcGvHRQqcHpGKwxOsMzivXATXVNnyrd/7lK4ydMpqQ+oDyp5gBoc9ls8ZCHg6iAvhFZZLc9Tu9Yrdu52jnN44hZkZxOs5fii4EdjKi6Dr1HdJA/C/t4pBhkE/N5OTQsirOGtxAr6wEQuedk9D7k3lXRTOM/szwOpTQQitcD3sbzCL9rEh3cNRW9chnZ4pyVaVagV8j/bbimoiVUO/rA5ehyJVI9L8QxfxYyqdYEH6+FIiGVeSX/mAKjZQ== 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: List-Subscribe: List-Unsubscribe: From: Shakeel Butt Date: Wed, 16 Jul 2025 12:59:13 -0700 > On Wed, Jul 16, 2025 at 04:29:12AM +0000, Kuniyuki Iwashima wrote: > > memcg->socket_pressure is initialised with jiffies when the memcg > > is created. > > > > Once vmpressure detects that the cgroup is under memory pressure, > > the field is updated with jiffies + HZ to signal the fact to the > > socket layer and suppress memory allocation for one second. > > > > Otherwise, the field is not updated. > > > > mem_cgroup_under_socket_pressure() uses time_before() to check if > > jiffies is less than memcg->socket_pressure, and this has a bug on > > 32-bit kernel. > > > > if (time_before(jiffies, memcg->socket_pressure)) > > return true; > > > > As time_before() casts the final result to long, the acceptable delta > > between two timestamps is 2 ^ (BITS_PER_LONG - 1). > > > > On 32-bit kernel with CONFIG_HZ=1000, this is about 24 days. > > > > >>> (2 ** 31) / 1000 / 60 / 60 / 24 > > 24.855134814814818 > > > > Once 24 days have passed since the last update of socket_pressure, > > mem_cgroup_under_socket_pressure() starts to lie until the next > > 24 days pass. > > > > Thus, we need to update socket_pressure to a recent timestamp > > periodically on 32-bit kernel. > > > > Let's do that every 24 hours, with a variation of about 0 to 4 hours. > > > > The variation is to avoid bursting by cgroups created within a small > > timeframe, like boot-up. > > > > The work could be racy but does not take vmpr->sr_lock nor re-evaluate > > vmpressure_calc_level() under the assumption that socket_pressure will > > get updated soon if under memory pressure, because it persists only > > for one second. > > > > Note that we don't need to worry about 64-bit machines unless they > > serve for 300 million years. > > > > >>> (2 ** 63) / 1000 / 60 / 60 / 24 / 365 > > 292471208.6775361 > > > > Fixes: 8e8ae645249b8 ("mm: memcontrol: hook up vmpressure to socket pressure") > > Reported-by: Neal Cardwell > > Signed-off-by: Kuniyuki Iwashima > > Is this a real issue which you have seen in the production? No, this is a theoretical issue that Neal found a while ago. > I wonder if > we can just reset memcg->socket_pressure in > mem_cgroup_under_socket_pressure() for 32 bit systems if we see > overflow? I guess you mean like below ? This doesn't work when jiffies is close to ULONG_MAX and socket_pressure is close to 0 and the 'actual' time delta is within HZ. diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index 87b6688f124a7..2bf92514b67ff 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h @@ -1609,6 +1609,10 @@ static inline bool mem_cgroup_under_socket_pressure(struct mem_cgroup *memcg) return !!memcg->tcpmem_pressure; #endif /* CONFIG_MEMCG_V1 */ do { +#if BITS_PER_LONG == 32 + if (jiffies - READ_ONCE(memcg->socket_pressure) > LONG_MAX) { + WRITE_ONCE(memcg->socket_pressure, jiffies - HZ); +#endif if (time_before(jiffies, READ_ONCE(memcg->socket_pressure))) return true; } while ((memcg = parent_mem_cgroup(memcg)));