[LTP] [PATCH] perf_event_open: improve the memory leak detection

Li Wang liwang@redhat.com
Wed Jul 17 08:50:21 CEST 2024


Hi Cyril, All,

Any comments on this method?

On Fri, Jul 5, 2024 at 11:15 AM Li Wang <liwang@redhat.com> wrote:

> The goal is to add more robust memory leak detection by periodically
> sampling memory availability during the test run and checking for
> significant decreases in available memory.
>
> To avoid false postive:
>   perf_event_open03.c:95: TFAIL: Likely kernel memory leak detected
>
> Signed-off-by: Li Wang <liwang@redhat.com>
> ---
>  .../perf_event_open/perf_event_open03.c       | 32 +++++++++++++++----
>  1 file changed, 26 insertions(+), 6 deletions(-)
>
> diff --git a/testcases/kernel/syscalls/perf_event_open/perf_event_open03.c
> b/testcases/kernel/syscalls/perf_event_open/perf_event_open03.c
> index 7dd31d3d2..1aab43e82 100644
> --- a/testcases/kernel/syscalls/perf_event_open/perf_event_open03.c
> +++ b/testcases/kernel/syscalls/perf_event_open/perf_event_open03.c
> @@ -26,6 +26,7 @@
>  const int iterations = 12000000;
>  static int fd = -1;
>  static int runtime;
> +static int sample;
>
>  static void setup(void)
>  {
> @@ -77,22 +78,41 @@ static void check_progress(int i)
>
>  static void run(void)
>  {
> -       long diff;
> +       long diff, diff_total, mem_avail, mem_avail_prev;
>         int i;
>
> -       diff = SAFE_READ_MEMINFO("MemAvailable:");
> +       sample = 0;
> +       diff_total = 0;
> +
> +       mem_avail_prev = SAFE_READ_MEMINFO("MemAvailable:");
>         tst_timer_start(CLOCK_MONOTONIC);
>
>         /* leak about 100MB of RAM */
>         for (i = 0; i < iterations; i++) {
>                 ioctl(fd, PERF_EVENT_IOC_SET_FILTER, "filter,0/0@abcd");
>                 check_progress(i);
> -       }
>
> -       diff -= SAFE_READ_MEMINFO("MemAvailable:");
> +               /*
> +                * Every 1200000 iterations, calculate the difference in
> memory
> +                * availability. If the difference is greater than 10 *
> 1024 (10MB),
> +                * increment the sample counter and log the event.
> +                */
> +               if ((i % 1200000) == 0) {
> +                       mem_avail = SAFE_READ_MEMINFO("MemAvailable:");
> +                       diff = mem_avail_prev - mem_avail;
> +                       diff_total += diff;
> +
> +                       if (diff > 20 * 1024) {
> +                               sample++;
> +                               tst_res(TINFO, "MemAvailable decreased by
> %ld kB at iteration %d", diff, i);
> +                       }
> +
> +                       mem_avail_prev = mem_avail;
> +               }
> +       }
>
> -       if (diff > 50 * 1024)
> -               tst_res(TFAIL, "Likely kernel memory leak detected");
> +       if ((sample > 5) || (diff_total > 100 * 1024))
> +               tst_res(TFAIL, "Likely kernel memory leak detected, total
> decrease: %ld kB", diff_total);
>         else
>                 tst_res(TPASS, "No memory leak found");
>  }
> --
> 2.45.2
>
>
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
>
>

-- 
Regards,
Li Wang


More information about the ltp mailing list