Назад | Перейти на главную страницу

Сбой сетевой файловой системы при высоких скоростях ввода-вывода

Я - пользователь кластера, использующий NFS для хранения данных. Недавно я запустил конвейер с очень большим количеством операций ввода-вывода во время некоторых операций.

Программа, которая, по нашему мнению, является причиной проблемы, называется Bowtie, выравниватель биоинформатических конвейеров. Короче говоря, у нас есть алфавитные последовательности во фрагментированных файлах по 1 миллиону строк на файл, которые сравниваются с другим файлом, содержащим весь словарь. (Это чрезмерное упрощение алгоритма)

Этот словарь отображается в памяти во время процедуры. У меня есть права на отправку очереди для трех узлов в кластере.

Узлы: Узел1 Узел2 Узел3 Узел4 Узел5 Узел6 Узел7

Мое право: Узел1 Узел2 Узел3

Количество доступных мне процессоров: 128 процессоров или 128 слотов рабочей очереди.

Для работы в кластере основной файл делится на блоки по 1 миллион строк каждый, а затем все задания запускаются с использованием SGE.

Словарь в этот момент загружается в память на каждый узел, то есть на узлы 1, 2 и 3.

Для каждого задания, активного в слоте очереди, у меня открыты следующие обработчики файлов

1 Файл задания, содержащий код для запуска 1 файл кода, содержащий код выхода процесса 1 Сгенерированный SGE файл STDOUT 1 Сгенерированный SGE файл STDERR 1 Фрагмент файла 1 Выходной файл

Это означает, что во время этого процесса у меня открыто 768 + 3 файловых обработчика в удаленном хранилище данных, хотя первые четыре файла являются постоянными для каждого отдельного скрипта в конвейере.

Всякий раз, когда это происходит, происходит сбой сервера NFS в хранилище данных, и весь наш кластер выходит из строя, потому что хранилище перестает отвечать.

Наши ИТ-специалисты предположили, что это может быть связано с большим количеством операций ввода-вывода во время этого процесса и, возможно, NFS когда-либо предназначалась только для небольших кластеров, а не для крупных.

Таким образом, мы работали над решением, в котором мы планируем запустить этот процесс на одном из узлов. Но тогда смысл наличия кластера в нашем распоряжении теряется, потому что мы будем записывать на диск узла, а не в хранилище данных, общее для всех кластеров.

Я не могу поверить в то, что NFS была создана для небольших кластеров и никогда не была успешно реализована на крупных корпоративных решениях. Может ли существовать еще одна причина, по которой NFS внезапно разрывает сетевое соединение?

Я уверен, что вопрос в том, что процесс является причиной зависания кластера, но я не уверен, что требуемая скорость чтения / записи является причиной сбоя. У кого-нибудь из вас раньше была такая проблема? Является ли полная миграция протокола единственным решением, которое у нас есть?

Несколько предложений усвоили с годами.

  1. Минимизируйте нагрузку на NFS-сервер:

установить параметры экспорта NFS: async,insecure,no_subtree_check

установить параметры монтирования NFS soft,noatime,nodiratime,nolock,vers=3

также установите: noatime,nodiratime при монтировании data / tmp / scratch. Убедитесь, что шифрование NFS отключено, чтобы снизить нагрузку. Остановить процесс блокировки NFS.

  1. Попробуйте включить кадры JUMBO для сети на всех хостах (если они поддерживаются сетевым оборудованием) - установите MTU равным 9 КБ или около того.

  2. Убедитесь, что хранилище raid10 используется (избегайте raid5 / 6 любой ценой) для произвольной записи IO. Какие-нибудь SSD?

  3. Максимально увеличьте количество открытых дескрипторов FS (в некоторых системах по умолчанию - 2 КБ), установите его на 1 МБ или около того.

  4. Есть ли шанс скопировать базу данных сопоставления с входными данными в локальное хранилище рабочих узлов, а затем объединить / отсортировать полученные файлы sam в качестве отдельного шага?

  5. Увеличьте размер обрабатываемого фрагмента (чтобы он обрабатывался не менее 30 минут или больше.

  6. Если возможно разделение рабочих мест на максимально возможном уровне (попробуйте сопоставить / отсортировать 10 отдельных геномов / образцов на 10 разных узлах параллельно вместо того, чтобы пытаться сопоставить каждый геном последовательно с использованием 10 хостов). Попытаться установить контрольную точку после завершения всех процессов.

  7. Измените источник программы, чтобы он считывал данные большими фрагментами - например, 1M вместо 4k.

  8. Помните о конфликте между ЦП и ОЗУ (особенно в системах AMD с 4-8 сокетами), иногда выполнение 12-24 потоков на 48-ядерном блоке намного быстрее, чем 48 потоков. Попробуйте разные уровни использования. Убедитесь, что NUMA включен и настроен для многопроцессорных систем. Перекомпилируйте с включенным NUMA.

PS: Управление эффективным кластером аналогично планированию / управлению строительной площадкой с более чем тысячами рабочих ...