Thank you for the suggestion. I think it's a good idea, but epppic needs careful consideration. I'm sorry, but please let me check for a moment.
Thanks, Masa On 2025/08/05 12:16, Tao Liu wrote: > Kindly ping... > > Any comments for this patchset? > > Thanks, > Tao Liu > > > On Tue, Jun 10, 2025 at 9:57 PM Tao Liu <l...@redhat.com> wrote: >> A) This patchset will introduce the following features to makedumpfile: >> >> 1) Enable eppic script for memory pages filtering. >> 2) Enable btf and kallsyms for symbol type and address resolving. >> 3) Port maple tree data structures and functions, primarily used for >> vma iteration. >> >> 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) Poor performance, making vmcore dumping time unacceptable (See >> the following performance testing). >> >> 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. >> >> 3) Maple tree data structures are used in recent kernels, such as vma >> iteration. So maple tree poring is needed. >> >> With these, this patchset introduces an upgraded eppic, which is based on >> btf/kallsyms symbol resolving, and is programmable for mm page filtering. >> The following info shows its usage and performance, please note the tests >> are performed in 1st kernel: >> >> $ time ./makedumpfile -d 31 -l >> /var/crash/127.0.0.1-2025-06-10-18\:03\:12/vmcore >> /tmp/dwarf.out -x /lib/debug/lib/modules/6.11.8-300.fc41.x86_64/vmlinux >> --eppic eppic_scripts/filter_amdgpu_mm_pages.c >> real 14m6.894s >> user 4m16.900s >> sys 9m44.695s >> >> $ time ./makedumpfile -d 31 -l >> /var/crash/127.0.0.1-2025-06-10-18\:03\:12/vmcore >> /tmp/btf.out --eppic eppic_scripts/filter_amdgpu_mm_pages.c >> real 0m10.672s >> user 0m9.270s >> sys 0m1.130s >> >> -rw------- 1 root root 367475074 Jun 10 18:06 btf.out >> -rw------- 1 root root 367475074 Jun 10 21:05 dwarf.out >> -rw-rw-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) Code structure: There are some similar code shared by makedumpfile and >> crash, such as maple tree data structure, also I planed to port the >> btf/kallsyms code to crash as well, so there are code duplications for >> crash & makedumpfile. Since I havn't working on crash poring, code >> change >> on btf/kallsyms is expected. How can we share the code, creating a >> common >> library or keep the duplication as it is? >> 3) OS: The code can work on rhel-10+/rhel9.5+ on x86_64/arm64/s390/ppc64. >> Others are not tested. >> >> D) Testing: >> >> 1) If you don't want to create your vmcore, you can find a vmcore which I >> created with amdgpu mm pages unfiltered [1], the amdgpu mm pages are >> allocated by program [2]. 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" >> >> 2) You can use eppic_scripts/print_all_vma.c against an ordinary vmcore to >> test only btf/kallsyms functions by output all VMAs if no amdgpu >> vmcores/machine avaliable. >> >> [1]: https://people.redhat.com/~ltao/core/ >> [2]: https://gist.github.com/liutgnu/a8cbce1c666452f1530e1410d1f352df >> >> Tao Liu (10): >> dwarf_info: Support kernel address randomization >> dwarf_info: Fix a infinite recursion bug for search_domain >> Add page filtering function >> Add btf/kallsyms support for symbol type/address resolving >> Export necessary btf/kallsyms functions to eppic extension >> Port the maple tree data structures and functions >> Supporting main() as the entry of eppic script >> Enable page filtering for dwarf eppic >> Enable page filtering for btf/kallsyms eppic >> Introducing 2 eppic scripts to test the dwarf/btf eppic extension >> >> Makefile | 6 +- >> btf.c | 919 +++++++++++++++++++++++++ >> btf.h | 176 +++++ >> dwarf_info.c | 15 +- >> eppic_maple.c | 431 ++++++++++++ >> eppic_maple.h | 8 + >> eppic_scripts/filter_amdgpu_mm_pages.c | 36 + >> eppic_scripts/print_all_vma.c | 29 + >> erase_info.c | 123 +++- >> erase_info.h | 22 + >> extension_btf.c | 218 ++++++ >> extension_eppic.c | 41 +- >> extension_eppic.h | 6 +- >> kallsyms.c | 371 ++++++++++ >> kallsyms.h | 42 ++ >> makedumpfile.c | 21 +- >> makedumpfile.h | 11 + >> 17 files changed, 2448 insertions(+), 27 deletions(-) >> create mode 100644 btf.c >> create mode 100644 btf.h >> create mode 100644 eppic_maple.c >> create mode 100644 eppic_maple.h >> create mode 100644 eppic_scripts/filter_amdgpu_mm_pages.c >> create mode 100644 eppic_scripts/print_all_vma.c >> create mode 100644 extension_btf.c >> create mode 100644 kallsyms.c >> create mode 100644 kallsyms.h >> >> -- >> 2.47.0 >>