linux - 找出在 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
我已经启用debugfs
了cma
,但我还没有弄清楚如何使用它:
/sys/kernel/debug/cma/cma-reserved# ls
alloc base_pfn bitmap count free maxchunk order_per_bit used
解决方案
我不确定如何或是否可以找出谁使用 CMA 区域(我自己非常想知道),但我认为我已经弄清楚如何使用 debugfs。
您正在访问的 /sys/kernel/debug/cma/cma-reserved 目录中的文件包含有关 CMA 区域的信息,以页框号 (PFN) 和页数表示。
cat /sys/kernel/debug/cma/cma-reserved/base_pfn
例如,如果您将看到 CMA 区域开始的物理内存地址的 PFN。
同样,文件count
、used
和maxchunk
包含为 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
推荐阅读
- javascript - 版本 2.0.0+(包括 2.0.5)的速度“淡入”问题
- java - 将函数调用分配给 Kotlin 中的变量
- sqlite - 在 Sqflite 中插入多条记录
- c++ - C++:关于“有效指针和引用”的说明
- java - 线程“JavaFX 应用程序线程”java.lang.IllegalStateException 中的异常:一旦阶段设置为可见,就无法设置样式
- gitlab - Gitlab CI - 完成某个阶段后将自定义标签/徽章添加到管道
- toad - Toad 为表(创建表)生成的代码片段中的 MONITORING 是什么?
- javascript - 替换字符串中所有出现的stirng,不包括以相同字符开头的其他单词
- python - 将字符串转换为字典列表列表 python
- reactjs - 使用 react-select 作为弹出自定义单元格编辑器的 ag-grid 中的键盘事件问题