Non-Uniform Memory Access
Non-Uniform Memory Access (též Non-Uniform Memory Architecture, NUMA) je v informatice specifická počítačová platforma, která dosahuje škálovatelnosti tak, že seskupuje procesory a operační paměť do jednotek (neboli uzlů), které pak mohou samostatně fungovat téměř jako jeden počítač. Každý uzel má vlastní procesory, paměť a sběrnice. Jednotlivé uzly jsou též vzájemně propojeny a v případě potřeby mohou přistupovat k paměti jiného uzlu.
Architektura NUMA vychází z architektury SMP (Symmetric multiprocessing, použití více než jednoho procesoru na jedné základní desce). K jejímu komerčnímu rozvoji došlo v roce 1990 ve spolupráci firem Burroughs (později Unisys), Convex Computer (později Hewlett-Packard), Silicon Graphics, Sequent Computer Systems, Data General a Digital. Techniky, které byly vyvinuty těmito společnostmi, byly využity v unixových operačních systémech a také ve Windows NT.
Základní představa architektury
Moderní procesory pracují podstatně rychleji než hlavní paměť, na kterou jsou připojeny. V počátcích vysokorychlostní výpočetní techniky a superpočítačů, běželi CPU obecně pomaleji než jejich paměť. Ke zlomu však došlo v roce 1970, kdy museli CPU čekat na data až do doby, než došlo k dokončení přístupu do paměti. Mnoho superpočítačů navržených mezi léty 1980 a 1990 byly zaměřeny na poskytování vysoce-rychlostního přístupu do paměti na úkor rychlosti procesorů, což jim umožnilo pracovat na velkých datových souborech do kterých rychlejší systémy nemohli přistupovat.
Omezení počtu přístupů do paměti za předpokladu použití klíče ubírá výkon dnešních moderních počítačů. Pro běžné procesory to znamená nárůst množství vysokorychlostních vyrovnávacích pamětí a potřebu používat více sofistikovanějších algoritmů, aby se zabránilo "cache misses" (to znamená, že data nebyla nalezena v paměti cache). Dramatický nárůst velikosti operačních systémů a aplikací na nich provozovaných v zásadě přemohl cache - zlepšení zpracování. U multiprocesorů vzniká problém podstatně horší. Nyní systém může hladovět několik procesorů najednou, a to zejména proto, že pouze jeden procesor může přistupovat k paměti.
NUMA se snaží řešit tento problém tím, že má oddělenou pamět pro každý procesor. Tím by se mělo zabránit snížení výkonu, když se několik procesorů snaží adresovat stejnou pamět.
Samozřejmě ne všechny akce jsou omezeny na jediný úkol, což znamená, že více než jeden procesor, může požadovat stejná data. Pro tyto případy NUMA systémy zahrnují další hardware nebo software k přesunu dat mezi bankami. Tato operace má bohužel za následek zpomalení procesorů, které jsou k daným bankám připojeny. Z toho vyplývá, že celkové navýšení rychlosti díky NUMA je ve velké míře závislé na přesné povaze úkolů běžících na systému v dané době.
- Výhody: vysoká propustnost sběrnice, velká škálovatelnost.
- Nevýhody: složitější a dražší než základní SMP, velká latence ze vzdálených uzlů, vyšší režie.
Bez cache koherence je problematické použití, proto se používá cache-coherent NUMA (ccNUMA), kdy radiče cache mezi sebou zajišťují koherenci. Ke zpomalení dochází zejména v situacích kdy na stejné místo přistupuje více procesorů rychle za sebou.
Cache koherentní NUMA (ccNUMA)
Téměř všechny architektury dnešních procesoru používají malé množství nesdílené paměti,která je známa jako cache a slouží pro využití lokalizování referencí v přístupu do paměti. S NUMA je udržování cache coherency (odkazování na konzistenci dat uložených v lokální cache se sdílenými prostředky) přes sdílenou paměť značně náročné.
Ačkoliv je jednoduší návrh a vytvoření, non-cache-coherent NUMA systémy se staly značně složité pro programy koncipované ve standardní von Neumanově architektuře. Pro všechny NUMA počítače na trhu se používá speciálně navržený hardware pro udržování cache coherence a proto tedy název „cache-coherent“ NUMA neboli ccNUMA.
Typicky to probíhá pomocí inter-procesorové komunikace mezi řadičemi cache pro udržení pevného obrazu paměti, když chce více než jedna cache ukládat informace do stejného paměťového místa. Z tohoto důvodu, ccNUMA nepracuje správně, když chce více procesorů přistoupit na stejné paměťové místo v rychlém sledu. Operační systém podporuje pro NUMA redukci četnosti tohoto přístupu pomocí přidělování (alokace) procesorů a paměti s přihlédnutím na šetrnost k NUMA a schopnost vyhnout se plánování a zajištění nešetrných NUMA algoritmů. Alternativně protokoly cache coherency jako je MESIF protokol, který se snaží snížit komunikaci potřebnou k udržení koherence cache.
Současné ccNUMA systémy jsou multiprocesorové systémy založené na AMD Opteron (ty mohou být provedeny bez vnější logiky) a Intel Itanium, který vyžaduje speciální chcipset s podporu NUMA. Příkladem chipsetů umožňujích ccNUMA jsou SGI Shub, Intel E8870, HP sx2000 (používané v Integrity Superdome a serverech) a další (založené na systému NEC Itanium). Dřívější ccNUMA systémy, například od Silicon Graphics byly založeny na MIPS procesorech a DEC Alpha 21364 (EV7) procesorech.