[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