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

Как настроить Lustre на блокировку клиентских запросов при нагрузке, а не при сбое?

Мы используем Lustre в кластере с объемом памяти примерно 200 ТБ, 12 объектами хранилища объектов (которые подключаются к системе хранения DDN с помощью QDR Infiniband) и примерно 160 четырех- и 8-ядерных вычислительных заметок. У большинства пользователей этой системы нет никаких проблем, но мои задачи требуют большого количества операций ввода-вывода. Когда я запускаю задание массива, в котором есть 250-500 процессов, которые одновременно загружают файловую систему, обычно от 10 до 20 моих процессов терпят неудачу. Файлы журнала показывают, что нагрузка на OST превышает 2 и что клиент Lustre возвращает неверные данные или сбой. read() вызовы функций.

В настоящее время единственный способ решить мою проблему - это выполнять меньше одновременных заданий. Это неудовлетворительно, потому что нет никакого способа узнать заранее, будет ли моя рабочая нагрузка тяжелой для ЦП или ввода-вывода. Кроме того, просто уменьшить нагрузку - это не способ запустить суперкомпьютер: мы хотели бы, чтобы он работал медленнее при работе под нагрузкой, а не выдавал неправильных ответов.

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

Как настроить Lustre на блокировку клиентов?

Думали ли вы о добавлении дополнительных OSS и распространении OST? Это должно уменьшить нагрузку. В этом ключе, какой шаблон ввода-вывода вы используете? У вас много больших файлов, если да, то они полосатые? По умолчанию чередование - 1, что означает, что каждый файл находится только в 1 OST, который можно изменить для каждого файла (при создании) или для каждого каталога (для новых файлов).

Вы также можете попробовать увеличить тайм-ауты в lustre (lctl get_param / set_param), а именно:

  • тайм-аут
  • ldlm_timeout