Какие существуют проблемы связи процессоров в кластерной системе кратко

Обновлено: 07.07.2024

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

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

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

Готовность системы к использованию — показатель ее надежности для конечного пользователя — выражается в процентном соотношении между работоспособным состоянием системы и ее простоями по любой причине, в том числе и плановыми (к ним относятся профилактические работы, реконфигурации, смена версий программного обеспечения, модернизация оборудования и т.п.).

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

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

В зависимости от уровня готовности корпоративной системы к использованию выделяют четыре типа надежности:

Уровень готовности, % Мaкс. время простоя Тип системы
99,0 3,5 дня в год Обычная (Conventional)
99,9 8,5 часов в год Высокая надежность (High Availability)
99,99 1 час в год Отказоустойчивая (Fault Resilient)
99,999 5 минут в год Безотказная (Fault Tolerant)

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

Для типичного современного сервера величина готовности к использованию составляет 99,0%. Практика показывает, что при тщательной настройке операционной системы и продуманном системном администрировании надежность обычного сервера можно довести до уровня 99,5% и даже до 99,8%. Однако при достижении 99,5%-ной готовности основную роль среди причин простоя системы начинают играть так называемые внешние причины (ошибки в программном обеспечении, неквалифицированные действия персонала и т.д.), от которых обычный сервер никак не застрахован. Кластерная технология позволяет обеспечить уровень готовности системы к использованию в 99,9% и выше, что на практике означает менее 8 часов простоя в год.

Компьютеры, образующие кластер, — так называемые узлы кластера — всегда относительно независимы, что допускает остановку или выключение любого из них для проведения профилактических работ или установки дополнительного оборудования без нарушения работоспособности всего кластера. Кроме того, все узлы кластера выполняют полезную работу — в отличие от систем с реплицированием данных (к примеру, Novell SFT III), а также в отличие от FT-систем (Fault Tolerant), которые обеспечивают не более пяти минут простоя в год за счет максимальной избыточности — резервирования всех подверженных отказам элементов. При отказе одного из узлов кластера оставшиеся узлы могут взять на себя задания, выполнявшиеся на отказавшем узле, не останавливая общий процесс работы. При этом сбой в работе кластера выражается лишь в некотором снижении производительности системы или в недоступности приложений на короткое время, необходимое для переключения на другой узел.

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

Обзор архитектур на основе кластеров

Эффективность работы любой кластерной системы определяется двумя главными компонентами: механизмом высокоскоростного взаимодействия процессоров между собой и системным ПО, которое обеспечивает клиентам прозрачный доступ к системным ресурсам.

Существуют две основные архитектуры современных кластеров: одна основана на совместном использовании дисков, другая же не предполагает их совместного использования. Для каждой архитектуры существует множество разновидностей.

Кластерная архитектура с совместным использованием дисков

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

Другой особенностью является то, что в данном случае сервер приложений должен координировать доступ к дискам. Для этого в локальной сети между серверами должны быть установлены постоянные соединения.

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

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

В общем случае применение кластеризации с предоставлением доступа к дискам позволяет удовлетворить все требования, предъявляемые к операциям интенсивного ввода/вывода. Ее применение также повышает общую производительность системы и равномерно распределяет нагрузку. Такой подход часто комбинируется с другими механизмами восстановления системы после выхода из строя одного из компонентов.

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

Кластерная архитектура без предоставления доступа к ресурсам

Кластеры данного типа являются более масштабируемыми и обладают большим потенциалом в отношении отказоустойчивости и исправления ошибок. Это достигается посредством того, что в данном типе кластера нет совместного использования каких-либо устройств. Для достижения высокой масштабируемости и надежной работы пришлось пожертвовать производительностью работы приложения. Скорость работы глобальных сетей по сравнению с локальными практически всегда ниже.

Это тип кластеров представлен в одном из двух вариантов. Первый из них предназначен для оборудования, находящегося в непосредственной близости, а второй — для географически удаленного. Структура кластера без предоставления доступа к ресурсам представлена на рис. 3, а географически распределенный кластер — на рис. 4.

Кластеры рассматриваемого типа могут быть распределены в обширной географической области. При этом достигается уровень надежности, который не доступен ни одной локальной системе, независимо от того, является она кластерной или нет.

Топологические разновидности

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

Архитектура кластера с резервированием

Существует большое количество высоконадежных кластерных продуктов, поддерживающих возможность автоматического восстановления после отказа одного из компонентов. Все они называются системами с резервированием (fail-over systems). В таких системах два или более хост-компьютера функционируют в режиме резервных устройств. Если один из них выходит из строя, то другой (другие) автоматически начинает обрабатывать все данные, которые до этого обслуживал отказавший компьютер. Это исключает возможность фатального сбоя в работе всей системы. Данный тип организации кластеров оптимально подходит для поддержки работы критически важных приложений. Простейшая топология кластера с резервированием представлена на рис. 5.

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

В кластерах с резервированием наблюдается более разумный подход к избыточности. Резервные хост-компьютеры постоянно получают информацию о состоянии других хост-компьютеров, и поэтому в случае возникновения неисправности кластер восстанавливается незамедлительно. Использование механизма мониторинга позволяет создателям систем равномерно распределить нагрузку между хост-компьютерами, снизив коэффициент загруженности центральных процессоров до 50%.

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

Масштабируемая архитектура кластера

Организация масштабируемых кластеров непосредственно затрагивает топологию и функциональные возможности системы. В коммерческих кластерных продуктах, обеспечивающих высокую степень масштабируемости, более строгому управлению кластерами уделяется особое внимание. Более высокие, по сравнению с кластерами с резервированием, требования предъявляются и к распределению нагрузки. Это приводит к необходимости предоставления всем хост-компьютерам одинаковых привилегий доступа к данным, независимо от их расположения и способа обеспечения доступа.

Кластеры должны создаваться таким образом, чтобы объем операций управления доступом к ресурсам и данным не изменился с увеличением объемов томов, иначе все эти увеличения приведут к росту кластеров. Поскольку при добавлении новых компьютеров в кластер управление доступом к дискам и данным усложняется, простейшим способом решения такой проблемы является организация кластеров, использующих расширяемые симметричные мультипроцессорные системы (SMP). Такой подход позволяет кластеру, независимо от его архитектуры, расширяться за счет простого добавления микропроцессоров в уже установленные SMP.

Корректно организованные масштабируемые кластеры дают массу преимуществ. Технологические изменения, модернизация и даже обслуживание могут осуществляться без прекращения работы. Для кластеров такого типа особенно необходимы высокоскоростные устройства ввода/вывода к совместно используемым устройствам хранения информации.

Многоуровневая архитектура кластера

Использование двухуровневой модели физически разделяет приложение и данные, предоставляя тем самым возможность дальнейшего масштабного расширения приложения и его хост-компьютера. Объединяющее три сервера малое кольцо FDDI используется для отделения внутреннего трафика от потоков запросов ввода/вывода. В случае организации средств резервирования такая сеть может использоваться и для установления соединений между хост-компьютерами.

Поскольку для каждого типа обработки данных сервер должен обладать определенными возможностями, системные администраторы могут настроить каждый сервер в соответствии с выполняемой им функцией. Например, серверы приложений могут быть максимально оптимизированы для обработки определенного типа транзакций или вычислений, в зависимости от типа задач. Подобным образом сервер данных можно оснастить средствами высокоскоростного ввода/вывода и дисками большого объема.

В случае правильной разработки и реализации проекта топология географически распределенного кластера без предоставления совместного доступа к ресурсам обеспечивает восстановление системы на уровне приложения. Для правильного функционирования данной топологии необходимо, чтобы кластерные серверы и их средства хранения информации отвечали следующим требованиям:

  • они должны иметь достаточный резервный объем дисковой памяти для мгновенной обработки данных и запросов ввода/вывода дублируемого приложения;
  • локальные и глобальные сети, подключаемые к пользователю сети и кластерным хост-компьютерам, должны обладать достаточными резервными средствами для автоматической настройки в соответствии с изменением трафика, которое произошло в результате восстановления системы после отказа;
  • серверы должны быть географически разнесены между собой. При этом условии сбой на каком-либо одном участке не сможет одновременно повлиять и на основной, и на резервный серверы приложения;
  • необходимо обеспечить наличие копии программного обеспечения и данных приложения на резервном сервере.

Кластер взаимного резервирования представлен на рис. 8.

Использование географически распределенного кластера без предоставления совместного доступа к ресурсам позволяет разработчикам удовлетворить все требования, предъявляемые к восстановлению после сбоя, не затрачивая дополнительных средств на приобретение избыточных систем резервирования.

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

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

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

При таком типе соединения максимальное расстояние между процессорами окажется равным 6 (количество связей между процессорами, отделяющих самый ближний процессор от самого дальнего). Теория же показывает, что если в системе максимальное расстояние между процессорами больше 4, то такая система не может работать эффективно. Поэтому при соединении 16 процессоров друг с другом плоская схема является нецелесообразной. Для получения более компактной конфигурации необходимо решить задачу о нахождении фигуры, имеющей максимальный объем при минимальной площади поверхности. В трехмерном пространстве таким свойством обладает шар. Но поскольку нам необходимо построить узловую систему, вместо шара приходится использовать куб (если число процессоров равно 8) или гиперкуб , если число процессоров больше 8. Размерность гиперкуба будет определяться в зависимости от числа процессоров, которые необходимо соединить. Так, для соединения 16 процессоров потребуется четырехмерный гиперкуб . Для его построения следует взять обычный трехмерный куб, сдвинуть в нужном направлении и, соединив вершины, получить гиперкуб размером 4.

Архитектура гиперкуба является второй по эффективности, но самой наглядной. Используются и другие топологии сетей связи : трехмерный тор, "кольцо", " звезда " и другие.

Наиболее эффективной является архитектура с топологией "толстого дерева" (fat-tree). Архитектура "fat-tree" (hypertree) была предложена Лейзерсоном (Charles E. Leiserson) в 1985 году. Процессоры локализованы в листьях дерева, в то время как внутренние узлы дерева скомпонованы во внутреннюю сеть . Поддеревья могут общаться между собой, не затрагивая более высоких уровней сети.

Поскольку способ соединения процессоров друг с другом больше влияет на производительность кластера , чем тип используемых в ней процессоров, то может оказаться более целесообразным создать систему из большего числа дешевых компьютеров, чем из меньшего числа дорогих. В кластерах , как правило, используются операционные системы, стандартные для рабочих станций, чаще всего свободно распространяемые (Linux, FreeBSD), вместе со специальными средствами поддержки параллельного программирования и балансировки нагрузки . При работе с кластерами , так же, как и с MPP -системами, используют так называемую Massive Passing Programming Paradigm – парадигму программирования с передачей данных (чаще всего – MPI ). Умеренная цена подобных систем оборачивается большими накладными расходами на взаимодействие параллельных процессов между собой, что сильно сужает потенциальный класс решаемых задач.

1 Лабораторная работа 6 Изучение многопроцессорных вычислительных систем Тема программы: Архитектуры многопроцессорных вычислительных систем и др. Цель работы: изучить многопроцессорные вычислительные системы; научиться выполнять расчеты производительности процессора. Время выполнения: 2 часа Оборудование: тетрадь, ручка. Программное обеспечение: операционная система, эл. калькулятор. Теоретические основы В настоящее время сфера применения многопроцессорных вычислительных систем (МВС) непрерывно расширяется, охватывая все новые области в самых различных отраслях науки, бизнеса и производства. Стремительное развитие кластерных систем создает условия для использования многопроцессорной вычислительной техники в реальном секторе экономики. Если традиционно МВС применялись в основном в научной сфере для решения вычислительных задач, требующих мощных вычислительных ресурсов, то сейчас, из-за бурного развития бизнеса резко возросло количество компаний, отводящих использованию компьютерных технологий и электронного документооборота главную роль. В связи с этим непрерывно растет потребность в построении централизованных вычислительных систем для критически важных приложений, связанных с обработкой транзакций, управлением базами данных и обслуживанием телекоммуникаций. Можно выделить две основные сферы применения описываемых систем: обработка транзакций в режиме реального времени (OLTP, on-line transaction processing) и создание хранилищ данных для организации систем поддержки принятия решений (Data Mining, Data Warehousing, Decision Support System). Система для глобальных корпоративных вычислений это, прежде всего, централизованная система, с которой работают практически все пользователи в корпорации, и, соответственно, она должна все время находиться в рабочем состоянии. Как

2 правило, решения подобного уровня устанавливают в компаниях и корпорациях, где любые, даже самые кратковременные, простои сети могут привести к громадным убыткам. Поэтому для организации такой системы не подойдет обыкновенный сервер со стандартной архитектурой, вполне пригодный там, где не стоит жестких требований к производительности и времени простоя. Высокопроизводительные системы для глобальных корпоративных вычислений должны отличаться такими характеристиками, как повышенная производительность, масштабируемость, минимально допустимое время простоя. Наряду с расширением области применения, по мере совершенствования МВС происходит усложнение и увеличение количества задач в областях, традиционно использующих высокопроизводительную вычислительную технику. В настоящее время выделен круг фундаментальных и прикладных проблем, объединенный понятием "Grand challenges", эффективное решение которых возможно только с использованием сверхмощной вычислительных ресурсов. Этот круг включает следующие задачи: - Предсказания погоды, климата и глобальных изменений в атмосфере - Науки о материалах - Построение полупроводниковых приборов - Сверхпроводимость - Структурная биология - Разработка фармацевтических препаратов - Генетика - Квантовая хромодинамика - Астрономия - Транспортные задачи - Гидро- и газодинамика - Управляемый термоядерный синтез - Эффективность систем сгорания топлива - Геоинформационные системы - Разведка недр - Наука о мировом океане - Распознавание и синтез речи - Распознавание изображений

3 Внешнее ЗУ У вв Основное ЗУ У выв ЦП ЦП ЦП ЦП. Структурная схема многопроцессорной вычислительной машины с общей памятью Главной отличительной особенностью многопроцессорной вычислительной системы является ее производительность, т.е. количество операций, производимых системой за единицу времени. Различают пиковую и реальную производительность. Под пиковой понимают величину, равную произведению пиковой производительности одного процессора на число таких процессоров в данной машине. При этом предполагается, что все устройства компьютера работают в максимально производительном режиме. Пиковая производительность компьютера вычисляется однозначно, и эта характеристика является базовой, по которой производят сравнение высокопроизводительных вычислительных систем. Чем больше пиковая производительность, тем теоретически быстрее пользователь сможет решить свою задачу. Пиковая производительность есть величина теоретическая и, вообще говоря, не достижимая при запуске конкретного приложения. Реальная же производительность, достигаемая на данном приложении, зависит от взаимодействия программной модели, в которой реализовано приложение, с архитектурными особенностями машины, на которой приложение запускается. Существуют два способа оценки пиковой производительности компьютера. Один из них опирается на число команд, выполняемых компьютером в единицу времени. Единицей измерения, как правило, является

4 MIPS (Million Instructions Per Second). Производительность, выраженная в MIPS, говорит о скорости выполнения компьютером своих же инструкций. Но, во-первых, заранее не ясно, в какое количество инструкций отобразится конкретная программа, а, во-вторых, каждая программа обладает своей спецификой, и число команд от программы к программе может меняться очень сильно. В связи с этим данная характеристика дает лишь самое общее представление о производительности компьютера. Другой способ измерения производительности заключается в определении числа вещественных операций, выполняемых компьютером в единицу времени. Единицей измерения является Flops (Floating point operations per second) число операций с плавающей точкой, производимых компьютером за одну секунду. Такой способ является более приемлемым для пользователя, поскольку последний знает вычислительную сложность своей программы и, пользуясь этой характеристикой, может получить нижнюю оценку времени ее выполнения. Однако пиковая производительность получается при работе компьютера в идеальных условиях, т.е. при отсутствии конфликтов при обращении к памяти при равномерной загрузке всех устройств. В реальных условиях на выполнение конкретной программы влияют такие аппаратно-программные особенности данного компьютера, как: особенности структуры процессора, системы команд, состав функциональных устройств, реализация ввода/вывода, эффективность работы компиляторов. Одним из определяющих факторов является время взаимодействия с памятью, которое определяется ее строением, объемом и архитектурой подсистем доступа в память. В большинстве современных компьютеров организации наиболее эффективного доступа к памяти используется так называемая многоуровневая иерархическая память. В качестве уровней используются регистры и регистровая память, основная оперативная память, кэш-память, виртуальные и жесткие диски, ленточные роботы. При этом выдерживается следующий принцип формирования иерархии: при повышении уровня памяти скорость обработки данных должна увеличиваться,

5 а объем уровня памяти - уменьшаться. Эффективность использования такого рода иерархии достигается за счет хранения наиболее часто используемых данных в памяти верхнего уровня, время доступа к которой минимально. А поскольку такая память обходится достаточно дорого, ее объем не может быть большим. Иерархия памяти относится к тем особенностям архитектуры компьютеров, которые оказывают огромное значение для повышения их производительности. Для того, чтобы оценить эффективность работы вычислительной системы на реальных задачах, был разработан фиксированный набор тестов. Наиболее известным из них является LINPACK программа, предназначенная для решения системы линейных алгебраических уравнений с плотной матрицей с выбором главного элемента по строке. LINPACK используется для формирования списка Top500 пятисот самых мощных компьютеров мира. В настоящее время большое распространение получили тестовые программы, взятые из разных предметных областей и представляющие собой либо модельные, либо реальные промышленные приложения. Такие тесты позволяют оценить производительность компьютера действительно на реальных задачах и получить наиболее полное представление об эффективности работы компьютера с конкретным приложением.

6 Расчет производительности процессора Сегодня, подавляющее большинство современных компьютеров как открытой, так и закрытой архитектуры оснащаются многоядерными процессорами. В связи с этим у рядового пользователя возникает вполне обоснованный вопрос, а действительно ли процессор с несколькими ядрами будет более производителен по сравнению со своим одноядерным собратом? Чтобы ответить на этот вопрос необходимо знать, как рассчитать производительность процессора. Общие сведения Основными техническими показателями процессора являются (Рис.1): 1. частота системной шины; 2. разрядность системной шины; 3. коэффициент умножения. Частота системной шины показывает, какое количество бит данных может быть передано в процессор за одну секунду. Например, если частота шины 200 МГц это означает, что за 1 секунду может быть передано в процессор 200 Мбит. Разрядность системной шины показывает число каналов для передачи данных в процессор (чаще всего бывает 32 и 64). Например, если частота системной шины 200 МГц, а разрядность 32, то пропускная способность составит (200*32)/8=800 Мб/c. Коэффициент умножения показывает, во сколько раз процессор работает быстрее, чем шина, на которой он установлен. Например, при частоте шины 200 МГц и коэффициентом умножения 15 получаем тактовую частоту процессора 3000 МГц.

7 Рис. 1 Теперь необходимо ввести такое понятие как сложность задачи. То есть любой задаче, которая выполняется на компьютере, может быть присвоен свой коэффициент сложности от 1 до 8. К самым сложным задачам относят преобразование файла из одного формата в другой, и расчет точки в трехмерном пространстве (современные игры-стратегии, работа с 3Dграфикой). При этом сложность задачи соответствует коэффициенту умножения процессора. Например, процессор с тактовой частотой 1600 МГц и частотой системной шины 200 МГц, (Рис.2) при поступлении в него задачи с 8 коэффициентом сложности в виде 200 Мбит, справится с ней за одну секунду. Рис. 2

9 Многоядерность Теперь необходимо в общих чертах рассмотреть работу процессора в связке с оперативной памятью. На рисунке (Рис.5) показана работа обычного одноядерного процессора. В этом случае соблюдается очередность: первая задача (a) из оперативной памяти поступает в процессор (1), там она обрабатывается (2), после чего отсылается обратно в память (3), теперь вторая задача (b) поступает в процессор (4), где обрабатывается (5) и также отсылается обратно в оперативную память (6). На рисунке (Рис.6) показана работа процессора с технологией Hyper- Threading. В этом случае первая задача (a) из оперативной памяти поступает в процессор (1), там она обрабатывается (2), после чего вторая задача (b) поступает в процессор (3), а первая задача отсылается обратно в оперативную память (4), вторая задача обрабатывается (5), и также отсылается обратно в оперативную память (6). Данная технология может дать прирост производительности по сравнению с обычным процессором 1-10%. На

11 Рис. 8 Рис. 9 Расчет производительности для одноядерного процессора Intel 3000 МГц с логической частотой системной шины 800 МГц (физическая частота 200 МГц) для двух задач с коэффициентом сложности 8: Производительность процессора для двух задач с максимальным коэффициентом сложности составит: ((200*6)/( ))*32(разрядность)=7589 Мбит/с=948 Мб/с Теперь посчитаем производительность для двух задач с коэффициентом сложности 2:

12 Производительность процессора для двух задач с коэффициентом сложности 2 составит: (1200/4,28)*32=8972 Мбит/c=1121 Мб/c Теперь посчитаем производительность для двух задач, одной с коэффициентом сложности 2, а второй 8: Производительность процессора для двух задач, одной с коэффициентом сложности 2, а второй 8 составит: (1200/4,67)*32=8222 Мбит/c=1028 Мб/c Не трудно догадаться, что чем ниже сложность задачи, тем производительность одноядерного процессора будет выше. Теперь произведем расчет для 2-х ядерного процессора Intel с тактовой частотой ядра 2600МГц и логической частотой системной шины 1066 МГц (физическая 266,5 МГц) для двух задач с коэффициентом сложности 8: (1599/4)*32=12792 Мбит/с=1599 Мб/c Теперь посчитаем производительность для двух задач с коэффициентом сложности 2:

13 (1599/4)*32=12792 Мбит/с=1599 Мб/c Теперь посчитаем производительность для двух задач, одной с коэффициентом сложности 2, а второй 8: (1599/4)*32=12792 Мбит/с=1599 Мб/c На этих примерах прекрасно видно, что у 2-х ядерного процессора с такими техническими характеристиками производительность всегда будет одинаковая! Это происходит вследствие того, что ядро, успевшее обработать задачу, вынуждено простаивать в ожидании, когда загрузится следующая задача в соседнее ядро. Кроме того, получается, что ядра не работают одновременно, а это большая потеря в производительности. Подводя итог, можно сказать, что многоядерность действительно актуальна в случае, когда ядра могут работать одновременно, то есть когда тактовая частота процессора незначительно выше частоты системной шины. И последнее: многопроцессорные системы всегда стоят огромных денег, так как в отличие от многоядерного процессора, в них технические показатели удваиваются (в зависимости от количества процессоров). Например, если стоят два процессора, каждый с частотой системной шины 200 МГц и тактовой частотой процессора 3000 МГц, это равносильно тому, что будет работать один процессор с частотой шины 400 МГц и тактовой частотой процессора 6000.

14 Порядок выполнения работы 1. Составить презентацию на тему многопроцессорных вычислительных систем 2. Проанализировать работу процессора по примеру на данной компьютерной системе. Отчет Отчет должен содержать: наименование работы; цель работы; задание в электронном виде; последовательность выполнения работы; ответы на контрольные вопросы; вывод о проделанной работе. Контрольные вопросы 1. В чем смысл архитектурного решения многопроцессорных вычислительных систем Флинна? 2. Как работает мультипроцессорная система с общей памятью? 3. Дайте определение кластерной системе? 4. Какие существуют проблемы связи процессоров в кластерной системе?

Компьютеры, даже персональные, становятся все сложнее. Не так уж давно в гудящем на столе ящике все было просто — чем больше частота, тем больше производительность. Теперь же системы стали многоядерными, многопроцессорными, в них появились специализированные ускорители, компьютеры все чаще объединяются в кластеры.
Зачем? Как во всем этом многообразии разобраться?
Что значит SIMD, SMP, GPGPU и другие страшные слова, которые встречаются все чаще?
Каковы границы применимости существующих технологий повышения производительности?

Введение

Откуда такие сложности?
Формула производительности

Возьмем самую общую формулу производительности:


Видим, что производительность можно измерять в количестве выполняемых инструкций за секунду.
Распишем процесс поподробнее, введем туда тактовую частоту:


Включаем параллельность

Параллелизм на уровне инструкций

Технологии параллелизма на уровне инструкций активно развивались в 90е и первую половину 2000х годов, но в настоящее время их потенциал практически исчерпан. Можно переставлять местами команды, переименовывать регистры и использовать другие оптимизации, выделяя из последовательного кода параллельно исполняющиеся участки, но все равно зависимости и ветвления не дадут полностью автоматически распараллелить код. Параллелизм на уровне инструкций хорош тем, что не требует вмешательства человека — но этим он и плох: пока человек умнее микропроцессора, писать по-настоящему параллельный код придется ему.

Параллелизм на уровне данных

Векторные процессоры

float a[4] = < 300.0, 4.0, 4.0, 12.0 >;
float b[4] = < 1.5, 2.5, 3.5, 4.5 >;
__asm movups xmm0, a ; // поместить 4 переменные с плавающей точкой из a в регистр xmm0
movups xmm1, b ; // поместить 4 переменные с плавающей точкой из b в регистр xmm1
mulps xmm1, xmm0 ; // перемножить пакеты плавающих точек: xmm1=xmm1*xmm0
movups a, xmm1 ; // выгрузить результаты из регистра xmm1 по адресам a
>;

Таким образом, вместо четырех последовательных скалярных умножений мы сделали только одно — векторное.
Векторные процессоры могут значительно ускорить вычисления над большими объемами данных, но сфера их применимости ограничена, далеко не везде применимы типовые операции над фиксированными массивами.
Впрочем, гонка векторизации вычислений далеко не закончена — так в последних процессорах Intel появилось новое векторное расширение AVX (Advanced Vector Extension)
Но гораздо интереснее сейчас выглядят

Графические процессоры


Теоретическая вычислительная мощность процессоров в современных видеокартах растет гораздо быстрее, чем в обычных процессорах (посмотрим знаменитую картинку от NVIDIA)

Не так давно эта мощность была приспособлена для универсальных высокопроизводительных вычислений с помощью CUDA/OpenCL.
Архитектура графических процессоров (GPGPU, General Purpose computation on GPU – универсальные расчеты средствами видеокарты), близка к уже рассмотренной SIMD.
Она называется SIMT — (single instruction, multiple threads, одна инструкция — множество потоков). Так же как в SIMD операции производятся с массивами данных, но степеней свободы гораздо больше — для каждой ячейки обрабатываемых данных работает отдельная нить команд.
В результате
1) Параллельно могут выполняться сотни операций над сотнями ячеек данных.
2) В каждом потоке выполняется произвольная последовательность команд, она может обращаться к разным ячейкам.
3) Возможны ветвления. При этом, правда, параллельно могут выполняться только нити с одной и той же последовательностью операций.

GPGPU позволяют достичь на некоторых задачах впечатляющих результатов. но существуют и принципиальные ограничения, не позволяющие этой технологии стать универсальной палочкой-выручалочкой, а именно
1) Ускорить на GPU можно только хорошо параллелящийся по данным код.
2) GPU использует собственную память. Трансфер данных между памятью GPU и памятью компьютера довольно затратен.
3) Алгоритмы с большим количеством ветвлений работают на GPU неэффективно

Мультиархитектуры-

Суров закон, но это закон

Параллельность, это хороший способ обойти ограничение роста тактовой частоты, но у него есть собственные ограничения.
Прежде всего, это закон Амдала, который гласит
Ускорение выполнения программы за счет распараллеливания её инструкций на множестве вычислителей ограничено временем, необходимым для выполнения её последовательных инструкций.

Ускорение кода зависит от числа процессоров и параллельности кода согласно формуле


Действительно, с помощью параллельного выполнения мы можем ускорить время выполнения только параллельного кода.
В любой же программе кроме параллельного кода есть и последовательные участки и ускорить их с помощью увеличения количества процессоров не получится, над ними будет работать только один процессор.


Например, если выполнение последовательного кода занимает всего 25% от времени выполнения всей программы, то ускорить эту программу более чем в 4 раза не получится никак.
Давайте построим график зависимости ускорения нашей программы от количества параллельно работающих вычислителей-процессоров. Подставив в формулу 1/4 последовательного кода и 3/4 параллельного, получим

Мультипроцессор

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

Системы с общей памятью


В таких системах множество процессоров (и процессорных кэшей) имеет доступ к одной и той же физической оперативной памяти. Такая модель часто называется симметричной мультипроцессорностью (SMP). Доступ к памяти при таком построении системы называется UMA (uniform memory access, равномерный доступ) т.к. любой процессор может обратиться к любой ячейке памяти и скорость этого обращения не зависит от адреса памяти. Однако каждый микропроцессор может использовать свой собственный кэш.

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

Посмотрим на рисунок.
Что у нас хорошего?
Любой процессор обращается ко всей памяти и вся она работает одинаково. Программировать для таких систем проще, чем для любых других мультиархитектур. Плохо то, что все процессоры обращаются к памяти через шину, и с ростом числа вычислительных ядер пропускная способность этой шины быстро становится узким местом.
Добавляет головной боли и проблема обеспечения когерентности кэшей.

Когерентность кэша
Многоядерные процессоры


Мультикомпьютер

Сводим все воедино

Ну вот, вкратце пробежались почти по всем технологиям и принципам построения мощных вычислительных систем.
Теперь есть возможность представить себе строение современного суперкомпьютера.
Это мультикомпьютер-кластер, каждый узел которого — NUMA или SMP система с несколькими процессорами, каждый из процессоров с несколькими ядрами, каждое ядро с возможностью суперскалярного внутреннего параллелизма и векторными расширениями. Вдобавок ко всему этому во многих суперкомпьютерах установлены GPGPU — ускорители.
У всех этих технологий есть плюсы и ограничения, есть тонкости в применении.
А теперь попробуйте эффективно загрузить-запрограммировать всё это великолепие!
Задача нетривиальная… но очень интересная.
Что-то будет дальше?

Вычислительный кластер – это набор соединенных между собой компьютеров (серверов), которые работают вместе и могут рассматриваться как единая система. В отличие от грид-вычислений, все узлы компьютерного кластера выполняют одну и ту же задачу и управляются одной системой управления.

Серверы кластера обычно соединяются между собой по быстродействующей локальной сети, причем на каждом из серверов работает собственный экземпляр операционной системы. В большинстве случаев все вычислительные узлы кластера используют одинаковое оборудование и одну и ту же операционную систему. Однако в некоторых инсталляциях, например, с использованием платформы приложений для организации кластеров OSCAR (Open Source Cluster Application Resources), могут использоваться различные операционные системы или разное серверное оборудование.

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

Компоненты кластера

Вычислительные кластеры обычно состоят из следующих компонентов:

  • узел доступа;
  • вычислительные узлы;
  • файловый сервер;
  • файловая или объектная СХД с общим доступом;
  • локальная сеть LAN.

Виды кластеров

Различают следующие основные виды кластеров:

  • кластеры высокой доступности (High-availability clusters, HA);
  • кластеры с балансировкой нагрузки (Load balancing clusters);
  • высокопроизводительные кластеры (High performance computing clusters, HPC).

Кластеры высокой доступности

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

ПО для НА-кластеров обычно заблаговременно конфигурирует узел на резервном сервере и запускает на нем приложение в фоновом режиме так, чтобы основной экземпляр приложения мог немедленно переключиться на свою реплику на резервном компьютере при отказе основного.

Но не следует думать, что технология кластера высокой доступности, или вообще кластеризация, могут служить заменой резервному копированию (backup), а также решениям катастрофоустойчивости (disaster recovery).

Кластеры с балансировкой нагрузки

Балансировка нагрузки – это эффективное распределение входящего сетевого трафика в группе (кластере) серверов.

Современные веб-сайты должны одновременно обслуживать сотни тысяч и даже миллионы запросов от пользователей или клиентов и не слишком задерживать их в получении контента: текста, видео или данных приложений. Чем больше серверов будут обслуживать эти запросы, тем лучше будет качество воспринимаемого сервиса для клиентов. Однако может возникнуть ситуация, когда одни серверы сайта будут работать с перегрузкой, а другие будут почти простаивать.

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

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

Таким образом, балансировщик нагрузки выполняет следующие функции:

  • Распределяет запросы клиентов и нагрузку сети эффективным образом в во всем кластере серверов.
  • Обеспечивает высокую доступность и надежность посылкой запросов только на те серверы, которые находятся в режиме онлайн.
  • Обеспечивает гибкость, добавляя или удаляя серверы по мере надобности.

Работа балансировщика нагрузки

Алгоритмы балансировки нагрузки

Различные алгоритмы балансировки предназначены для разных целей и достижения разных выгод. Можно назвать следующие алгоритмы балансировки:

  • Round Robin – запросы распределяются по кластеру серверов последовательно.
  • Least Connections – новый запрос посылается на сервер с наименьшим числом подключений клиентов, однако при этом учитывается и вычислительная мощность каждого сервера.
  • Least Time – запросы посылаются на сервер, выбираемый по формуле, которая комбинирует быстроту ответа и наименьшее число активных запросов.
  • Hash – распределяет запросы на основании определяемого пользователем ключа, например, IP-адреса клиента или URL запрашиваемого сайта.
  • Random with Two Choices – выбираются два сервера по методу произвольного выбора и затем запрос посылается на один из них, который выбирается по критерию наименьшего числа подключений.

Программная и аппаратная балансировка нагрузки

Балансировщики нагрузки бывают двух типов: программные и аппаратные. Программные балансировщики можно установить на любой сервер достаточной для задачи емкости. Поставщики аппаратных балансировщиков просто загружают соответствующее программное обеспечение балансировки нагрузки на серверы со специализированными процессорами. Программные балансировщики менее дорогие и более гибкие. Можно также использовать облачные решения сервисов балансировки нагрузки, такие как AWS EC2.

Высокопроизводительные кластеры (HPC)

Высокопроизводительные вычисления HPC (High-performance computing) – это способность обрабатывать данные и выполнять сложные расчеты с высокой скоростью. Это понятие весьма относительное. Например, обычный лэптоп с тактовой частотой процессора в 3 ГГц может производить 3 миллиарда вычислений в секунду. Для обычного человека это очень большая скорость вычислений, однако она меркнет перед решениями HPC, которые могут выполнять квадриллионы вычислений в секунду.

Одно из наиболее известных решений HPC – это суперкомпьютер. Он содержит тысячи вычислительных узлов, которые работают вместе над одной или несколькими задачами, что называется параллельными вычислениями.

HPC очень важны для прогресса в научных, промышленных и общественных областях.

Такие технологии, как интернет вещей IoT (Internet of Things), искусственный интеллект AI (artificial intelligence), и аддитивное производство (3D imaging), требуют значительных объемов обработки данных, которые экспоненциально растут со временем. Для таких приложений, как живой стриминг спортивных событий в высоком разрешении, отслеживание зарождающихся тайфунов, тестирование новых продуктов, анализ финансовых рынков, – способность быстро обрабатывать большие объемы данных является критической.

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

Чтобы поддерживать высокую скорость вычислений, каждый компонент сети должен работать синхронно с другими. Например, компонент системы хранения должен быть способен записывать и извлекать данные так, чтобы не задерживать вычислительный узел. Точно так же и сеть должна быстро передавать данные между компонентами НРС-кластера. Если один компонент будет подтормаживать, он снизит производительность работы всего кластера.

Существует много технических решений построения НРС-кластера для тех или иных приложений. Однако типовая архитектура НРС-кластера выглядит примерно так, как показано на рисунке ниже.

Примеры реализации вычислительного кластера

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

Кластер представляет собой сеть из 11 машин с распределенной файловой системой NFS. Общее число ядер CPU в кластере – 61, из них высокопроизводительных – 48. Максимальное число параллельных высокоуровневых задач (потоков) – 109. Общее число ядер графического процессора CUDA GPU – 1920 (NVidia GTX 1070 DDR5 8Gb).

На оборудовании кластера успешно решены задачи анализа больших данных (Big Data): задача распознавания сигнала от процессов рождения суперсимметричных частиц, задача классификации кристаллических структур по данным порошковой дифракции, задача распределения нагрузки электросетей путем определения выработки электроэнергии тепловыми и гидроэлектростанциями с целью минимизации расходов, задача поиска оптимального расположения массива кольцевых антенн и другие задачи.

Архитектура вычислительного кластера

Другой вычислительный НРС-кластер дает возможность выполнять расчеты в любой области физики и проводить многодисциплинарные исследования.

На рисунке показана визуализация результатов расчета реактивного двигателя, зависимость скорости расчетов и эффективности вычислений от количества ядер процессора.

Читайте также: