[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