Как настроить Luster для блокировки клиентских запросов при загрузке, а не при сбое?
Мы используем Luster в кластере с приблизительно 200 ТБ хранилища, 12 объектными хранилищами (которые подключаются к системе хранения DDN с помощью QDR Infiniband) и примерно 160 четырехъядерных и 8-ядерных вычислительных заметок. У большинства пользователей этой системы вообще нет проблем, но мои задачи требуют интенсивного ввода-вывода. Когда я запускаю задание массива, в котором 250-500 процессов одновременно обрабатывают файловую систему, обычно между 10 и 20 моими процессами произойдет сбой. Файлы журнала указывают, что нагрузка на OST превышает 2, и что клиент Lustre возвращает либо неверные данные, либо произошел сбой read()
вызовы функций.
В настоящее время единственный способ решить мою проблему - запустить меньше одновременных заданий. Это неудовлетворительно, потому что нет никакого способа узнать заранее, будет ли моя рабочая нагрузка загружена ЦП или I/O. Кроме того, просто выключить нагрузку - это не способ запустить суперкомпьютер: мы хотели бы, чтобы он работал медленнее при работе под нагрузкой, а не давал неправильных ответов.
Я хотел бы знать, как настроить Luster так, чтобы клиенты блокировались, когда нагрузка на OST слишком высока, вместо того, чтобы клиенты получали неверные данные.
Как настроить Luster для блокировки клиентов?
1 ответ
Задумывались ли вы о добавлении дополнительных OSS и распространении OST? Это должно уменьшить нагрузку. В этом ключе, какой тип ввода / вывода вы делаете? Много ли у вас больших файлов, если это так, они полосатые? По умолчанию чередование равно 1, что означает, что каждый файл находится только в 1 OST, который может быть изменен для каждого файла (при создании) или для каждого каталога (для новых файлов).
Вы также можете попробовать увеличить таймауты в блеске (lctl get_param/set_param), а именно:
- Тайм-аут
- ldlm_timeout