From: Marco Elver <elver@google.com>
To: andrey.konovalov@linux.dev
Cc: Alexander Potapenko <glider@google.com>,
Andrey Konovalov <andreyknvl@gmail.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>
Subject: Re: [PATCH v3 00/19] stackdepot: allow evicting stack traces
Date: Tue, 24 Oct 2023 15:13:54 +0200 [thread overview]
Message-ID: <CANpmjNNoJQoWzODAbc4naq--b+LOfK76TCbx9MpL8+4x9=LTiw@mail.gmail.com> (raw)
In-Reply-To: <cover.1698077459.git.andreyknvl@google.com>
On Mon, 23 Oct 2023 at 18:22, <andrey.konovalov@linux.dev> wrote:
[...]
> ---
>
> Changes v2->v3:
> - Fix null-ptr-deref by using the proper number of entries for
> initializing the stack table when alloc_large_system_hash()
> auto-calculates the number (see patch #12).
> - Keep STACKDEPOT/STACKDEPOT_ALWAYS_INIT Kconfig options not configurable
> by users.
> - Use lockdep_assert_held_read annotation in depot_fetch_stack.
> - WARN_ON invalid flags in stack_depot_save_flags.
> - Moved "../slab.h" include in mm/kasan/report_tags.c in the right patch.
> - Various comment fixes.
>
> Changes v1->v2:
> - Rework API to stack_depot_save_flags(STACK_DEPOT_FLAG_GET) +
> stack_depot_put.
> - Add CONFIG_STACKDEPOT_MAX_FRAMES Kconfig option.
> - Switch stack depot to using list_head's.
> - Assorted minor changes, see the commit message for each path.
>
> Andrey Konovalov (19):
> lib/stackdepot: check disabled flag when fetching
> lib/stackdepot: simplify __stack_depot_save
> lib/stackdepot: drop valid bit from handles
> lib/stackdepot: add depot_fetch_stack helper
> lib/stackdepot: use fixed-sized slots for stack records
1. I know fixed-sized slots are need for eviction to work, but have
you evaluated if this causes some excessive memory waste now? Or is it
negligible?
If it turns out to be a problem, one way out would be to partition the
freelist into stack size classes; e.g. one for each of stack traces of
size 8, 16, 32, 64.
> lib/stackdepot: fix and clean-up atomic annotations
> lib/stackdepot: rework helpers for depot_alloc_stack
> lib/stackdepot: rename next_pool_required to new_pool_required
> lib/stackdepot: store next pool pointer in new_pool
> lib/stackdepot: store free stack records in a freelist
> lib/stackdepot: use read/write lock
2. I still think switching to the percpu_rwsem right away is the right
thing, and not actually a downside. I mentioned this before, but you
promised a follow-up patch, so I trust that this will happen. ;-)
> lib/stackdepot: use list_head for stack record links
> kmsan: use stack_depot_save instead of __stack_depot_save
> lib/stackdepot, kasan: add flags to __stack_depot_save and rename
> lib/stackdepot: add refcount for records
> lib/stackdepot: allow users to evict stack traces
> kasan: remove atomic accesses to stack ring entries
> kasan: check object_size in kasan_complete_mode_report_info
> kasan: use stack_depot_put for tag-based modes
>
> include/linux/stackdepot.h | 59 ++++--
> lib/Kconfig | 10 +
> lib/stackdepot.c | 418 ++++++++++++++++++++++++-------------
> mm/kasan/common.c | 7 +-
> mm/kasan/generic.c | 9 +-
> mm/kasan/kasan.h | 2 +-
> mm/kasan/report_tags.c | 27 +--
> mm/kasan/tags.c | 24 ++-
> mm/kmsan/core.c | 7 +-
> 9 files changed, 365 insertions(+), 198 deletions(-)
Acked-by: Marco Elver <elver@google.com>
The series looks good in its current state. However, see my 2
higher-level comments above.
next prev parent reply other threads:[~2023-10-24 13:14 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-23 16:22 andrey.konovalov
2023-10-23 16:22 ` [PATCH v3 01/19] lib/stackdepot: check disabled flag when fetching andrey.konovalov
2023-10-23 16:22 ` [PATCH v3 02/19] lib/stackdepot: simplify __stack_depot_save andrey.konovalov
2023-10-23 16:22 ` [PATCH v3 03/19] lib/stackdepot: drop valid bit from handles andrey.konovalov
2023-10-23 16:22 ` [PATCH v3 04/19] lib/stackdepot: add depot_fetch_stack helper andrey.konovalov
2023-10-23 16:22 ` [PATCH v3 05/19] lib/stackdepot: use fixed-sized slots for stack records andrey.konovalov
2023-10-23 16:22 ` [PATCH v3 06/19] lib/stackdepot: fix and clean-up atomic annotations andrey.konovalov
2023-10-23 16:22 ` [PATCH v3 07/19] lib/stackdepot: rework helpers for depot_alloc_stack andrey.konovalov
2023-10-23 16:22 ` [PATCH v3 08/19] lib/stackdepot: rename next_pool_required to new_pool_required andrey.konovalov
2023-10-23 16:22 ` [PATCH v3 09/19] lib/stackdepot: store next pool pointer in new_pool andrey.konovalov
2023-10-23 16:22 ` [PATCH v3 10/19] lib/stackdepot: store free stack records in a freelist andrey.konovalov
2023-10-23 16:22 ` [PATCH v3 11/19] lib/stackdepot: use read/write lock andrey.konovalov
2023-10-23 16:22 ` [PATCH v3 12/19] lib/stackdepot: use list_head for stack record links andrey.konovalov
2023-10-23 16:22 ` [PATCH v3 13/19] kmsan: use stack_depot_save instead of __stack_depot_save andrey.konovalov
2023-10-23 16:22 ` [PATCH v3 14/19] lib/stackdepot, kasan: add flags to __stack_depot_save and rename andrey.konovalov
2023-10-23 16:22 ` [PATCH v3 15/19] lib/stackdepot: add refcount for records andrey.konovalov
2023-10-23 16:22 ` [PATCH v3 16/19] lib/stackdepot: allow users to evict stack traces andrey.konovalov
2023-10-23 16:22 ` [PATCH v3 17/19] kasan: remove atomic accesses to stack ring entries andrey.konovalov
2023-10-23 16:22 ` [PATCH v3 18/19] kasan: check object_size in kasan_complete_mode_report_info andrey.konovalov
2023-10-23 16:22 ` [PATCH v3 19/19] kasan: use stack_depot_put for tag-based modes andrey.konovalov
2023-10-24 9:32 ` [PATCH v3 00/19] stackdepot: allow evicting stack traces Anders Roxell
2023-10-24 13:13 ` Marco Elver [this message]
2023-11-03 21:37 ` Andrey Konovalov
2023-11-06 17:41 ` 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='CANpmjNNoJQoWzODAbc4naq--b+LOfK76TCbx9MpL8+4x9=LTiw@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