SPDK内存泄漏排查手段

spdk的内存分配主要基于DPDK的EAL(Environment Abstraction Layer)的内存管理机制. 这部分主要是对huagepage的内存进行管理,通常用dma的方式处理的内存. 当然在spdk内部也可以用malloc分配一些管理内存,这部分内存是操作系统在管理, 不在EAL内管理.
对于EAL这部分管理的内存, 从操作系统的free等调试命令是无法看到他的分配情况的.
因此如果遇到经常性提示hguepage不足的情况下,需要一些手段能够排查到 huagepage部分的 内存的使用情况.
DPDK本来有一套机制查询 内存的分配情况, 可以通过dpdk-procinfo工具来查看.

  详见:http://doc.dpdk.org/guides/tools/proc_info.html

但这个工具在SPDK编译时并未编译,而且这个工具是个单独的app,不能在其他app内调试. 当然也通过了lib的方式,通过传递一些参数性查询:

• When running dpdk-proc-info with shared library mode, it is required to pass the same NIC PMD libraries as used for the primary application. Any mismatch in PMD library arguments can lead to undefined behavior and results affecting primary application too.

dpdk-procinfo对于内存部分主要查看一下内容:

• -m: Print DPDK memory information.    显示内存信息,包括
  • rte_dump_physmem_layout 显示物理内存分配情况,
  • rte_memzone_dump memezone分配情况
  • rte_dump_tailq   tail队列的分配情况
• –show-mempool[=name] The show-mempool parameter display current allocation of all mempool debug information. Specifying the name allows to display details for specific mempool. For invalid or no mempool name, whole list is dump.
  • 不带参数显示所有mempool信息,包括mempool的id,分配情况,大小等等.
• –iter-mempool=name The iter-mempool parameter iterates and displays mempool elements specified by name. For invalid or no mempool name no elements are displayed.
  • 详细显示每个mempool内部的详细分配情况.

从代码分析,mempool中分配的主要有线程间消息msg, nvme_wr_data等池化的内存. 对于从spdk_malloc或者spdk_kmalloc分配的内存,并不是从pool中分配,而是直接从heap中分配的.
需要对于查找spdk-kmalloc未正确释放的内存泄漏,上述工具还不太够,后面发现spdk内部集成了dpdk的内存查看的rpc命令:

env_dpdk_get_mem_stats   在文件env_dpdk_rpc.c

这个工具会生成一个当前的内存系统统计文件,并默认保存在

/tmp/spdk_mem_dump.txt

对于这个文件,可以直接打开查看,包含了

• rte_dump_physmem_layout
• rte_memzone_dump
• rte_mempool_list_dump
• rte_malloc_dump_stats   --这个就是堆heap的分配释放信息

还可以通过spdk自带的工具

./scripts/dpdk_mem_info.py 

对该文件进行解析, 通过-f制定生成的统计文件,解析出相关的信息,比如

./scripts/dpdk_mem_info.py  -f /tmp/spdk_mem_dump.txt -m 0    

查看id为0的heap的详细分配释放信息:

image.png

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×