[PATCH v8 i-g-t 0/3] Integrate kmemleak scans in igt_runner
Kamil Konieczny
kamil.konieczny at linux.intel.com
Mon Mar 10 11:05:35 UTC 2025
Hi Peter,
On 2025-03-07 at 10:34:23 +0100, Peter Senna Tschudin wrote:
> This patch series introduces a library to interact with the Linux kernel's
> kmemleak feature and integrates it into igt_runner. If kmemleaks are
> detected, they will be saved in the igt_runner results directory in a file
> named kmemleak.txt.
Thank you all, pushed.
Regards,
Kamil
>
> During testing, the size of the kmemleak.txt file varied significantly.
> Larger files, up to 2 MB, were observed when running i915-BAT on a Tiger
> Lake DUT. Conversely, smaller files, typically under 100 KB, were generated
> when running Xe BAT on the same DUT.
>
> Large files often contain numerous false positives, with the e1000 driver
> being a frequent source of noise. The time required for the Linux kernel to
> complete a kmemleak scan ranges from 5 to 60 seconds. This variability can
> cause igt_runner to slow down by a factor of 4 when using the -keach
> option.
>
> Transient leaks are a common phenomenon but are mostly undetected by the
> current version of this library. A typical transient leak occurs when
> pointers are reused, such as in linked lists. For example, if 10 calls to
> kmalloc are made, storing the address in the same variable and freeing only
> the final allocation, the previous 9 allocations become transient leaks.
> These leaks will go undetected unless the kernel thread performs continuous
> scanning.
>
> To enable continuous scanning:
> # echo scan=1 > /sys/kernel/debug/kmemleak
>
> This configures the kmemleak kernel thread to scan the memory continuously
> with 1 second pauses. While this may increase the likelihood of detecting
> transient leaks, it can significantly impact system performance. In most
> cases, the igt_runner slowdown remains in the 4x range, but the kernel
> thread will consume 100% of a CPU core, as observed with tools like top.
>
> When using scan=1, transient leaks that exist during an active scan will be
> detected. However, detection remains non-deterministic due to timing. It is
> recommended to reset the scan interval to the default value of 600 seconds
> after completing your tests.
>
> v8:
> - Update commit messages
> - Fix new line and documentation issues
> - Use fd instead of fp
> - Use open() and close() instead of fopen() and fclose()
> - Update error checking from (!fd) to (fd < 0)
> - Add error check for lseek()
> - Rename to KMEMLEAK_RESFILENAME
> - Increase buf size to 16KB to speedup copy
> - Rename the ifndef guard to RUNNER_KMEMLEAK_H
>
> v7:
> - Update scripts/run-tests.sh to support:
> - igt_facts
> - kmemleak integration
>
> v6:
> - Update copyright year to 2025
> - Remove double newline from runner/executor.c
> - Fix indentation issues caused by renaming igt_kmemleak* to
> runner_kmemleak*
>
> v5:
> - move the code from lib/ to runner/
> - rename igt_* to runner_*
> - replace calls to igt_info() with calls to fprintf(stderr, ...)
> - #includes on kmemleak.c:
> - remove #include "igt_core.h"
> - sort includes aplhabetically
> - refacor the if statement for handling the optional argument to -k
> - changed where 'k::' is located inside the string for getopt_long()
> - fix one ident error
> - use two separate assignments instead of making two at the same time
> - replaced two calls to errf() by a single call with a multiline string
> - commit message: explain the changes to runner unit testing
>
> v4:
> - Cleaned-up CC list
> - Fixed typo in patch numbering
> - Fixed Reviewed-by tag
> - Reintroduced ',' after "results-path". It was removed by accident
> - Changed unit testing for calling igt_kmemleak() with and without sync.
>
> v3:
> - Removed '>' from the end of one of the email addresses in the cc list
> - Removed email addresses that no longer exist
>
> v2:
> - Pass igt_kmemleak_sync as a function variable to igt_kmemleak instead of
> keeping it stored as a global variable
> - igt_kmemleak_found_leaks(): Remove call to fseek() after close()
> - igt_kmemleak_write(): Increase retry counter when writing 0 bytes
> - igt_kmemleak_write(): change type to bool
> - Unit Testing: Move the call to igt_kmemleak_init() to a fixture.
> - igt_kmemleak_append_to(): Add brackets to the if statement for improved
> readability
>
> Cc: vitaly.prosyak at amd.com
> Cc: christian.koenig at amd.com
> Cc: alexander.deucher at amd.com
> Cc: jesse.zhang at amd.com
> Cc: harry.wentland at amd.com
> Cc: zbigniew.kempczynski at intel.com
> Cc: kamil.konieczny at linux.intel.com
> Cc: ryszard.knop at intel.com
> Cc: lucas.demarchi at intel.com
> Cc: katarzyna.piecielska at intel.com
> Cc: jonathan.cavitt at intel.com
>
> Peter Senna Tschudin (3):
> runner/kmemleak: library to interact with kmemleak
> runner/executor: Integrate igt_kmemleak scans
> scripts/run-tests.sh: Add support to kmemleak reports and igt_facts
>
> runner/executor.c | 26 +++-
> runner/kmemleak.c | 277 ++++++++++++++++++++++++++++++++++
> runner/kmemleak.h | 16 ++
> runner/meson.build | 9 ++
> runner/runner_kmemleak_test.c | 267 ++++++++++++++++++++++++++++++++
> runner/runner_tests.c | 13 +-
> runner/settings.c | 31 +++-
> runner/settings.h | 2 +
> scripts/run-tests.sh | 10 +-
> 9 files changed, 645 insertions(+), 6 deletions(-)
> create mode 100644 runner/kmemleak.c
> create mode 100644 runner/kmemleak.h
> create mode 100644 runner/runner_kmemleak_test.c
>
> --
> 2.34.1
>
More information about the igt-dev
mailing list