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čů, byl běh CPU obecně pomalejší než jejich paměť, ke zlomu však došlo v roce 1970. Od té doby procesory postrádají data, jelikož musejí čekat dokud nebude dokončen přístup do paměti. Mnoho superpočítačů navržených mezi léty 1980 a 1990 bylo zaměřeno na poskytování vysoce-rychlostního přístupu do paměti na úkor rychlosti procesorů, což jim umožňovalo pracovat na velkých datových souborech, do kterých rychlejší systémy nemohly přistupovat.
Omezení počtu přístupů do paměti je klíčovým prvkem výkonu dnešních moderních počítačů. Pro běžné procesory to znamená nárůst velikosti vysokorychlostních vyrovnávacích pamětí (cache) a potřebu používat sofistikovanější algoritmy, aby se maximalizovalo využití cache (a zabránilo „cache misses“ – že data nebyla nalezena v cache). Dramatický nárůst velikosti operačních systémů a aplikací na nich provozovaných v podstatě neutralizovalo výhodu cache. U víceprocesorových systémů je tento problém podstatně horší. Až takový, že se v systému několik procesorů zastaví, 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ěť pro každý procesor. Tím by se mělo zabránit snížení výkonu, když se několik procesorů snaží zároveň přistupovat do paměti.
Ne všechna data jsou zpracovávána jedním procesem, 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é chvíli.
- 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.
Koherence cache (tj. aktuálnost vůči změnám provedeným jiným procesorem) je v NUMA systémech velmi zásadní. Proto se dnes používá cache-coherent NUMA (ccNUMA), kdy řadiče cache samy mezi sebou zajišťují koherenci. Ke zpomalení tak dochází v situacích kdy na stejné místo přistupuje více procesorů rychle za sebou.
Cache koherentní NUMA (ccNUMA)
Téměř všechny dnešní počítačové architektury používají malé množství velmi rychlé nesdílené paměti, která je známa jako cache. Při použití NUMA se zajišťuje zachování koherence cache přes distribuované úložiště, což má značné režijní náklady.
Ne-cache-koherentní NUMA systémy jsou jednodušší na vývoj a realizaci, ale se standardním programovacím modelem von Neumanovy architektury velmi obtížně programovatelné. Proto všechny v současnosti používané NUMA systémy mají speciální hardware pro zajištění koherence cache, a jsou proto známy jako cache-koherentní NUMA (ccNUMA).
To je obvykle dosaženo inter-procesorovou komunikací mezi řadičemi cache, což zajišťuje konzistentní obsah paměti v případě, že je stejný obsah paměti uložen ve více než v jedné cache. ccNUMA má špatnou výkonnost, právě když se více procesorů pokouší o rychlý přístup ke stejné paměti. Proto se operační systémy s podporou NUMA pokoušejí minimalizovat četnost těchto žádostí pomocí přidělování procesorů a paměti s přihlédnutím na šetrnost k NUMA. Alternativně se využívají protokoly pro 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í chipset s podporu NUMA. Příkladem chipsetů umožňující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.
Související články
Externí odkazy
- NUMA FAQ
- Page-based distributed shared memory
- OpenSolaris NUMA Project
- Introduction video for the Alpha EV7 system architecture
- More videos related to EV7 systems: CPU, IO, etc
- NUMA optimization in Windows Applications
- NUMA Support in Linux at SGI
- Intel Tukwila
- Intel QPI (CSI) explained
- current Itanium NUMA systems