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 A9D12EE644A for ; Fri, 15 Sep 2023 08:56:30 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 05EE16B0293; Fri, 15 Sep 2023 04:56:30 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 00F056B0295; Fri, 15 Sep 2023 04:56:29 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E1A326B0296; Fri, 15 Sep 2023 04:56:29 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id D29246B0293 for ; Fri, 15 Sep 2023 04:56:29 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 9E710C0FA3 for ; Fri, 15 Sep 2023 08:56:29 +0000 (UTC) X-FDA: 81238225698.21.3FF8E3E Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) by imf14.hostedemail.com (Postfix) with ESMTP id D43F4100009 for ; Fri, 15 Sep 2023 08:56:27 +0000 (UTC) Authentication-Results: imf14.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=iaIObNVL; spf=pass (imf14.hostedemail.com: domain of elver@google.com designates 209.85.128.42 as permitted sender) smtp.mailfrom=elver@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=1694768188; 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=BYq8Jh7JCWPHoRmWNIAaNE/xDHzvR7ZVrfUseotBNcQ=; b=svqGuj2yvte08jv8yo0iBq4LyVs+ovophCi5HdBuotEPlvAV/BNWHbz2RrCUZhoGRWZdNJ OI2LNdnkMDb0P564LcxLjYc+XZ12DwhVu77MNiZbFMlYMETe+2oQG2gGj8irZkh30IjYJY i0J7n9oxWIby7p2gyZq2wfysfaqgcVo= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1694768188; a=rsa-sha256; cv=none; b=Lox/+l6qX5+FwURDeWy48Xev58d0ZKY5FZ6zv+Gvw7+uKZG0aP9GCITSG+mXZFV5jK+b/8 ZjjEcSEEZaX9Uu4GWhtMEl0yKBwBRiDn0AsBc7dZaNj37mzchkxaBTy/qACcqUz2EA9Mb5 BBnHqoRIxgnsixB07jjS6Wh5JKzs3dA= ARC-Authentication-Results: i=1; imf14.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=iaIObNVL; spf=pass (imf14.hostedemail.com: domain of elver@google.com designates 209.85.128.42 as permitted sender) smtp.mailfrom=elver@google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-40473f1fe9fso15867455e9.2 for ; Fri, 15 Sep 2023 01:56:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1694768186; x=1695372986; darn=kvack.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=BYq8Jh7JCWPHoRmWNIAaNE/xDHzvR7ZVrfUseotBNcQ=; b=iaIObNVLRtZvWuQT/KGOp8AhiWbE/21B75Hgedmo4SizuBh8049GqYt5msuA/tWc7+ yz96kFiRfbFshgyEGr5JCKOqr6eq9Vd43oiJ067Z4551avl/J/ER1sbxy4te6AMErR0E eWw0LbiITXyPaV3VcKEWynChcq0dmuSXIHAum9I2WtnmX/BNqLy3xrAbPPrqXSbq+mjd BVE3GKI8yYvEZmhaw6lu4uKGYnPgVkskZGoYxdh4PBQmEcPxVwJWdu0PJtZZ1jzf7UEo +m/LdeL3Xuar6qCOhNKy+FJu1tD0c74muBOwODo1Xctt/DQxgEfTtNnpaOfn0QcMhxM+ asvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694768186; x=1695372986; h=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=BYq8Jh7JCWPHoRmWNIAaNE/xDHzvR7ZVrfUseotBNcQ=; b=SArddfQKhMzB+GhLLNxclySfW3FbTZfzLPLscGVZOskyfF66dHyJ53aFMIO6GCtAKG 1mh7laPEj/iu9b8RMHRBlyfT0YEWQ9V4l4pFHX3baXxiF/HybBcC27EUiiH3rQaKxsQu 8F2z91AXzvKfW5BZDE0GugAbpcIgFc8013SHGLDnwPkE7KIjIR85VfpMNuJ/VUhHl8tO +5frxuEV/zSSZQt5qeVDKwzK5I/stN+B/iExu2Zj4H0jE4/obALUKCEHjzJCAlGQitRj SeAjIuqZeY8U9aAh6ij0IfE0YxWtmYAQ228R9kPnEMIa4lXdlw118mhmDgwowHgMkcee FsDQ== X-Gm-Message-State: AOJu0YyaiEgnsooY05Q6UPiHzO5iJULU2Uj5Lbs4/+USutVON7h/a0Ud tpRBLBGWHHlLegJmX1H8O8i9thEOyqNMLKR94f4Raw== X-Google-Smtp-Source: AGHT+IGbfpMkKPbUanIk3MYDbQUP2Ou7ijo8dtheffnqw8FJQZjnwqfkkUu4a0i6bQ1W7s9Ku25jxkWhIJC7hOWss8Y= X-Received: by 2002:a1c:6a0e:0:b0:402:f536:41c5 with SMTP id f14-20020a1c6a0e000000b00402f53641c5mr1263710wmc.3.1694768186136; Fri, 15 Sep 2023 01:56:26 -0700 (PDT) MIME-Version: 1.0 References: <658f5f34d4f94721844ad8ba41452d54b4f8ace5.1694625260.git.andreyknvl@google.com> In-Reply-To: <658f5f34d4f94721844ad8ba41452d54b4f8ace5.1694625260.git.andreyknvl@google.com> From: Marco Elver Date: Fri, 15 Sep 2023 10:55:47 +0200 Message-ID: Subject: Re: [PATCH v2 05/19] lib/stackdepot: use fixed-sized slots for stack records To: andrey.konovalov@linux.dev Cc: Alexander Potapenko , Andrey Konovalov , Dmitry Vyukov , Vlastimil Babka , kasan-dev@googlegroups.com, Evgenii Stepanov , Oscar Salvador , Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Andrey Konovalov Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: D43F4100009 X-Rspam-User: X-Stat-Signature: cog6ard4hiwchnig9irjqydzbbyh9des X-Rspamd-Server: rspam03 X-HE-Tag: 1694768187-723063 X-HE-Meta: U2FsdGVkX19rXo3XpRZn0nnxXDZAlwbWkfXMC2p5SUz+H5NIUAfHTU3Zhzj+rOdYeYOA5xdlbo7qkM96ViOD3POqTkQJH03jfArc9XvwdtViQ0ExPjEtysiazFaqmcU9cNjQNWD35TAdIuQfnfp49mr/GoDY3mRyH8CB3HoqPHzHj5Ul7dcQEoX//iVAu2E7tvgCW9XEzoQnuFkZgN/pQHmXGqSRZt1H9yatzsukIrCHAZ6s+JdYqMTNG2dLujXDu+5rCmqopUFyU/BRHMR+LwjZNmgmtghCPqARQ41SlRb0lX97jWh8jeQor3un4MGcpXXHfcUC0SdnkmimPEPwFV0szae+j71swW2i5Z9DIisHeJ5xvLhIkYqJA/j4atJQZmEYJEt4eEGZ3BUTnc4/UvoV1slwYEMMp0SxflW2G9/ztr7TgxzNlHO/buy4mOYx/jt9zSvgZ9EZv1nzq8Ci8PUu/RBAk4+f9++jyBw8Xd32cRkZpi49rUrzYxWGvL7Uj/lCoa0zzbAqk3AzQ26OtYAnmU2ZodoLPh4athrFwgvK/LknuSZQCV3AYOxmFTUZrfnNgTS/nAzcSJft6F+Lszyla9rXnxMO3sp1g9TiqkPbq+2Yxr8xXhNk7PiRADaFbIJMEfZ4QhnZJt5+FTi8opyztctP4RSkRliL5EC86dxqtHJEdvYWzAbZAFu6UsDzZ9OX3d5rvHj9SWgMPrCglr7//ybH3NOGnrX4IsIwmx0cQI7lHpdRWjCX5AFiNmnP0kf7pe0fzObndIhnxxJrrZeTaE1OBiM0J+j9fJvO2eO1qDaYTRFshtWroYF7C6xUynn66osb2FsH6E1/OHvOHMnPCl8sUkgrnnZDL4QYshWFlYSP2UdJNS2vJ9TwSVv5g+0LdRcyAeR7ZC1pNBobJ2YF32bAdTmbd3YQI3/xbaDNN490NM4mgcoAD6rzmErEBnBPEA4g2QNdHR2AZJO qEz5L3FG 1ULIbhIKOhsvPYO1UJKYLU1+77aXnen7Cub+ufiSvNG117xqR4ydaP+1qNoSH8F8OIKZY4TZuQNhu32tPALjMqMjzAnaFpHVj4BazAKRdtbApCe6i0Jq4w07wTNoTnUSnHOkoyP/Qj3dzkI1jNl+l//tXyO5j9jWamnr7K49yTvm+6H9DDSbbxp2mC5YwNapNOyhG/WxZST4xGv/N8Aqx1xKRpbFd4YanxRvGkaLu20Gbd/IslbgZg1zZmMNZSg5CM2qBf0qefAt5pNb8zoB0iATEjc+hdB1+3ZzF/V/Fst4yPQgfcXCy0lffkSGn4DTCUqm/rq/uESl9vdwtVqbTniiUq9AGF5taseqyXw7pAEjoYM4= 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, 13 Sept 2023 at 19:14, wrote: > > From: Andrey Konovalov > > Instead of storing stack records in stack depot pools one right after > another, use fixed-sized slots. > > Add a new Kconfig option STACKDEPOT_MAX_FRAMES that allows to select > the size of the slot in frames. Use 64 as the default value, which is > the maximum stack trace size both KASAN and KMSAN use right now. > > Also add descriptions for other stack depot Kconfig options. > > This is preparatory patch for implementing the eviction of stack records > from the stack depot. > > Signed-off-by: Andrey Konovalov > > --- > > Changes v1->v2: > - Add and use STACKDEPOT_MAX_FRAMES Kconfig option. > --- > lib/Kconfig | 10 ++++++++-- > lib/stackdepot.c | 13 +++++++++---- > 2 files changed, 17 insertions(+), 6 deletions(-) > > diff --git a/lib/Kconfig b/lib/Kconfig > index c686f4adc124..7c32f424a6f3 100644 > --- a/lib/Kconfig > +++ b/lib/Kconfig > @@ -708,13 +708,19 @@ config ARCH_STACKWALK > bool > > config STACKDEPOT > - bool > + bool "Stack depot: stack trace storage that avoids duplication" > select STACKTRACE > > config STACKDEPOT_ALWAYS_INIT > - bool > + bool "Always initialize stack depot during early boot" > select STACKDEPOT This makes both STACKDEPOT and STACKDEPOT_ALWAYS_INIT configurable by users: https://www.kernel.org/doc/html/next/kbuild/kconfig-language.html#menu-attributes Usually the way to add documentation for non-user-configurable options is to add text in the "help" section of the config. I think the change here is not what was intended. > +config STACKDEPOT_MAX_FRAMES > + int "Maximum number of frames in trace saved in stack depot" > + range 1 256 > + default 64 > + depends on STACKDEPOT > + > config REF_TRACKER > bool > depends on STACKTRACE_SUPPORT > diff --git a/lib/stackdepot.c b/lib/stackdepot.c > index 9a004f15f59d..128ece21afe9 100644 > --- a/lib/stackdepot.c > +++ b/lib/stackdepot.c > @@ -58,9 +58,12 @@ struct stack_record { > u32 hash; /* Hash in the hash table */ > u32 size; /* Number of stored frames */ > union handle_parts handle; > - unsigned long entries[]; /* Variable-sized array of frames */ > + unsigned long entries[CONFIG_STACKDEPOT_MAX_FRAMES]; /* Frames */ > }; > > +#define DEPOT_STACK_RECORD_SIZE \ > + ALIGN(sizeof(struct stack_record), 1 << DEPOT_STACK_ALIGN) > + > static bool stack_depot_disabled; > static bool __stack_depot_early_init_requested __initdata = IS_ENABLED(CONFIG_STACKDEPOT_ALWAYS_INIT); > static bool __stack_depot_early_init_passed __initdata; > @@ -258,9 +261,7 @@ static struct stack_record * > depot_alloc_stack(unsigned long *entries, int size, u32 hash, void **prealloc) > { > struct stack_record *stack; > - size_t required_size = struct_size(stack, entries, size); > - > - required_size = ALIGN(required_size, 1 << DEPOT_STACK_ALIGN); > + size_t required_size = DEPOT_STACK_RECORD_SIZE; > > /* Check if there is not enough space in the current pool. */ > if (unlikely(pool_offset + required_size > DEPOT_POOL_SIZE)) { > @@ -295,6 +296,10 @@ depot_alloc_stack(unsigned long *entries, int size, u32 hash, void **prealloc) > if (stack_pools[pool_index] == NULL) > return NULL; > > + /* Limit number of saved frames to CONFIG_STACKDEPOT_MAX_FRAMES. */ > + if (size > CONFIG_STACKDEPOT_MAX_FRAMES) > + size = CONFIG_STACKDEPOT_MAX_FRAMES; > + > /* Save the stack trace. */ > stack = stack_pools[pool_index] + pool_offset; > stack->hash = hash; > -- > 2.25.1 >