Кластеры в Linux
Тема данной статьи - параллельные вычисления в
Linux. В этой статье рассмотрены общие вопросы по организации кластеров,
кластерное программное обеспечение, в частности PVM. В конце статьи вы найдете
ссылки на дополнительную литературу по этому вопросу.
Общие сведения о кластерах
Обычно кластеры используются научно-исследовательскими организациями для моделирования различного рода задач или проведения сложных расчетов. Цена суперкомпьютеров является недоступной для большинства организаций, поэтому появилась идея собрать свой 'суперкомпьютер' из 'подручного материала' - рабочих станций на базе процессоров Intel. Производительность процессоров производства Intel сейчас практически достигла уровня процессоров архитектуры RISC (процессоры Intel включая Pentium III используют архитектуру CISC, а P4 - VLIW). Собираем свой кластерКонфигурация узлов кластера зависит от задач, которые они будут выполнять. Если ваша цель - само создание кластера без решения каких-нибудь важных задач, подойдут и старенькие машины с 486-ым процессором (желательно DX2 или DX4). Для решения относительно важных задач подойдут компьютеры с процессорами Pentium II от 400Mhz или Pentium III (от 600Mhz). Обратите внимание на объем оперативной памяти. В
первом случае (486/демонстрация работы кластера) достаточным будет 16-32MB
(желательно). Во втором - минимум 64Мб, рекомендуется 128Мб ОЗУ. Один компьютер (узел) будет центральным. Желательно, чтобы он был более мощным, чем остальные узлы кластера. На нем нужно установить более мощный процессор, в два раза большим объем оперативной памяти, чем на остальных узлах (минимум 128Мб). Желательно на центральном компьютере использовать SCSI-диск, но подойдет и ATA133 / 7200 rpm. Лучше поставить быстрый SCSI, а на узлах вообще отказаться от жесткого диска - так будет дешевле. Все эти требования - желательные, но не обязательные. Если вы откажетесь от использования жестких
дисков на узлах кластера, операционная система будет загружаться по сети, но об
этом мы поговорим немного позже. В этом случае вы получите лишь выигрыш во
времени: операционную систему и программное обеспечение нужно будет настраивать
только один раз. Теперь поговорим о сети. Как я уже писал,
желательно использовать Fast Ethernet. Если количество узлов довольно
велико (от 20), для уменьшения коллизий необходимо разбить на отдельные сегменты
или использовать для их соединения коммутатор (swith), а не повторитель (hub).
При использовании Ethernet отказываться от
жестких дисков не рекомендуется: кластер будет работать ужасно медленно,
будет возникать огромное число коллизий. Программное обеспечениеВ качестве операционных систем можно использовать:
Предпочтительнее использовать любую Unix-систему, так как именно эти операционные системы наиболее эффективнее используют сетевые ресурсы. Оптимальным решением является операционная система Linux - она бесплатна и довольно проста в настройке. Можно использовать любую Linux-систему с версией ядра 2.2.* и выше. Я бы порекомендовал использовать шестую версию Linux RedHat, так как она нетребовательна к системным ресурсам (минимальная конфигурация - 486 33Mhz/8MB RAM/120MB HDD) и в состав дистрибутива входит относительно новое программное обеспечение по сравнению с версией 5.2, которую также можно использовать для построения кластера. Версия ядра, используемая этим дистрибутивом (RH 6), 2.2.5-15. После установки и настройки (настройки сети)
операционной системы нужно установить специальные компиляторы. Дело в
том, что бесплатно распространяемые компиляторы gcc/g77/egcs не обеспечивают
необходимого уровня оптимизации программ для процессоров Intel (PII, PIII).
Рекомендуется использовать коммерческие компиляторы, например, входящие в проект
PGI Workstation. В первом и во втором случае доступны тестовые версии компиляторов. Shareware-версию пакета PGI вы можете скачать на сайте PGI Group. А тестовую (14 дней) версию компилятора Intel можно скачать на сайте Intel. После установки компиляторов нужно установить среду распределения задач. В этой статье я опишу работу со средой PVM, хотя доступны и другие средства MPI, Condor. MPI CHameleon представляет собой реализацию
промышленного стандарта MPI 1.1. MPI CHameleon позволяет программам выполнятся
внутри локальной системы или на сетевом кластере с использованием
TCP-соединений. Я выбрал более простой вариант - PVM (Parallel
Virtual Machine). PVM обеспечивает условия для выполнения одной (или нескольких
- в большинстве случаем) задач на нескольких машинах. Другими словами PVM просто
распределяет процессы на узлах кластера также как планировщик заданий
операционной системы распределяет процессорное время для выполнения нескольких
задач. Alliant FX/8 ALPHA DEC Alpha/OSF-1 DEC Alpha/OSF-1 / using shared memory AIX46 IBM/RS6000 / AIX 4.x ATT AT&T/NCR 3600 под управлением SysVR4 BSD386 80[345]86 под управлением BSDI или BSD386/FreeBSD CM5 Thinking Machines CM-5 CNVXN Convex using native f.p. CRAY Cray I860 Intel RX Hypercube IPSC2 Intel IPSC/2 LINUX 80[3456]86 под управлением Linux MASPAR MIPS SUN4 Sun 4, 4c, sparc, etc. SUN4SOL2 Sun 4 под управлением Solaris 2.x SUNMP Sun 4 / Solaris 2.x WIN32 PC's под управлением Windows95 bkb NT (Intel, Alpha) Это далеко не все архитектуры, которые поддерживает PVM. Список всех доступных архитектур вы найдете в документации pvm. Интересующие нас (точнее, доступные нам) архитектуры выделены жирным шрифтом. Работа с 'параллельной машиной' довольно проста.
Нужно установить ее на всех машинах кластера. Мой 'кластер' состоял из двух
машин класса Pentium (100 и 150Mhz) с объемом ОЗУ по 32Мб и одной (центральной)
Celeron 433 (128Mb). От сетевой загрузки я отказался из-за использование
10Mbit-го Ethernet'a. К тому же на всех узлах уже были установлены жесткие
диски. На центральном была установлена ОС Linux Mandrake 7, а на вспомогательных
машинах Linux RedHat 6.0 Hedwig. Я не устанавливал каких-нибудь коммерческих
комплиляторов, а использовал те, которые входят в состав дистрибутива.
Использование PVMPVM компилируется с помощью привычной тройки
команды: Перед запуском make установите переменную окружения PVM_ROOT. В этой переменной окружения нужно указать каталог, в котором находятся каталоги PVM (например, $HOME/pvm, если вы распаковали архив в свой домашний каталог). Еще одной важной переменной окружения является PVM_ARCH. В ней содержится название архитектуры операционной системы. Данная переменная должна устанавливаться автоматически, но если этого не произошло (как в моем случае), нужно установить архитектуру самостоятельно. При использовании Linux эта переменная должна содержать значение LINUX. Как я уже писал, нужно установить PVM на всех
узлах кластера. Вся параллельная машина состоит из демона pvmd и консоли pvm.
Назначение опций запуска демона можно узнать, выполнив команду man pvmd. На
центральной машине нужно запустить демон pvmd и выполнить команду:
После запуска консоли вы должны увидеть
приглашение, которое свидетельствует о том, что кластер готов к работе:
pvm> conf conf 1 host, 1 data format HOST DTID ARCH SPEED DSIG dhsilabs 40000 LINUX 1000 0x00408841 Из листинга 1 видно, что сейчас наш кластер
состоит из одной машины - центрального узла, который работает под управлением
Linux. Теперь самое время добавить в наш кластер еще два узла. Добавление узлов
осуществляется с помощью команды:
hello, world from hostname, где hostname - это узел кластера. Другими словами все узлы кластера должны поприветствовать вас. Более интересной является программа gexample. После запуска нужно ввести два аргумента: n и число процессоров. Не вдаваясь в математические подробности, она рассчитывает сумму от 1 до n и факториал числа n. Второй аргумент определяет количество процессоров, которые будут задействованы в вычислении. В нашем случае второй аргумент равен трем. Просмотреть список всех задач можно с помощью команды ps -a. Эту команду нужно вводить в консоли pvm, а не в консоли операционной системы! Породить задачу можно также с помощью команды spawn, которая подробно рассмотрена ниже. Назначение всех команд консоли pvm представлено в таблице 1. Таблица 1.
В таблице 1 я описал не все команды консоли pvm,
обо всех остальных мы можете прочитать, введя команду man pvm. Команда id выводит идентификатор консоли pvm: id t40001 Команда mstat отображает состояние узла, например: pvm > mstat dhsilabs dhsilabs ok Подобно привычной нам команде ps, команда консоли pvm ps -a также используется для отображения всех выполняемых параллельной машиной задач: pvm > ps -a ps -a HOST TID FLAG 0x COMMAND dhsilabs 40002 4/c hoster dhsilabs 40009 2/f hello Команда pstat выводит состояние задачи: pstat 40002 t 40002 run Вот теперь мы подошли к одной из самых
интересных команд - spawn. Данная команда порождает задачу. С ее помощью можно
указать некоторые параметры задачи, например, узел, на котором она должна
выполняться. Таблица 2.
На этом я завершаю эту небольшую статью о Linux-кластерах. В следующих статьях мы поговорим о других кластерных проектах, в которых используется операционная система Linux. Список дополнительной литературы вы найдете ниже. Если что-нибудь непонятно, пишите - с удовольствием выслушаю ваши вопросы и комментарии, да и команду man тоже никто не отменял. |