Оценка производительности кластерных систем
4.1. Введение
В настоящий момент можно констатировать, что создание и использование многопроцессорных (параллельных) вычислительных систем является важнейшей составляющей развития компьютерной техники.
В свою очередь, кластерные вычислительные системы составляют заметную часть параллельных вычислительных систем и играют важнейшую роль в связи с некоторыми присущими им уникальными особенностями: относительно низкой стоимостью, сравнительной простотой развертывания, возможностью постепенного наращивания мощности при одновременном использовании "старого" оборудования, и т.д.
В связи с этим, все крупнейшие научные центры и ведущие промышленные предприятия либо обладают, либо имеют планы установки параллельных вычислительных систем кластерного типа.
Таким образом, вопросы, связанные с проектированием, построением и дальнейшим эффективным использованием кластерных систем являются крайне актуальными.
Данные раздел посвящен одной из важнейших проблем, которая возникает на всех этапах жизненного цикла кластерной системы - от проектирования, до поддержки продуктивной эксплуатации - проблеме тестирования кластерной системы.
4.1.1. Необходимость тестирования
Прежде чем перейти к рассмотрению конкретных методик тестирования и программных продуктов, эти методики реализующих, следует определиться, почему вообще возникает необходимость в тестировании кластерных систем. Представляется, что резонов для проведения тестов может быть два:
- определение работоспособности системы;
- выявление существенных характеристик (особенностей) кластерной системы.
Первый пункт в списке абсолютно понятен и вряд ли требует каких-то пояснений - кластер, как и всякая другая система, эксплуатируемая в промышленном режиме должен иметь средства самодиагностики. Такие средства как правило имеются и обычно опираются на средства диагностики, встроенные в операционную систему, сетевое оборудование и/или коммуникационное программное обеспечение. Следует отметить, что построение подобных систем является важной задачей и очень часто она решается в рамках специализированных программных комплексов, называемых системами управления кластерами ( Cluster Management System, CMS ).
В рамках этого раздела будут рассматриваться тесты второго рода - а именно выявляющие некоторые существенные характеристики тестируемых систем. В качестве существенных характеристик мы будем рассматривать такие характеристики, которые напрямую влияют на производительность рассматриваемых систем. Измерение этих характеристик для конкретного кластера позволяет решить сразу несколько важных задач:
- сравнить полученную вычислительную систему с другими аналогичными (что может дать некоторое усредненное понимание того, правильно настроена система или нет);
- выявить "узкие места" в тестируемой вычислительной системе, устранение которых потенциально способно повысить общую производительность;
- выбрать алгоритм решения задачи (или его готовую реализацию), позволяющий максимально эффективно "подстроиться" под имеющиеся характеристики вычислительной системы;
- определить, на этапе тестирования, достаточна мощность кластера для решения конкретной задачи в заданное время или нет, и т.д.
Кроме указанных, достаточно очевидных применений измерений, можно предложить и более сложные ситуации. Скажем, анализируя опубликованные результаты тестов различных систем и обладая информацией о показателях, которых необходимо достичь, можно на этапе проектирования попытаться определить необходимый программно-аппаратный состав будущей системы. Или, скажем, зная для разных классов задач необходимые требования к соответствующим характеристикам, заранее подобрать кластер, наиболее пригодный для них. Ну и, наконец, появляется возможность оценивать время выполнения той или иной задачи (при условии наличия оценки ее сложности, выраженной в единицах измеряемых тестом), что позволяет реализовывать различные варианты планирования выполнения задач на кластере.
Таким образом, результаты тестов позволяют:
- на стадии проектирования принимать решения о примерном составе будущей вычислительной системы;
- на стадии отладки и ввода в эксплуатацию путем сравнения с аналогами принимать решение о достижении необходимых характеристик;
- на стадии эксплуатации/модификации выявлять узкие места системы, что делает тестирование необходимой составляющей всех этапов процесса работы с кластерной вычислительной системой.
4.1.2. Способы тестирования
В предыдущем разделе мы попытались доказать, что тестирование совершенно необходимо и его результаты явно или опосредованно используются на всех этапах жизненного цикла вычислительной кластерной системы. Ниже, приведены некоторые требования, которым должны удовлетворять тесты, для того чтобы они могли быть использованы в заявленных целях [4.1]:
- Полнота. Тест должен оценивать только те параметры, для оценки которых создавался. Выдаваемые результаты должны быть непротиворечивыми, лаконичными и легкими для понимания.
- Легкость в использовании.
- Масштабируемость. Тест должен быть доступен для большого числа разного по вычислительной мощности аппаратного обеспечения.
- Переносимость. Тест должен быть доступен для большого числа разного по архитектуре аппаратного обеспечения. Основной чертой переносимости является язык программирования, и, соответственно, наличие компилятора под данную платформу.
- Репрезентативность. Вне зависимости от платформы тест должен загружать систему аналогично используемыми пользователями приложениями. Результаты сходных по структуре тестов должны быть сопоставимы.
- Доступность. Тест должен быть доступен, в том числе и его исходный код. Однако если тест распространяется вместе со своими исходными кодами, то при представлении результатов должна быть указанна версия и все внесенные изменения.
- Воспроизводимость. При необходимости должна быть возможность повторить тест с получением аналогичных результатов. Для этого при публикации результатов необходимо предоставлять исчерпывающую информацию о программном и аппаратном обеспечении.
Все тестовые программы, удовлетворяющие указанным требованиям (а их в настоящий момент существует множество) можно классифицировать следующим образом [4.2]:
- " Игрушечные " тесты ( toy benchmarks ) - маленькие, длиной в несколько сот строк исходного кода. Как правило, такие тесты представляют собой решение какой-либо широко известной математической задачи - быстрая или пирамидальная сортировка, перемешивание и т.д.
-
Микротесты ( microbenchmarks ) - специализированные, ориентированные на определение какой-то одной из основных количественных характеристик аппаратного обеспечения - среди тестируемых характеристик может быть:
- производительность центрального процессора;
- производительность и пропускную способности локальной оперативной памяти;
- скорость базовых операции ввода/вывода;
- производительность и пропускная способность коммуникационной среды.
В это группу входят тесты, оценивающие производительность операций, требующих синхронизации, и тесты операционной системы (переключение контекстов, системные вызовы и создание процессов). Часто микротесты объединяются в пакеты тестов.
- Ядра ( kernels ) - это фрагменты кода, взятые из реальных приложений. Поскольку при выполнении приложения проводят большую часть времени именно в этих фрагментах, ядра позволяют достаточно объективно определить скорость исполнения реальной программы на разных платформах.
- Синтетические тесты ( synthetic benchmarks ) оценивают производительность на основе набора большого количества показателей и не привязаны к какому-либо отдельному приложению.
- Приложения ( application benchmarks ) - наиболее часто используемые программы для реализации тех или иных реальных задач. К этому же классу можно отнести и псевдоприложения. Псевдоприложения - это программы, созданные на основе реальных приложений, но адаптированные по разным причинам специально для задач тестирования.
- Пакеты тестов ( benchmarks suites ) - коллекции различных типов тестов с преобладанием приложений.
Применительно к тестированию кластерных систем в настоящий момент традиционно преобладают тесты, относящиеся к классу ядер (Linpack, NAS Parallel Benchmarks), приложений (NAS Parallel Benchmarks) и некоторых микротестов, как правило, тестирующих коммуникационную составляющую (Netperf, тесты лаборатории параллельных информационных технологий НИВЦ МГУ). Поэтому, в силу своей широкой распространенности и полноты охвата, в дальнейших разделах будут рассматриваться именно эти тесты.