Re: [PATCH v6][makedumpfile 00/10] btf/kallsyms based makedumpfile extension for mm page filtering

Tao Liu <[email protected]>
Newsgroups org.infradead.lists.kexec
Message-ID <CAO7dBbWgeM7AsdXz0A6P1Lz130ibq2-tXLcwecXoP67ZB3k7+g@mail.gmail.com>
Hi Kazu,

On Mon, Jun 22, 2026 at 5:57 PM HAGIO KAZUHITO(萩尾 一仁)
<[email protected]> wrote:
>
> Hi Tao,
>
> I've tested some, no issue was detected.
>
> [without the patchset]
> 8.09user 1.01system 0:10.04elapsed 90%CPU (0avgtext+0avgdata 4480maxresident)k
> 18672inputs+763736outputs (0major+268minor)pagefaults 0swaps
>
> [with the patchset without --extension]
> 8.08user 0.99system 0:09.94elapsed 91%CPU (0avgtext+0avgdata 4608maxresident)k  # +128k
> 19640inputs+763720outputs (4major+277minor)pagefaults 0swaps
>
> [with the patchset with --extension]
> 6.38user 0.74system 0:07.92elapsed 89%CPU (0avgtext+0avgdata 16984maxresident)k # +12M
> 17048inputs+725240outputs (0major+3121minor)pagefaults 0swaps
>
> There is also no noticeable rise in max rss without --extension.
>
> Maybe support for compound pages can be debatable in the future, but
> I think the current patchset is good enough for extension v1.
> So merged 01/10 - 09/10 patches, thank you for the great work!

Thanks for your testing, also many thanks for your code review and suggestions!

Thanks,
Tao Liu

>
> Thanks,
> Kazu
>
>
>
> On 2026/06/17 14:18, Tao Liu wrote:
> > A) This patchset will introduce the following features to makedumpfile:
> >
> >    1) Add .so extension support to makedumpfile
> >    2) Enable btf and kallsyms for symbol type and address resolving.
> >
> > B) The purpose of the features are:
> >
> >    1) Currently makedumpfile filters mm pages based on page flags, because flags
> >       can help to determine one page's usage. But this page-flag-checking method
> >       lacks of flexibility in certain cases, e.g. if we want to filter those mm
> >       pages occupied by GPU during vmcore dumping due to:
> >
> >       a) GPU may be taking a large memory and contains sensitive data;
> >       b) GPU mm pages have no relations to kernel crash and useless for vmcore
> >          analysis.
> >
> >       But there is no GPU mm page specific flags, and apparently we don't need
> >       to create one just for kdump use. A programmable filtering tool is more
> >       suitable for such cases. In addition, different GPU vendors may use
> >       different ways for mm pages allocating, programmable filtering is better
> >       than hard coding these GPU specific logics into makedumpfile in this case.
> >
> >    2) Currently makedumpfile already contains a programmable filtering tool, aka
> >       eppic script, which allows user to write customized code for data erasing.
> >       However it has the following drawbacks:
> >
> >       a) cannot do mm page filtering.
> >       b) need to access to debuginfo of both kernel and modules, which is not
> >          applicable in the 2nd kernel.
> >       c) eppic library has memory leaks which are not all resolved [1]. This
> >          is not acceptable in 2nd kernel.
> >
> >       makedumpfile need to resolve the dwarf data from debuginfo, to get symbols
> >       types and addresses. In recent kernel there are dwarf alternatives such
> >       as btf/kallsyms which can be used for this purpose. And btf/kallsyms info
> >       are already packed within vmcore, so we can use it directly.
> >
> >    With these, this patchset introduces makedumpfile extensions, which is based
> >    on btf/kallsyms symbol resolving, and is programmable for mm page filtering.
> >    The following section shows its usage and performance, please note the tests
> >    are performed in 1st kernel.
> >
> >    3) Compile and run makedumpfile extensions:
> >
> >    $ make LINKTYPE=dynamic USELZO=on USESNAPPY=on USEZSTD=on EXTENSION=on
> >    $ make extensions
> >
> >    $ /usr/bin/time -v ./makedumpfile -d 31 -l /var/crash/127.0.0.1-2025-06-10-18\:03\:12/vmcore
> >      /tmp/extension.out --extension amdgpu_filter.so
> >      Loaded extension: ./extensions/amdgpu_filter.so
> >      makedumpfile Completed.
> >          User time (seconds): 5.08
> >          System time (seconds): 0.84
> >          Percent of CPU this job got: 99%
> >          Elapsed (wall clock) time (h:mm:ss or m:ss): 0:05.95
> >          Maximum resident set size (kbytes): 17360
> >          ...
> >
> >       To contrast with eppic script of v2 [2]:
> >
> >    $ /usr/bin/time -v ./makedumpfile -d 31 -l /var/crash/127.0.0.1-2025-06-10-18\:03\:12/vmcore
> >      /tmp/eppic.out --eppic eppic_scripts/filter_amdgpu_mm_pages.c
> >      makedumpfile Completed.
> >          User time (seconds): 8.23
> >          System time (seconds): 0.88
> >          Elapsed (wall clock) time (h:mm:ss or m:ss): 0:09.16
> >          Maximum resident set size (kbytes): 57128
> >          ...
> >
> >    -rw------- 1 root root 367475074 Jan 19 19:01 /tmp/extension.out
> >    -rw------- 1 root root 367475074 Jan 19 19:48 /tmp/eppic.out
> >    -rw------- 1 root root 387181418 Jun 10 18:03 /var/crash/127.0.0.1-2025-06-10-18:03:12/vmcore
> >
> > C) Discussion:
> >
> >    1) GPU types: Currently only tested with amdgpu's mm page filtering, others
> >       are not tested.
> >    2) OS: The code can work on rhel-10+/rhel9.5+ on x86_64/arm64/s390/ppc64.
> >       rhel8.x is not supported, others are not tested.
> >
> > D) Testing:
> >
> >       If you don't want to create your vmcore, you can find a vmcore which I
> >       created with amdgpu mm pages unfiltered [3], the amdgpu mm pages are
> >       allocated by program [4]. You can use the vmcore in 1st kernel to filter
> >       the amdgpu mm pages by the previous performance testing cmdline. To
> >       verify the pages are filtered in crash:
> >
> >       Unfiltered:
> >       crash> search -c "!QAZXSW@#EDC"
> >       ffff96b7fa800000: !QAZXSW@#EDCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
> >       ffff96b87c800000: !QAZXSW@#EDCXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
> >       crash> rd ffff96b7fa800000
> >       ffff96b7fa800000:  405753585a415121                    !QAZXSW@
> >       crash> rd ffff96b87c800000
> >       ffff96b87c800000:  405753585a415121                    !QAZXSW@
> >
> >       Filtered:
> >       crash> search -c "!QAZXSW@#EDC"
> >       crash> rd ffff96b7fa800000
> >       rd: page excluded: kernel virtual address: ffff96b7fa800000  type: "64-bit KVADDR"
> >       crash> rd ffff96b87c800000
> >       rd: page excluded: kernel virtual address: ffff96b87c800000  type: "64-bit KVADDR"
> >
> > [1]: https://github.com/lucchouina/eppic/pull/32
> > [2]: https://lore.kernel.org/kexec/[email protected]/
> > [3]: https://people.redhat.com/~ltao/core/vmcore
> > [4]: https://gist.github.com/liutgnu/a8cbce1c666452f1530e1410d1f352df
> >
> > v6 -> v5:
> >
> > 1) Add erase_sample extension for data erasure sample.
> > 2) Replace fprintf() to MSG()/ERRMSG() in kallsyms.h.
> > 3) Use handle_cbs_len in extension_has_callback() for callback check.
> > 4) Fix bug[5].
> > 5) Add handle_cbs[i]->cb = NULL in init_extensions() to reset the
> >     callback if one extension's init() is skipped.
> > 6) The patches are organized as follows:
> >
> >     ---- <customization specific> ---
> >     10. Add amdgpu mm pages filtering extension
> >
> >      --- <code should be merged> ---
> >      9. Doc: Add --extension option to makedumpfile manual
> >      8. Add erase_sample extension as an data erase reference
> >      7. Add sample extension as an example reference
> >      6. Add makedumpfile extensions support
> >      5. Implement kernel module's btf resolving
> >      4. Implement kernel module's kallsyms resolving
> >      3. Implement kernel btf resolving
> >      2. Implement kernel kallsyms resolving
> >      1. Reserve sections for makedumpfile and extenions
> >
> >      Patch 10 is customization specific, merging depends on the strategy of
> >      maintenance.
> >      Patch 1 ~ 9 are common code which should be merged with makedumpfile.
> >
> > [5]: https://lore.kernel.org/kexec/[email protected]/
> >
> > Link to v5: https://lore.kernel.org/kexec/[email protected]/
> > Link to v4: https://lore.kernel.org/kexec/[email protected]/
> > Link to v3: https://lore.kernel.org/kexec/[email protected]/
> > Link to v2: https://lore.kernel.org/kexec/[email protected]/
> > Link to v1: https://lore.kernel.org/kexec/[email protected]/
> >
> > Tao Liu (10):
> >    Reserve sections for makedumpfile and extenions
> >    Implement kernel kallsyms resolving
> >    Implement kernel btf resolving
> >    Implement kernel module's kallsyms resolving
> >    Implement kernel module's btf resolving
> >    Add makedumpfile extensions support
> >    Add sample extension as an example reference
> >    Add erase_sample extension as an data erase reference
> >    Doc: Add --extension option to makedumpfile manual
> >    Add amdgpu mm pages filtering extension
> >
> >   Makefile                   |  15 +-
> >   README                     |   6 +
> >   btf_info.c                 | 371 +++++++++++++++++++++++++
> >   btf_info.h                 |  77 ++++++
> >   extension.c                | 355 ++++++++++++++++++++++++
> >   extension.h                |  16 ++
> >   extensions/Makefile        |  13 +
> >   extensions/amdgpu_filter.c | 221 +++++++++++++++
> >   extensions/erase_sample.c  |  78 ++++++
> >   extensions/maple_tree.c    | 328 ++++++++++++++++++++++
> >   extensions/maple_tree.h    |   7 +
> >   extensions/sample.c        |  69 +++++
> >   kallsyms.c                 | 550 +++++++++++++++++++++++++++++++++++++
> >   kallsyms.h                 |  86 ++++++
> >   makedumpfile.8.in          |  11 +-
> >   makedumpfile.c             |  44 ++-
> >   makedumpfile.h             |  12 +
> >   makedumpfile.ld            |  16 ++
> >   18 files changed, 2266 insertions(+), 9 deletions(-)
> >   create mode 100644 btf_info.c
> >   create mode 100644 btf_info.h
> >   create mode 100644 extension.c
> >   create mode 100644 extension.h
> >   create mode 100644 extensions/Makefile
> >   create mode 100644 extensions/amdgpu_filter.c
> >   create mode 100644 extensions/erase_sample.c
> >   create mode 100644 extensions/maple_tree.c
> >   create mode 100644 extensions/maple_tree.h
> >   create mode 100644 extensions/sample.c
> >   create mode 100644 kallsyms.c
> >   create mode 100644 kallsyms.h
> >   create mode 100644 makedumpfile.ld
> >
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.