Я выполняю анализ данных, который влечет за собой загрузку большой матрицы данных размером ~ 112 ГБ в файл с отображением памяти, используя R
язык программирования, в частности bigmemory
пакет (см. https://cran.r-project.org/web/packages/bigmemory/index.html). В матрице 80664 столбца и 356751 строка.
Хранилище данных состоит из файловой системы XFS, смонтированной по NFS.
Варианты монтирования XFS:
xfs noatime,nodiratime,logbufs=8,logbsize=256k,largeio,inode64,swalloc,allocsize=131072k
NFS экспортирует файловую систему, используя следующие параметры:
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 ГБ памяти.
Я уже читал следующий блог:
https://blog.codecentric.de/en/2017/04/xfs-possible-memory-allocation-deadlock-kmem_alloc/
Однако проблема не связана с фрагментацией, поскольку сообщенная фрагментация ниже 2% для файловой системы, в которую я пишу.
Итак, из-за ошибки XFS, описанной выше, я предполагаю, что файловому серверу не хватает памяти, поскольку он не может обработать количество запросов ввода-вывода, выданных данной задачей.
Помимо периодического сброса кеша (например, через 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. Здесь любая причина вы не используете более современную ОС? Указанные вами версии относятся к 2015 году.