我在显卡上运行 caffe 深度学习库,该库会执行一些奇特的操作,例如将一些大文件映射到内存中,并将缓冲区从 RAM 传递到显卡。一段时间后,我注意到,当系统上没有运行任何繁重任务时(没有 X 服务器,大约 10 个进程:getty、sshd、syslog-ng、bash,...),内存使用量相当大:
MemTotal: 24688288 kB
MemFree: 19112788 kB
MemAvailable: 19102240 kB
Buffers: 6632 kB
Cached: 14892 kB
SwapCached: 0 kB
需要注意的是,我使用 删除缓存echo 3 > /proc/sys/vm/drop_caches
。因此,大约有 5GiB 用于某些用途。这里计算了一个非常接近的数字:
Active: 4658852 kB <-- here
Inactive: 2312 kB
Active(anon): 4644112 kB <--- and here
Inactive(anon): 760 kB
Active(file): 14740 kB
Inactive(file): 1552 kB
Unevictable: 6352 kB
Mlocked: 17111149713616 kB <-- that is also strange
在检查内核空间中 nvidia 泄漏的想法时,我发现了如下几行:
0xffffc90005562000-0xffffc900055af000 315392 os_alloc_mem+0xc2/0xf0 [nvidia] pages=76 vmalloc N0=76
这证实了 nvidia 驱动程序的泄漏。是否有可能以某种方式清理这些分配?和,我怎样才能删除上面的 mlocked 内存?
答案1
显然,这是 nvidia 驱动程序中的一个错误。将驱动程序从 361.18-r4 更新到 364.15 后,我不再能够重现该问题。因此,我考虑通过更新来修复内存泄漏。