From: Marco Elver <elver@google.com>
To: Andrey Konovalov <andreyknvl@gmail.com>
Cc: Alexander Potapenko <glider@google.com>,
Dmitry Vyukov <dvyukov@google.com>,
Vlastimil Babka <vbabka@suse.cz>,
kasan-dev@googlegroups.com,
Evgenii Stepanov <eugenis@google.com>,
Oscar Salvador <osalvador@suse.de>,
Andrew Morton <akpm@linux-foundation.org>,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
Andrey Konovalov <andreyknvl@google.com>,
andrey.konovalov@linux.dev
Subject: Re: [PATCH v2 00/19] stackdepot: allow evicting stack traces
Date: Mon, 9 Oct 2023 14:35:03 +0200 [thread overview]
Message-ID: <CANpmjNNoBuNCf5+ETLOgMbjjYFT0ssfb4yyYL21XRrOgMc_mfg@mail.gmail.com> (raw)
In-Reply-To: <CA+fCnZckOM0ycja3-=08=B3jwoWrYgn1w91eT=b6no9EN0UWLw@mail.gmail.com>
On Thu, 5 Oct 2023 at 22:36, Andrey Konovalov <andreyknvl@gmail.com> wrote:
>
> On Wed, Sep 13, 2023 at 7:14 PM <andrey.konovalov@linux.dev> wrote:
> >
> > From: Andrey Konovalov <andreyknvl@google.com>
> >
> > Currently, the stack depot grows indefinitely until it reaches its
> > capacity. Once that happens, the stack depot stops saving new stack
> > traces.
> >
> > This creates a problem for using the stack depot for in-field testing
> > and in production.
> >
> > For such uses, an ideal stack trace storage should:
> >
> > 1. Allow saving fresh stack traces on systems with a large uptime while
> > limiting the amount of memory used to store the traces;
> > 2. Have a low performance impact.
> >
> > Implementing #1 in the stack depot is impossible with the current
> > keep-forever approach. This series targets to address that. Issue #2 is
> > left to be addressed in a future series.
> >
> > This series changes the stack depot implementation to allow evicting
> > unneeded stack traces from the stack depot. The users of the stack depot
> > can do that via new stack_depot_save_flags(STACK_DEPOT_FLAG_GET) and
> > stack_depot_put APIs.
> >
> > Internal changes to the stack depot code include:
> >
> > 1. Storing stack traces in fixed-frame-sized slots; the slot size is
> > controlled via CONFIG_STACKDEPOT_MAX_FRAMES (vs precisely-sized
> > slots in the current implementation);
> > 2. Keeping available slots in a freelist (vs keeping an offset to the next
> > free slot);
> > 3. Using a read/write lock for synchronization (vs a lock-free approach
> > combined with a spinlock).
> >
> > This series also integrates the eviction functionality in the tag-based
> > KASAN modes.
> >
> > Despite wasting some space on rounding up the size of each stack record,
> > with CONFIG_STACKDEPOT_MAX_FRAMES=32, the tag-based KASAN modes end up
> > consuming ~5% less memory in stack depot during boot (with the default
> > stack ring size of 32k entries). The reason for this is the eviction of
> > irrelevant stack traces from the stack depot, which frees up space for
> > other stack traces.
> >
> > For other tools that heavily rely on the stack depot, like Generic KASAN
> > and KMSAN, this change leads to the stack depot capacity being reached
> > sooner than before. However, as these tools are mainly used in fuzzing
> > scenarios where the kernel is frequently rebooted, this outcome should
> > be acceptable.
> >
> > There is no measurable boot time performance impact of these changes for
> > KASAN on x86-64. I haven't done any tests for arm64 modes (the stack
> > depot without performance optimizations is not suitable for intended use
> > of those anyway), but I expect a similar result. Obtaining and copying
> > stack trace frames when saving them into stack depot is what takes the
> > most time.
> >
> > This series does not yet provide a way to configure the maximum size of
> > the stack depot externally (e.g. via a command-line parameter). This will
> > be added in a separate series, possibly together with the performance
> > improvement changes.
>
> Hi Marco and Alex,
>
> Could you PTAL at the not-yet-reviewed patches in this series when you
> get a chance?
There'll be a v3 with a few smaller still-pending fixes, right? I
think I looked at it a while back and the rest that I didn't comment
on looked fine, just waiting for v3.
Feel free to send a v3 by end of week. I'll try to have another look
today/tomorrow just in case I missed something, but if there are no
more comments please send v3 later in the week.
next prev parent reply other threads:[~2023-10-09 12:35 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-13 17:14 [PATCH v2 00/19] stackdepot: allow evicting stack traces andrey.konovalov
2023-09-13 17:14 ` [PATCH v2 01/19] lib/stackdepot: check disabled flag when fetching andrey.konovalov
2023-09-13 17:14 ` [PATCH v2 02/19] lib/stackdepot: simplify __stack_depot_save andrey.konovalov
2023-09-13 17:14 ` [PATCH v2 03/19] lib/stackdepot: drop valid bit from handles andrey.konovalov
2023-09-13 17:14 ` [PATCH v2 04/19] lib/stackdepot: add depot_fetch_stack helper andrey.konovalov
2023-09-13 17:14 ` [PATCH v2 05/19] lib/stackdepot: use fixed-sized slots for stack records andrey.konovalov
2023-09-15 8:55 ` Marco Elver
2023-09-15 16:46 ` Andrey Konovalov
2023-09-13 17:14 ` [PATCH v2 06/19] lib/stackdepot: fix and clean-up atomic annotations andrey.konovalov
2023-10-06 16:14 ` Alexander Potapenko
2023-10-06 17:21 ` Alexander Potapenko
2023-10-23 16:15 ` Andrey Konovalov
2023-09-13 17:14 ` [PATCH v2 07/19] lib/stackdepot: rework helpers for depot_alloc_stack andrey.konovalov
2023-10-09 8:59 ` Alexander Potapenko
2023-10-09 9:35 ` Alexander Potapenko
2023-10-23 16:16 ` Andrey Konovalov
2023-09-13 17:14 ` [PATCH v2 08/19] lib/stackdepot: rename next_pool_required to new_pool_required andrey.konovalov
2023-09-13 17:14 ` [PATCH v2 09/19] lib/stackdepot: store next pool pointer in new_pool andrey.konovalov
2023-09-19 16:13 ` Alexander Potapenko
2023-09-13 17:14 ` [PATCH v2 10/19] lib/stackdepot: store free stack records in a freelist andrey.konovalov
2023-10-09 9:32 ` Alexander Potapenko
2023-09-13 17:14 ` [PATCH v2 11/19] lib/stackdepot: use read/write lock andrey.konovalov
2023-10-09 9:45 ` Alexander Potapenko
2023-10-23 16:16 ` Andrey Konovalov
2023-09-13 17:14 ` [PATCH v2 12/19] lib/stackdepot: use list_head for stack record links andrey.konovalov
2023-09-16 17:43 ` Anders Roxell
2023-09-16 20:04 ` Andrew Morton
2023-10-09 12:15 ` Alexander Potapenko
2023-10-23 16:17 ` Andrey Konovalov
2023-09-13 17:14 ` [PATCH v2 13/19] kmsan: use stack_depot_save instead of __stack_depot_save andrey.konovalov
2023-10-09 10:00 ` Alexander Potapenko
2023-09-13 17:14 ` [PATCH v2 14/19] lib/stackdepot, kasan: add flags to __stack_depot_save and rename andrey.konovalov
2023-09-15 20:31 ` Marco Elver
2023-09-15 23:42 ` Andrey Konovalov
2023-10-09 10:09 ` Alexander Potapenko
2023-10-23 16:17 ` Andrey Konovalov
2023-09-13 17:14 ` [PATCH v2 15/19] lib/stackdepot: add refcount for records andrey.konovalov
2023-10-09 11:40 ` Alexander Potapenko
2023-09-13 17:14 ` [PATCH v2 16/19] lib/stackdepot: allow users to evict stack traces andrey.konovalov
2023-09-13 17:14 ` [PATCH v2 17/19] kasan: remove atomic accesses to stack ring entries andrey.konovalov
2023-10-09 12:05 ` Alexander Potapenko
2023-10-23 16:17 ` Andrey Konovalov
2023-09-13 17:14 ` [PATCH v2 18/19] kasan: check object_size in kasan_complete_mode_report_info andrey.konovalov
2023-10-09 12:17 ` Alexander Potapenko
2023-09-13 17:14 ` [PATCH v2 19/19] kasan: use stack_depot_put for tag-based modes andrey.konovalov
2023-10-09 12:24 ` Alexander Potapenko
2023-10-23 16:17 ` Andrey Konovalov
2023-10-05 20:35 ` [PATCH v2 00/19] stackdepot: allow evicting stack traces Andrey Konovalov
2023-10-09 12:35 ` Marco Elver [this message]
2023-10-09 19:39 ` Andrey Konovalov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CANpmjNNoBuNCf5+ETLOgMbjjYFT0ssfb4yyYL21XRrOgMc_mfg@mail.gmail.com \
--to=elver@google.com \
--cc=akpm@linux-foundation.org \
--cc=andrey.konovalov@linux.dev \
--cc=andreyknvl@gmail.com \
--cc=andreyknvl@google.com \
--cc=dvyukov@google.com \
--cc=eugenis@google.com \
--cc=glider@google.com \
--cc=kasan-dev@googlegroups.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=osalvador@suse.de \
--cc=vbabka@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).