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 6D1D5D60D0B for ; Tue, 19 Nov 2024 02:30:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BBAB56B0082; Mon, 18 Nov 2024 21:29:59 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id B6B236B0088; Mon, 18 Nov 2024 21:29:59 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A59806B0093; Mon, 18 Nov 2024 21:29:59 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 88C886B0082 for ; Mon, 18 Nov 2024 21:29:59 -0500 (EST) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 3B8EF1C503D for ; Tue, 19 Nov 2024 02:29:59 +0000 (UTC) X-FDA: 82801263048.22.16EF069 Received: from mail-lj1-f176.google.com (mail-lj1-f176.google.com [209.85.208.176]) by imf24.hostedemail.com (Postfix) with ESMTP id E74FD180028 for ; Tue, 19 Nov 2024 02:29:50 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=BjaCZED+; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf24.hostedemail.com: domain of 42.hyeyoo@gmail.com designates 209.85.208.176 as permitted sender) smtp.mailfrom=42.hyeyoo@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1731983214; a=rsa-sha256; cv=none; b=B5LMCc20ZL04E+dkQ2JXXS+CnKStOcj6idcTWDDMBVV/8Q1e7taFt+G7Y0l/1WqRr6J3CZ 51ZdnGH50u4di99q99uDkZdWn6U+4SgpgWhraRKQozEh7DUFCQqmFhZpzcHLkv5WsaME0l ANmroRXM7jtbnm7xvpkrnu6HhnXfRps= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=BjaCZED+; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf24.hostedemail.com: domain of 42.hyeyoo@gmail.com designates 209.85.208.176 as permitted sender) smtp.mailfrom=42.hyeyoo@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1731983214; 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=jDu2TDDimIym5HIL4t/Fyx220cmR1Bl82M9X+9neXZA=; b=4Oi2gdZoiFC83b8QYAWHJLxKjqFEb3rjKN/+J5pwmfJgiAhwYdKPEwveoy7DIT+d+O63hy taiWg3n8uSD4oSEhnSgQj4rRv5toKVeKRi3ijK37vLCYNK6Kf2lFOBeqDfRLlR8yNigglp 2WO1k1C8CIn/Obhl4fBt1n3i1bWu5zk= Received: by mail-lj1-f176.google.com with SMTP id 38308e7fff4ca-2fb51f39394so4602771fa.2 for ; Mon, 18 Nov 2024 18:29:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1731983395; x=1732588195; 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=jDu2TDDimIym5HIL4t/Fyx220cmR1Bl82M9X+9neXZA=; b=BjaCZED+t9YoKangysubuWEihF9qwsjJXOL6/z4oSAlrQ+QJhHbV0Z56lG5ZzkBj2J 7zdIZ8yKDwosVv0HKdTa9nRox4FBDI5Z2ywZlGACKUsxGZAeVllLFGto9qO36+EOunc+ RM2565eBx4FLZXz6wChTIfa5Aem7EwM3mVSxlUi0rkHooaJJfByeUtRJUfXMSBhIoWMj UuUUPugqaoRw/3FckYGFf7ggpAZcnOA5bWmkAnBELXyx6bED5YDtJARtXQKn0jPheWxx vV1xWm3egTijmT1XnUMb6uWwAUXuQKpu55CH43hBu6CaEeW3izB5qyO9NIS2fWLnSuk8 7oSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1731983395; x=1732588195; 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=jDu2TDDimIym5HIL4t/Fyx220cmR1Bl82M9X+9neXZA=; b=Jgeayye1fUInIxoe8NIhAr4K9cm4OwEjMcJd5CCRJTCR5FjtJ8C7Kcf8c1gIR/il4j kulR3xe201w1ZD+nrmrswgbSoTFEDHboLuf9mmrjeT4/qTIP4ODbvWlCg+wRswkQ6Xk3 KD+fWg5UJnGmq6SyhAKpPqcDMMkZceoRCyTsx9/rMBnZi1FhHlgbU6huyxnqAM24wGwD gpXt/ak46Fx9t/f0mr6b2/LgaZ7vCovvFcrRUW/7rzfRutBBtt0ZRzvkDN7L82PlPKXi lwdn908z+xb4devagf64ctZTPhyrV2njdiDX0FJG909ixfDjaOkdkoSI+hibNBnwHiUx B/cQ== X-Forwarded-Encrypted: i=1; AJvYcCVaXYPbvzGJRPagjFfQHAo2WykPZhgerzGuVjzCjxwqS148KNfdANui83ery8pPcf8xvSxE408AYQ==@kvack.org X-Gm-Message-State: AOJu0Yz2W7WcDIOn7ZIXNeBknA3YEuhmzu+m9DB/eUYySa1E6qz1aFOZ Num5U4cxub2MoKm4GNO4gaQHYi+E2GpqOdMRNgsIz4JkA3uyNj/zG/Xil3cpLrGtCbMCz1aGC5K DjFlfrGgCFMyXEujqHuoz1IG6pY8= X-Google-Smtp-Source: AGHT+IElFgWUK61PKPPQAD8gSlLf9PUekbFJYHZdgq5RuTaHPZtmenazC7fFM2ZO4hhOfG7tmksbTAYcNrxOP3bXovk= X-Received: by 2002:a05:651c:2110:b0:2fb:584a:8ea6 with SMTP id 38308e7fff4ca-2ff6098d59cmr63348961fa.27.1731983395060; Mon, 18 Nov 2024 18:29:55 -0800 (PST) MIME-Version: 1.0 References: <20241112-slub-percpu-caches-v1-0-ddc0bdc27e05@suse.cz> <20241112-slub-percpu-caches-v1-6-ddc0bdc27e05@suse.cz> <9dc33d5f-fc04-4780-80ae-3c5f80a8b891@suse.cz> In-Reply-To: <9dc33d5f-fc04-4780-80ae-3c5f80a8b891@suse.cz> From: Hyeonggon Yoo <42.hyeyoo@gmail.com> Date: Tue, 19 Nov 2024 11:29:43 +0900 Message-ID: Subject: Re: [PATCH RFC 6/6] mm, slub: sheaf prefilling for guaranteed allocations To: Vlastimil Babka Cc: Suren Baghdasaryan , "Liam R. Howlett" , Christoph Lameter , David Rientjes , Pekka Enberg , Joonsoo Kim , Roman Gushchin , "Paul E. McKenney" , Lorenzo Stoakes , Matthew Wilcox , Boqun Feng , Uladzislau Rezki , linux-mm@kvack.org, linux-kernel@vger.kernel.org, rcu@vger.kernel.org, maple-tree@lists.infradead.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Stat-Signature: n74b3kdpsnz9watfog5rs8wqdqieahx3 X-Rspamd-Queue-Id: E74FD180028 X-Rspamd-Server: rspam08 X-Rspam-User: X-HE-Tag: 1731983390-994651 X-HE-Meta: U2FsdGVkX18eDTF1R+x0Aadd4PrR9ghuLNjgjtIGxXeRr1ysXqTFWiDgWFjmQ8ZOSnOhau4OIqjeQaxaH1a6pVEFhXH2hFNaToWLcE2MQB/Lgsclo6eo20mg0zslpjCU22br4mSsAGS88YZZLxxXk+jV//pz+6HklFBaUht49XixLSoIF7i4olnru641N5kpFFkv7Bmspb3AmS+Me5+k6cTprQqHpmIh9eDBz6VRd2T6iIQvG1aC6Q+gIBRh2T6bCpHAHtQckJIcxNDLsI4z27xhve4vSyPlCw113xhofWGkH/kezTKL+dXFuSk7LT/37hApKA0LwSZzMUO3QFb89dyWZebU58nlET6mEkOP1LNrGd7fdTgld1de/bVvFFE7stGOo1kYQO88wgLQ4gpS5Ba7tGOFezbAWDfcqN9DSwoiQzxCmCdlBZoBuUoVLpOji/4AwaVgKe7EkbnJYBCNIYO2AxOyyrEZV84U/wuWqLrzVuMsqQGps5TWwMwsk+V9GKspm1d5FjgjRHKPr1ZfRQO0m/wWblwQMInnpTh6Ezh46TDSfdGi0kXVVdN8OLAuPSMTE1b5c5b6MY28izrG72klERnberaF5Hj5adtB444qTx+NdxiVFpGiZ3Urv/v25k4v/djjT9XFkqDFWIQhDvQzLfQudU2LUvPE+JnNHHI/JKn9BDhY/8CL6n+Mt/x1XNPBnLy1RAj67vd4OuCHhmEVYf8T/aKnA/GBuDAIkp8ucqnTnwxBm/Ny7Z6HEHMgNJPTLnZynLj9CTv1mEiYgjMEx2r/6+ynvHgxSzHQ5tZxKV8aG2QJmrWbvfTZswg68REhpFN0FvYB44BolnSU4pXRwzybR3J27YmYK6zVV/PPah+WypPh/jbwvA+0inDZNfvGydMdZDYpvI5YaMDkfHGbKEoq99mn4mEmRadEBk7OPIHwwvjYMgtmpJsEWL2UL+Z/rOQJoqxBKOxTuMb Xk4TRo3g 4JneTzGB2Eet8MgL3wivR4RL/z/LTRQL1027PQU67VOFnDknzrFI6z73XOelfWZHeZvJm4NcmEpdsX5x9Cn+j188D9qPLXNRU92aoZKXbzVXR0GHl3u9GPwaG6q2XC40wxy2XkN+t81HI0vjtW8U4Bx99E9j3tdv8VyJ8vbzjmRFbLkgo1jtCVmlFWrW6kb9M8vewDJLDJs3CS+Z1VQBsNYS2HnQV6GKaCm8b1GeypZ05/rgis7zIUIzdY8NoesOhBpK/dlcB0c3aLZ20uq1wvPFmy9q+srGtQUJlKOjtgrXH2dlvnaCOLUjVbVaJW3k1YfQ4jrYsjB9Hc9RmkK+xinezHeZo1sSR8rD1IDaASgWRT4k3tppOz2fp+YZ6z5N/2F9yO63FPDKo0OqX41t3phqRlr+JI62N9ahfkBBkhfeV9vk= 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: On Mon, Nov 18, 2024 at 11:26=E2=80=AFPM Vlastimil Babka w= rote: > > On 11/18/24 14:13, Hyeonggon Yoo wrote: > > On Wed, Nov 13, 2024 at 1:39=E2=80=AFAM Vlastimil Babka wrote: > >> + > >> +/* > >> + * Allocate from a sheaf obtained by kmem_cache_prefill_sheaf() > >> + * > >> + * Guaranteed not to fail as many allocations as was the requested co= unt. > >> + * After the sheaf is emptied, it fails - no fallback to the slab cac= he itself. > >> + * > >> + * The gfp parameter is meant only to specify __GFP_ZERO or __GFP_ACC= OUNT > >> + * memcg charging is forced over limit if necessary, to avoid failure= . > >> + */ > >> +void * > >> +kmem_cache_alloc_from_sheaf_noprof(struct kmem_cache *s, gfp_t gfp, > >> + struct slab_sheaf *sheaf) > >> +{ > >> + void *ret =3D NULL; > >> + bool init; > >> + > >> + if (sheaf->size =3D=3D 0) > >> + goto out; > >> + > >> + ret =3D sheaf->objects[--sheaf->size]; > >> + > >> + init =3D slab_want_init_on_alloc(gfp, s); > >> + > >> + /* add __GFP_NOFAIL to force successful memcg charging */ > >> + slab_post_alloc_hook(s, NULL, gfp | __GFP_NOFAIL, 1, &ret, ini= t, s->object_size); > > > > Maybe I'm missing something, but how can this be used for non-sleepable= contexts > > if __GFP_NOFAIL is used? I think we have to charge them when the sheaf > > AFAIK it forces memcg to simply charge even if allocated memory goes over > the memcg limit. So there's no issue with a non-sleepable context, there > shouldn't be memcg reclaim happening in that case. Ok, but I am still worried about mem alloc profiling/memcg trying to allocate some memory with __GFP_NOFAIL flag and eventually passing it to the buddy allocator, which does not want __GFP_NOFAIL without __GFP_DIRECT_RECLAIM? e.g.) memcg hook calls alloc_slab_obj_exts()->kcalloc_node()->....->alloc_pages() > > is returned > > via kmem_cache_prefill_sheaf(), just like users of bulk alloc/free? > > That would be very costly to charge/uncharge if most of the objects are n= ot > actually used - it's what we want to avoid here. > Going over the memcgs limit a bit in a very rare case isn't considered su= ch > an issue, for example Linus advocated such approach too in another contex= t. Thanks for the explanation! That was a point I was missing. > > Best, > > Hyeonggon > > > >> +out: > >> + trace_kmem_cache_alloc(_RET_IP_, ret, s, gfp, NUMA_NO_NODE); > >> + > >> + return ret; > >> +} > >> + > >> /* > >> * To avoid unnecessary overhead, we pass through large allocation re= quests > >> * directly to the page allocator. We use __GFP_COMP, because we will= need to > >> > >> -- > >> 2.47.0 > >> >