web-dev-qa-db-ja.com

XFS:kmem_allocでのメモリ割り当てデッドロックの可能性

Rプログラミング言語、特にbigmemoryパッケージを使用して、メモリマッピングされたファイルに〜112GBの大きなデータマトリックスをロードする必要があるデータ分析を実行しています( 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。

2
Vince

これはメモリの断片化とファイルシステムの断片化に関連しています。 https://bugzilla.kernel.org/show_bug.cgi?id=73831 を参照してください

ファイルシステムの断片化をxfs_db -r -c 'frag' <filesystem>'で確認する必要があります。いっぱいになりすぎないようにして(80%以下)、しばらくxfs_fsrを実行することも役立ちます。

1
wazoox

CentOS 7の現在のリビジョンには、カーネル3.10.0-693.2.2.el7以降のXFSユーザー空間ツールが含まれていると思います。ありますか 何らかの理由 より新しいOSではありませんか?指定したバージョンは2015年まで遡ります。

1
ewwhite