Опубликован: 28.10.2009 | Уровень: специалист | Доступ: платный
Лекция 3:

Оценка производительности кластерных систем

Аннотация: В лекции обсуждается проблема оценки производительности кластеров, дается обзор существующих тестов и рассказывается об использовании тестов для оценки производительности.
Ключевые слова: очередь, этап жизненного цикла, кластерная система, проблема тестирования, тестовая программа, пирамидальной сортировки, коммуникационная среда, переключение контекста, создание процесса, адаптированност, LINPACK, NAS, benchmarking, репрезентативность, jack, плавающая запятая, увеличение производительности, суперскалярность, MPP, тестовая процедура, векторизация, система линейных алгебраических уравнений, SMPS, bandwidth, reduce, linear algebra, subroutine, vectorizer, signaling, image processing, DAT, input file, innovation, output file, problem, NBS, thresholding, fact, recursive, lookahead, MIX, transpose, memory alignment, NPB, NASA, non-numerical, simulate, суперкомпьютер, генерация случайных чисел, openmp, sample code, LU-разложение, EP, метод Монте-Карло, вещественная арифметика, межпроцессорный, частная производная, разреженные матрицы, метод сопряженных градиентов, собственное число, уравнениями в частных производных, эффективный тест, вычислительная задача, тестирование производительности, операции передачи данных, файл-сервер, латентность, полный граф, базовая функция

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, тесты лаборатории параллельных информационных технологий НИВЦ МГУ). Поэтому, в силу своей широкой распространенности и полноты охвата, в дальнейших разделах будут рассматриваться именно эти тесты.

Алексей Николаев
Алексей Николаев
Россия, г. Саранск
Рамиль Ариков
Рамиль Ариков
Россия, Республика Мордовия