RDK Resources
[*RDK Preferred*]
Code Management Facility
RDK Forums
[RDK Conferences]
RDK Support
Archives
Papers & Presentations Archive
i) Kmemleak is a Linux kernel feature designed to detect and report memory leaks in the kernel code. Memory leaks occur when a program allocates memory dynamically but fails to release it when it is no longer needed. This can result in a gradual loss of memory over time, eventually leading to system instability or even crashes.
ii) Kmemleak works by scanning the kernel memory periodically to detect any memory that has been allocated but not freed. When it detects a potential memory leak, it reports it to the system log along with a stack trace that shows where the memory was allocated. This information can help developers to identify and fix the source of the memory leak.
iii)Kmemleak is a useful tool for kernel developers and system administrators who want to ensure that their systems are stable and free of memory leaks. It can be enabled in the kernel configuration, and once enabled, it will run automatically in the background, periodically scanning the kernel memory for leaks.
CONFIG_HAVE_DEBUG_KMEMLEAK=y |
i) Create kmemleak.cfg file under meta-cmf-raspberrypi/recipes-kernel/linux/files with below kernel configs.
CONFIG_HAVE_DEBUG_KMEMLEAK=y |
ii) Add kmemleak.cfg file in meta-cmf-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.10.52.bb
Please find below diff file.
Ex:
diff --git a/recipes-kernel/linux/linux-raspberrypi_5.10.52.bb b/recipes-kernel/linux/linux-raspberrypi_5.10.52.bb SRC_URI += " file://powersave.cfg \ |
iii) Once build done with above changes, verify the kernel configs are enabled in final kernel boot config file.
Path of kernel boot config file: build-raspberrypi-rdk-mc/tmp/work/raspberrypi_rdk_mc-rdk-linux-gnueabi/linux-raspberrypi/1_5.10.52+gitAUTOINC+dbe03fa900_2697f74031-r0/image/boot/config-5.10.52-v7
Ex:
csures569@dvm-yocto3-docker-csures569:~/feature-securestorage-rpi-2Mar/build-raspberrypi-rdk-mc/tmp/work/raspberrypi_rdk_mc-rdk-linux-gnueabi/linux-raspberrypi/1_5.10.52+gitAUTOINC+dbe03fa900_2697f74031-r0/image/boot$ cat config-5.10.52-v7 | grep "KMEMLEAK" |
iv) Once flash the image with above changes , verify the kmemleak enabled in the device, it will create a kmemleak folder under /sys/modules/ and kmemleak file under /sys/kernel/debug/
Ex:
root@raspberrypi-rdk-mc:/sys/module# ls -l | grep "kmemleak" |
v) Once enabled kmemleak we will get kernel memory leaks in /sys/kernel/debug/kmemleak file if leaks are reported.
Note: kmemleak-test.ko by default in rpi3 this module not compiled , there is no kmemleak-test.ko module , so enable to build as a module and generated module file.
kmemleak-test.ko
Step 1 : Copy kmemleak-test.ko module to this path /lib/modules/5.10.52-v7/ in box .
Step 2 : load the module to kernel space with insmod command.
Ex:
root@raspberrypi-rdk-mc:~# insmod /lib/modules/5.10.52-v7/kmemleak-test.ko |
Step3 : verify module loaded or not
Ex: lsmod
root@raspberrypi-rdk-mc:~# lsmod Module Size Used by kmemleak_test 16384 0 // Here module loaded. ip6t_REJECT 16384 2 nf_reject_ipv6 16384 1 ip6t_REJECT ip6table_nat 16384 1 br_netfilter 32768 0 xt_state 16384 0 |
Step4: Perform a scan
Ex: echo scan > /sys/kernel/debug/kmemleak
root@raspberrypi-rdk-mc:~# echo scan > /sys/kernel/debug/kmemleak |
Step5: Collect memory leak data
Ex: cat /sys/kernel/debug/kmemleak