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。
これはメモリの断片化とファイルシステムの断片化に関連しています。 https://bugzilla.kernel.org/show_bug.cgi?id=73831 を参照してください
ファイルシステムの断片化をxfs_db -r -c 'frag' <filesystem>'
で確認する必要があります。いっぱいになりすぎないようにして(80%以下)、しばらくxfs_fsr
を実行することも役立ちます。
CentOS 7の現在のリビジョンには、カーネル3.10.0-693.2.2.el7以降のXFSユーザー空間ツールが含まれていると思います。ありますか 何らかの理由 より新しいOSではありませんか?指定したバージョンは2015年まで遡ります。