XFS:kmem_alloc 中可能出现内存分配死锁

XFS:kmem_alloc 中可能出现内存分配死锁

R我正在进行一项数据分析,需要使用编程语言(特别是包)将大约 112GB 的大型数据矩阵加载到内存映射文件中bigmemory(请参阅https://cran.r-project.org/web/packages/bigmemory/index.html)。该矩阵有80664列,356751行。

数据存储由 NFS 安装的 XFS 文件系统组成。

XFS 挂载选项包括:

xfs noatime,nodiratime,logbufs=8,logbsize=256k,largeio,inode64,swalloc,allocsize=131072k

NFS 正在使用以下选项导出 FS:

rw,async,no_subtree_check,no_root_squash

NFS 客户端使用以下选项挂载 FS:

defaults,async,_netdev

加载文件一段时间后,计算节点变得无响应(包括集群上的其他节点),并且文件服务器日志报告以下错误:

XFS: possible memory allocation deadlock in kmem_alloc (mode:0x250)

我可以通过删除缓存来解决这个问题:

echo 3 > /proc/sys/vm/drop_caches

文件服务器有16 GB内存。

我已经阅读过以下博客:

https://blog.codecentric.de/en/2017/04/xfs-possible-memory-allocation-deadlock-kmem_alloc/

但是,该问题不是由于碎片造成的,因为报告的碎片化程度低于我正在写入的文件系统的 2%。

因此,由于上述 XFS 错误,我假设文件服务器内存不足,因为它无法处理当前任务发出的 IO 请求数量。

除了定期删除缓存(例如通过cron)之外,还有其他更持久的解决方案吗?

先谢谢您的帮助。

编辑:客户端和服务器上的 CentOS 7.2。

编辑#2:客户端和服务器上的内核 3.10.0-229.14.1.el7.x86_64。

答案1

它与内存碎片和文件系统碎片有关,请参阅 https://bugzilla.kernel.org/show_bug.cgi?id=73831

您应该使用 检查文件系统碎片xfs_db -r -c 'frag' <filesystem>'。保持文件系统不太满(80% 或更少)并运行xfs_fsr一段时间也应该有帮助。

答案2

我相信 CentOS 7 的当前版本有内核 3.10.0-693.2.2.el7 和较新的 XFS 用户空间工具。任何原因你使用的不是最新版本的操作系统?你指定的版本可追溯到 2015 年。

相关内容