首页 > 解决方案 > 找出在 Linux 中占用 CMA(连续内存分配)的原因

问题描述

肯定有东西占用了CMA缓冲区,但我不知道是什么。

# cat /proc/meminfo | grep -i cma
CmaTotal:         262144 kB
CmaFree:            1272 kB

系统消息几乎没有显示:

# dmesg | grep -i cma
[    0.000000] cma: Reserved 256 MiB at 0x00000000c0000000

我已经启用debugfscma,但我还没有弄清楚如何使用它:

/sys/kernel/debug/cma/cma-reserved# ls
alloc  base_pfn  bitmap  count  free  maxchunk  order_per_bit  used

标签: linux

解决方案


我不确定如何或是否可以找出使用 CMA 区域(我自己非常想知道),但我认为我已经弄清楚如何使用 debugfs。

您正在访问的 /sys/kernel/debug/cma/cma-reserved 目录中的文件包含有关 CMA 区域的信息,以页框号 (PFN) 和页数表示。

cat /sys/kernel/debug/cma/cma-reserved/base_pfn例如,如果您将看到 CMA 区域开始的物理内存地址的 PFN。

同样,文件countusedmaxchunk包含为 CMA 区域保留的页数、当前正在使用的页数以及当前可分配的最大页数。将它们的内容与系统的 PAGE_SIZE 相乘,以获得以字节为单位的数量。

alloc并且free不可读,但您可以使用它们手动保留最多 maxchunk 页数并释放任何先前保留的区域,使用:

echo X > /sys/kernel/debug/cma/cma-reserved/alloc

或者

echo X > /sys/kernel/debug/cma/cma-reserved/free

分别。

bitmap是另一个可读文件,其中包含... 已使用或未使用页面的位图。

还要检查:https ://www.kernel.org/doc/html/latest/admin-guide/mm/cma_debugfs.html


推荐阅读