Published on 2001-10-2 at root.cz

MOSIX - Počítejte rychleji!

Michal Ludvig <michal@logix.cz> (c) 2001

Pokud jste svědomitě splnili, co jsem vám uložil na konci minulého dílu, máte teď několik počítačů na nichž běží kernel 2.4.9-mosix a kde jsou nainstalovány potřebné Mosixí programy.

Konfigurační soubor

Základem konfigurace je soubor mosix.map, obvykle uložený v adresáři /etc, který má následující strukturu:

# MOSIX-id      IP-adresa       počet-uzlů
  1             10.0.0.1        4
  100           10.0.0.100      1

Každý řádek definuje jednu skupinu, skupin může být maximálně 256 a význam jednotlivých položek je tento:

MOSIX-id
Číslo prvního uzlu ve skupině. Může být v rozmezí 1-65535.
IP-adresa
IP adresa prvního uzlu ve skupině.
počet-uzlů
Touto položkou systému oznamujeme, jak již název napovídá, kolik uzlů která skupina má.

V našem případě tedy máme čtyři uzly s ID od 1 (s adresou 10.0.0.1) až po ID=4 (s adresou 10.0.0.4) a jeden uzel s ID=100 s adresou 10.0.0.100. Předpokládejme tedy, že každý z našich pěti počítačů má jedno síťové rozhraní s jednou z těchto adres (pokud možno každý s jinou).
Tento soubor musí být na všech uzlech shodný, takže je dobré ho z jednoho uzlu exportovat např. přes NFS a na ostatních na něj jen udělat symlinky. Bohužel není možné tento soubor získávat přes MFS (Mosix File System), protože ho potřebujeme ještě před vlastním spuštěním Mosixových služeb, kdy MFS pochopitelně neběží.

Spuštění clusteru

Spuštění clusteru je nyní již jen otázkou napsání jednoho příkazu na každém z uzlů. Ten magický příkaz zní:

/sbin/setpe -w -f /etc/mosix.map

Může se stát, že například uzel s ID=100 má více síťových karet. V tom případě program setpe nemusí v mosix.map najít žádnou platnou (jelikož setpe vezme adresu první síťovky kterou najde a podle mosix.map se snaží přiřadit odpovídající číslo uzlu) a ohlásí chybu. Pokud se tak stane, máme dvě možnosti - buď do mosix.map dopsat další řádek ve formátu

# MOSIX-id      IP-adresa       počet-uzlů
  100           192.168.0.100   ALIAS

nebo spustit setpe -w -f /etc/mosix.map -p 100, čímž programu řekneme, o který node se jedná.
Nyní již také můžeme přimountovat Mosix File System (MFS) s podporou Direct FileSystem Access (DFSA):

mount -t mfs -o dfsa=1 mfs /mfs

Volia, máme běžící cluster. Až ho jednou budete chtít vypnout, stačí zadat příkaz setpe -off a tím daný uzel z clusteru vyjmout.

Spouštění aplikací

Nejprve si spustíme monitorování zátěže uzlů příkazem mon -d. Během chvíle bychom měli dostat "graf" s tolika sloupci, kolik máme nakonfigurovaných uzlů v mosix.map. V případě, že konkrétní uzel právě neběží, bude u jeho sloupečku napsáno DEAD.
Nyní si dáme zátěžový test. Pokud máte jednoprocesorový stroj, spusťte alespoň dvakrát následující program:

awk 'BEGIN {while(1);}'&

V první chvíli by se mělo zatížení vašeho uzlu zvýšit, ovšem již během pár sekund by měl Mosix zjistit, že jeden uzel je nepřiměřeně zatížen, zatímco ostatní se flákají a jeden z těchto nekonečných procesů by měl odmigrovat pryč. Postupně přidávejte další a další nekonečné cykly a programem mon sledujte, co se bude dít.

Pomocné programy

Uzel na kterém spouštíte vaše programy se v terminologii Mosixu nazývá home-node. U některých programů je vhodné, aby nemigrovaly a tedy aby celý svůj "život" strávily na svém home-node. Příkladně se jedná o startovací skripty, programy spouštěné přes inetd a podobné kritické procesy. Jsou dvě možnosti, jak toto zajistit. Buď to necháme na tom konkrétním programu, nebo naše přání Mosixu oznámíme při spouštění. První možnost s hodí například v shell-scriptech, kdy stačí nazačátku vykonat příkaz

if [ -w /proc/$$/lock]; then echo -n 1 > /proc/$$/lock; fi

Toto nastavení se dědí na všechny procesy následně spuštěné z daného skriptu a tím pádem i ty, pokud si explicitně neurčí jinak, zůstanou na domácím uzlu.

Druhá, univerzálnější možnost je použití programu mosrun. Tímto programem je možné zajistit, ať se program spustí na domácím uzlu a nikam nemigruje, ať se spustí na kterémkoliv jiném uzlu a tam zůstane, ať se spustí na jednom z několika definovaných uzlů, ale pak ať z něj klidně odmigruje, atd. Kombinací je nepřeberné množství. Dále můžeme vhodným parametrem tohoto programu Mosixu napovědět o jaký druh procesu se jedná - zda výpočetní, nebo spíše na disk stále hrabající. Uveďme si jeden příklad:

mosrun -j1-2,4 -F -l -c -r muj_program

Tímto Mosixu oznamujeme, že chceme spustit muj_program na uzlu 1, 2, nebo 4 (-j1-2,4), případně kdekoliv jinde, pokud žádný z preferovaných uzlů není právě dotupný (-F). Proces pak může svobodně migrovat po ostatních uzlech (-l). Dále Mosixu říkáme, že se jedná o výpočetně náročný proces (-c), což však nemusí platit o jeho eventuálních potomcích (-r). Zdaleka jsme zde nevyčerpali všechy přepínače. V podrobné manuálové stránce se dočtete o spoustě dalších možností, které tato pomocná utilitka pro spouštění programů v prostředí Mosixu poskytuje. Při jejím čtení se také dozvíte, že pro nejobvyklejší situace existují snadno zapamatovatelné aliasy (např. runon pro mosrun -j)

Administrace

Pro administraci clusteru existuje program mosctl s jehož pomocí lze jednotlivým uzlům zakázat či povolit přijímání cizích procesů, odmigrovávání vlastních procesů či "povolat" zpět vlastní procesy, které se potulují po clusteru. Také je možné zapínat a vypínat MFS na jednotlivých uzlech a nastavovat parametry, kterými se řídí rozhodování o migraci procesů. Dále je mosctl schopen zjistit zatížení, stav, volnou a dostupnou paměť, atd. a to jak u svého, tak u vzdálených uzlů.
Pokud se nechcete trápit s parametry tohoto příkazu a máte rádi "klikavější" prostředí, poohlédněte se po balíčku MosixView, který vám administraci poněkud usnadní a zároveň poskytne přehledné a lehce ovladatelné prostředí, v němž budete moci jediným dvojklikem poslat nějaký proces z uzlu 1 na uzel 2, případně vypnout uzel 3.
A až se vám počítání bude zdát pomalé, přečtěte si manuálovou stránku programu tune a vyzkoušejte si, co se z ní dozvíte. V ideálním připadě byste s jeho pomocí měli vyladit cluster na vyšší výkon.

Protože se s vaším fungl novým clusterem jistě chcete více sžít, doporučuji vám přečtení manuálových stránek - zejména té s názvem mosix (překvapivě), kde se dozvíte, jaké zajímavé informace o běžících procesech a konfiguraci systému můžete nalézt v adresáři /proc, kam Mosix po svém startu přidá několik položek (jak globálně platných, tak také do adresáře každého procesu). Spoustu dalších informací samozřejmě naleznete na oficiálních stránkách Mosixu, kde se též dočtete postup, jak se přihlásit do e-mailové konference zabývající se vším kolem Mosixu. Takže nyní již víte všechno potřebné, abyste váš nový cluster mohli začít trápit náročnými početními úlohami.