Кластери в linux

Тема даної статті - паралельні обчислення в Linux. У цій статті розглянуті загальні питання по організації кластерів, кластерне програмне забезпечення, зокрема PVM. В кінці статті ви знайдете посилання на додаткову літературу з цього питання.

Загальні відомості про кластери


Для початку потрібно розібратися що ж таке кластер в загальному випадку. Як правило, кластер складається з вузлів (окремих комп'ютерів) і об'єднує їх мережі. Для побудови мережі зазвичай використовується технологія Fast Ethernet (100Mbit / sec), але в найпростішому випадку (наприклад, створення кластера в домашніх умовах або в демонстративних цілях) підійде і один сегмент Ethernet на 10Mbit / sec.

Зазвичай кластери використовуються науково-дослідними організаціями для моделювання різного роду завдань або проведення складних розрахунків. Ціна суперкомп'ютерів є недоступною для більшості організацій, тому з'явилася ідея зібрати свій «суперкомп'ютер» з «підручного матеріалу» - робочих станцій на базі процесорів Intel. Продуктивність процесорів виробництва Intel зараз практично досягла рівня процесорів архітектури RISC (процесори Intel включаючи Pentium III використовують архітектуру CISC, а P4 - VLIW).

Збираємо свій кластер

Конфігурація вузлів кластера залежить від завдань, які вони будуть виконувати. Якщо ваша мета - саме створення кластера без вирішення яких-небудь важливих завдань, підійдуть і старенькі машини з 486-им процесором (бажано DX2 або DX4). Для вирішення щодо важливих завдань підійдуть комп'ютери з процесорами Pentium II від 400Mhz або Pentium III (від 600Mhz).

Один комп'ютер (вузол) буде центральним. Бажано, щоб він був більш потужним, ніж інші вузли кластера. На ньому потрібно встановити більш потужний процесор, в два рази більшим обсяг оперативної пам'яті, ніж на інших вузлах (мінімум 128Мб). Бажано на центральному комп'ютері використовувати SCSI-диск, але підійде і ATA133 / 7200 rpm. Краще поставити швидкий SCSI, а на вузлах взагалі відмовитися від жорсткого диска - так буде дешевше. Всі ці вимоги - бажані, але не обов'язкові.

Тепер поговоримо про мережу. Як я вже писав, бажано використовувати Fast Ethernet. Якщо кількість вузлів досить велике (від 20), для зменшення колізій необхідно розбити на окремі сегменти або використовувати для їх з'єднання комутатор (swith), а не повторювач (hub).
У деяких випадках має сенс розбити мережу на сегменти навіть при невеликому числі вузлів (від 8), наприклад, якщо ви використовуєте Ethernet (10Mbit / sec).

При використанні Ethernet відмовлятися від жорстких дисків не рекомендується. кластер буде працювати жахливо повільно, буде виникати величезна кількість колізій.
Одним з найбільш ефективних рішень для зв'язку вузлів кластера є використання 1.28GBit-них комутаторів Myrinet. Також можна використовувати технологію Gigabit Ethernet.

Програмне забезпечення

Як операційні системи можна використовувати:
  1. Linux
  2. FreeBSD
  3. Windows NT

Переважно використовувати будь-яку Unix-систему, так як саме ці операційні системи найбільш ефективніше використовують мережеві ресурси. Оптимальним рішенням є операційна система Linux - вона безкоштовна і досить проста в налаштуванні.

Можна використовувати будь-яку Linux-систему з версією ядра 2.2. * І вище. Я б порекомендував використовувати шосту версію Linux RedHat, так як вона невимоглива до системних ресурсів (мінімальна конфігурація - 486 33Mhz / 8MB RAM / 120MB HDD) і до складу дистрибутива входить відносно нове програмне забезпечення в порівнянні з версією 5.2, яку також можна використовувати для побудови кластера. Версія ядра, яка використовується цим дистрибутивом (RH 6), 2.2.5-15.

Після установки компіляторів потрібно встановити середу розподілу завдань. У цій статті я опишу роботу з середовищем PVM, хоча доступні й інші засоби - MPI. Condor.

MPI CHameleon є реалізацією промислового стандарту MPI 1.1. MPI CHameleon дозволяє програмам виконуватися всередині локальної системи або на мережному кластері з використанням TCP-з'єднань.
Середа Condor забезпечує рівномірне навантаження на кластер шляхом міграції процесів між декількома машинами.

Я вибрав простіший варіант - PVM (Parallel Virtual Machine). PVM забезпечує умови для виконання однієї (або декількох - в більшості випадком) завдань на декількох машинах. Іншими словами PVM просто розподіляє процеси на вузлах кластера також як планувальник завдань операційної системи розподіляє процесорний час для виконання декількох завдань.
PVM може працювати на наступних архітектур:

Це далеко не всі архітектури, які підтримує PVM. Список всіх доступних архітектур ви знайдете в документації pvm. Цікавлять нас (точніше, доступні нам) архітектури виділені жирним шрифтом.

Робота з «паралельної машиною» досить проста. Потрібно встановити її на всіх машинах кластера. Мій «кластер» складався з двох машин класу Pentium (100 і 150Mhz) з об'ємом ОЗУ по 32Мб і однієї (центральної) Celeron 433 (128Mb). Від мережевий завантаження я відмовився через використання 10Mbit-го Ethernet'a. До того ж на всіх вузлах вже були встановлені жорсткі диски. На центральному була встановлена ​​ОС Linux Mandrake 7, а на допоміжних машинах Linux RedHat 6.0 Hedwig. Я не встановлював якихось комерційних компліляторов, а використовував ті, які входять до складу дистрибутива.
До речі, PVM може працювати і на платформі Windows 9x, але ось цього не рекомендую робити. Заради інтересу я встановив PVM для Windows 98. Швидкість роботи навіть тестових додатків (не кажучи вже про реальних розрахунках) була значно нижчою. Те, що кластер працює повільніше було видно навіть «неозброєним оком». Швидше за все, це пояснюється неефективною роботою Windows з мережею. До того ж, досить часто весь кластер «зависав» навіть під час виконання тестових завдань, які входять до складу пакета PVM.

Використання PVM

PVM компілюється за допомогою звичної трійки команди:
configure; make; make install

Перед запуском make цього встановіть змінну середовища PVM_ROOT. У цієї змінної оточення потрібно вказати каталог, в якому знаходяться каталоги PVM (наприклад, $ HOME / pvm, якщо ви розпакували архів у свій домашній каталог). Ще однією важливою змінною оточення є PVM_ARCH. У ній міститься назва архітектури операційної системи. Дана змінна повинна встановлюватися автоматично, але якщо цього не сталося (як в моєму випадку), потрібно встановити архітектуру самостійно. При використанні Linux ця змінна повинна містити значення LINUX.

Як я вже писав, потрібно встановити PVM на всіх вузлах кластера. Вся паралельна машина складається з демона pvmd і консолі pvm. Призначення опцій запуску демона можна дізнатися, виконавши команду man pvmd. На центральній машині потрібно запустити демон pvmd і виконати команду:
pvm
Цим ми запустимо консоль, за допомогою якої ми будемо управляти всім кластером.

Після запуску консолі ви повинні побачити запрошення, яке свідчить про те, що кластер готовий до роботи:
pvm>
Введіть команду conf для друку конфігурації кластера. Ви повинні побачити приблизно це:
Лістинг 1.

З лістингу 1 видно, що зараз наш кластер складається з однієї машини - центрального вузла, який працює під управлінням Linux. Тепер саме час додати в наш кластер ще два вузла. Додавання вузлів здійснюється за допомогою команди:
add hostname
Після успішного додавання вузла в кластер він повинен бути відображений в списку вузлів кластера. Тепер уже можна запускати програми, які підтримують PVM. Приклади таких програм ви можете знайти в каталозі $ PVM_ROOT / bin / $ PVM_ARCH / .В нашому випадку це буде каталог / root / pvm / bin / LINUX (я встановив pvm в каталог / root). Для початку запустимо найпростішу програму - hello. Перш ніж запустити її, потрібно зробити кілька зауважень:
  1. Ви не можете запускати процеси прямо з консолі pvm. Консоль служить лише для управління кластером.
  2. Запуск завдання здійснюється звичайним способом - з консолі операційної системи. Але «распараллелівать» будуть лише ті процеси, які підтримують pvm. За допомогою команди spawn також можна породити завдання (див. Нижче)
При запуску hello ви повинні побачити повідомлення
hello, world from hostname.
де hostname - це вузол кластера. Іншими словами всі вузли кластера повинні привітати вас.

Показує версію бібліотеки libpvm

У таблиці 1 я описав не всі команди консолі pvm, про всі інші ми можете прочитати, ввівши команду man pvm.
Тепер розглянемо деякі команди докладніше. Почнемо з найпростішої - alias. З її допомогою можна визначити псевдоніми для часто використовуваних команд, наприклад
alias. help
Тепер замість команди help ви можете просто вводити.

Команда id виводить ідентифікатор консолі pvm:

Команда mstat відображає стан вузла, наприклад:

Подібно звичної нам команді ps, команда консолі pvm ps -a також використовується для відображення всіх виконуваних паралельної машиною завдань:

Команда pstat виводить стан завдання:

Ось тепер ми підійшли до однієї з найцікавіших команд - spawn. Дана команда породжує задачу. З її допомогою можна вказати деякі параметри завдання, наприклад, вузол, на якому вона повинна виконуватися.
spawn [opt] a.out
a.out - будь-який виконуваний бінарний файл - програма, яка навіть не підтримує бібліотеку libpvm. Для таких програм також можна вказати, на якій машині вона буде виконуватися. У середовищі Windows параметр a.out - це exe або com - файл.
Можна вказати такі параметри команди spawn:

Схожі статті