Existují aplikace, kde v první řadě záleží na hrubé výpočetní síle. Ať už chcete hledat mimozemšťany v projektu Seti@Home, luštit cizí hesla jedním z nepřeberného množství k tomuto účelu vytvořených programů, či simulovat následky výbuchu atomové bomby nad některým velkým městem, může se vám hodit hóóóódně silný počítač. Pokud vám ale kapesné nestačí na zakoupení mnohaprocesorového SuperUltra Sextium 8, zkuste se porozhlédnout, zdali se ve vašem okolí nevyskytuje pár nevyužitých strojů, z nichž by bylo možné postavit výpočetní cluster.
Co je to cluster
Česky je možné slovo cluster přeložit jako seskupení nebo shluk. Ve výpočetní technice se tento termín používá pro takovou konfiguraci několika počítačů, která se navenek tváří a chová jako jeden jediný stroj.
- High-availability clusters (vysoce dostupné clustery)
- Používají se v případě, kdy je nezbytné zajistit nepřetržitý provoz určité služby bez ohledu na možné hardwarové či softwarové problémy, které mohou potkat jednotlivé stroje. Tímto typem se zde nebudeme zabývat. Více informací můžete získat například z Linux Journalu nebo přímo na Linux-HA.
- Computational clusters (výpočetní clustery)
- Použití tohoto typu jsem naznačil již v úvodu. V zásadě jde o to, že za relativně málo peněz získáte poměrně slušný výpočetní výkon. V tomto seriálu vám ukážu, jak na to. Samozřejmě za použití Linuxu.
Jak to funguje
Abyste mohli efektivně využívat výpočetní cluster, potřebujete mít nutkání vyřešit takovou úlohu, kterou lze dobře paralelizovat, tedy rozdělit na spoustu malých úloh podobného typu, které je možné zpracovávat relativně samostatně, nezávisle jednu na druhé. Je to podobné, jako kdybyste měli provést jazykovou korekturu obsáhlé kuchařky – můžete jí buďto přečíst celou sami (to je ta celá úloha), nebo si práci rozdělit zvlášť na čtení receptů na polévky, zvlášť na hlavní jídla bez masa, hlavní jídla s masem a nakonec nezapomenete opravit ani kapitolu o moučnících. Bohužel si tím moc nepomůžete, protože opět musíte přečíst celou kuchařku. Naštěstí však máte k dispozici cluster jazykových korektorek (pozn. korektorky: nebo jednu viceprocesorovou johanku :) – johanka), a tak každé z nich můžete poslat (migrovat) jednu kapitolu. Celkový čas na opravení celé knihy bude pochopitelně kratší, protože kapitoly „se budou číst“ zároveň. V modelovém případě čtyř kapitol a čtyř korektorek to stihnete za čtvrtinu původního času. Každou korektorku můžeme po vzoru počítačové terminologie nazývat node (česky uzel). Vydavatel však zadal práci nám (jsme master node, pro zadanou úlohu pak home node), takže o nějakých korektorkách nemusí mít vůbec tušení. Stejně tak to chodí v případě reálného clusteru, kdy všechny úlohy zadáváme jednomu master nodu, který je potom rozešle (migruje či jinak distribuuje) ostatním uzlům.
V praxi se však můžete setkat s následujícími problémy:
- Rozdílná rychlost uzlů
- Jedna z korektorek může mít kurz rychločtení, zatímco druhá si zrovna rozšlápla své brýle s osmi dioptriemi, a protože teď musí číst lupou, jde jí to samozřejmě pomalu.
- Rozdílná zátěž uzlů
- Kapitol v kuchařce můžeme nakonec mít šest, ale korektorky máme jen čtyři. I v případě, že jednu zpracujeme sami (ano, i master node musí někdy pracovat), budeme se šestou snažit vnutit některé z korektorek. Ta rázem bude mít dvojnásobnou zátěž oproti ostatním.
- Rozdílná rychlost komunikace
- Samozřejmě je rozdíl mezi spoluprací s korektorkou, která bydlí ve stejném domě jako my a práci jí můžeme donést osobně, a s jinou, která bydlí v Austrálii a práci nepřijímá jinak než dodanou poštovním holubem. Situace se může poněkud zkomplikovat, pokud ta australská je výjimečně rychlá a odvádí mimořádně kvalitní práci, zatímco ta, která bydlí o dvě patra pod námi, je ona již zmíněná s rozšláplými brýlemi a lupou. V takovém případě nás čeká poměrně složitá analýza, abychom zjistili, kam se vyplatí ten který úkol odeslat.
- Výpadek uzlu
- Pokud si naše korektorka zlomí nohu, není to taková tragédie, jako kdyby si vypíchla obě oči. V takovém případě by byla nucena poloopravený text operativně odmigrovat k jiné korektorce z našeho clusteru. Kterou vybere, záleží zejména na předchozích třech faktorech. Ať už je vybrána kterákoliv, tak ta práci převezme a bude v ní pokračovat.
Větší problém by nastal, kdyby naši korektorku odnesli mimozemšťani. Tím bychom o její (možná již téměř hotovou) práci přišli a museli bychom pověřit některou ze zbývajících kolegyň, aby to přečetla znovu.
Někdy se bohužel může stát, že unesená korektorka opravovala originál rukopisu, od kterého nemáme žádnou kopii, takže celá její práce je ztracena a budeme muset vydat kuchařku bez kapitoly o moučnících. V některých úlohách toto kupodivu nevadí, obvykle však ano.
Dále je vhodné výpočetní clustery rozdělit na dva typy, podle způsobu, jakým se jeho uzly dělí o práci.
- Cluster na úrovni aplikace
- Budete mít aplikaci, kde s pomocí speciálních funkcí (např. z knihovny PVM – Parallel Virtual Machine) budete řídit distribuci a komunikaci jednotlivých úloh sami. To je právě případ našeho korektorského clusteru.
- Cluster na úrovni operačního systému
- Nebudete se o nic starat, jednoduše se paralelizujete a budete doufat, že nejvhodnější rozmístění po uzlech za vás zařídí váš OS. Pokud to bude Linux s podporou Mosixu v jádře, máte šanci, že k tomu opravdu dojde. V dalším textu se již budeme zabývat jen tímto typem.
Za domácí úkol si připravte síť – pro začátek by mohlo stačit pět počítačů. Na každý z nich nainstalujte Linux v takové distribuci a verzi, která umí pracovat s jádrem řady 2.4. Pokud možno je propojte minimálně 100Mbps ethernetem a nakonfigurujte na nich síť tak, aby na sebe vzájemně viděli. V příštím dílu si ukážeme, jak z těchto počítačů vytvořit výpočetní cluster.